🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
2 messages
2 total messages Started by Jivanmukta Mon, 24 Oct 2022 13:38
mój obfuskator - problem projektowy
#73008
Author: Jivanmukta
Date: Mon, 24 Oct 2022 13:38
46 lines
3291 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ę.
Re: mój obfuskator - problem projektowy
#73009
Author: Jivanmukta
Date: Mon, 24 Oct 2022 13:40
1 lines
991 bytes
Przepraszam omyliłem grupy,chciałem wysłać na pl.comp.programming.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads