🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #217787

mój obfuskator - problem projektowy

#217787
From: Jivanmukta
Date: Mon, 24 Oct 2022 13:42
46 lines
3280 bytes
Piszę tutaj bo na pl.como.lang.php nie dostałem odpowiedzi.

Napisałem w C++ obfuskator PHP 5/7/8. Obfuskator umożliwia m.in. 
zaciemnienie projektu wykorzystującego Composera, tzn. katalog vendor. 
Ponieważ obfuskuję samą aplikację a nie frameworki i biblioteki z 
katalogu vendor potrzebuję zrobić żeby identifikatory z vendor nie były 
zastępowane losowymi. W tym celu analizuję kod frameworków i bibliotek z 
katalogu vendor w poszukiwaniu identyfikatorów (zmiennych, funkcji, 
metod, właściwości itd.). Problem w tym że jeśli katalog vendor jest 
duży, tzn. liczy wiele podkatalogów, proces analizy trwa długo, nawet 
kilka godzin. Żeby nie analizować katalogu vendor wielokrotnie (przy 
każdej obfuskacji projektu) zapamiętuje znalezione w vendor 
identyfikatory w cache'u (pliku xml-owym). Modyfikacja katalogu vendor 
(np. dodanie Composerem nowej biblioteki lub update) nie powoduje u mnie 
ponownego parsowania całego vendor bo zapamiętuję w cache'u timestampy 
podkatalogów vendor.

Czy takie rozwiązanie jest do przyjęcia, tzn. że pierwsza obfuskacja 
może trwać nawet kilka godzin, ale późniejsze już w minutach?
Jeśli nie, to czy ktoś mógłby mi rzucić pomysł jak rozwiązać ten 
problem? Chcę żeby mój obfuskator był uniwersalny, tzn. potrafił 
zaciemnić projekt wykorzystujący różne frameworki i różne biblioteki.

Dużo czasu zajmuje przetwarzanie wyrazeniami regularnymi kazdego wiersza 
kazdego pliku duzego katalogu vendor.

     const string remembering_regexps[index_what_num][2] =

{{"(static|abstract|final)?\\s*(public)?\\s*(static|abstract|final)?\\s*(function)\\s+(" 
+ ::identifier + ")\\s*\\(", ""},

{"(static|abstract|final)?\\s*(private|protected|public)?\\s*(static|abstract|final)?\\s*(function)\\s+(" 
+ ::identifier + ")\\s*\\(", ""},
          {"\\b(function)\\s+(" + ::identifier + ")\\s*\\(", ""},

{"(static|private|protected|public)?\\s*(readonly)?\\s*([_a-zA-Z0-9]+)?\\s*(\\$(" 
+ ::identifier + ")\\s*=.*,?\\s*)+", // uproszczenie

"(static|private|protected|public)?\\s*(readonly)?\\s*([_a-zA-Z0-9]+)?\\s*(\\$(" 
+ ::identifier + ")\\s*,?\\s*)+"},   // uproszczenie

{"(?!(private|protected|public))\\s*(\\s*|[^:\\-][^:>])\\s*(\\\\\\\\)*\\$(" 
+ ::identifier + ")", ""}};                // pasuje do "instanceof 
$var" a nie pasuje do "self::$prop;" czy "->$prop"

Ponadto dla każdego pliku wywołuję skrypt PHP robiący tokenizację.
Technical Details
Message-ID: <tj64ne$36qsg$3@portraits.wsisiz.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.2a01:110f:1505:4500:18ce:3af5:a84:5f43!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.2a01:110f:1505:4500:18ce:3af5:a84:5f43!not-for-mail
From: Jivanmukta <jivanmukta@poczta.onet.pl>
Newsgroups: pl.comp.programming
Subject: mój obfuskator - problem projektowy
Date: Mon, 24 Oct 2022 15:42:06 +0200
Organization: http://www.wit.edu.pl
Message-ID: <tj64ne$36qsg$3@portraits.wsisiz.edu.pl>
Mime-Version: 1.0
Injection-Date: Mon, 24 Oct 2022 13:42:06 -0000 (UTC)
Injection-Info: portraits.wsisiz.edu.pl; posting-host="2a01:110f:1505:4500:18ce:3af5:a84:5f43"; logging-data="3369872"; mail-complaints-to="abuse@wsisiz.edu.pl"
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit