Thread View: pl.comp.lang.php
5 messages
5 total messages
Started by Jivanmukta
Tue, 11 Oct 2022 12:22
mój obfuskator - problem projektowy
Author: Jivanmukta
Date: Tue, 11 Oct 2022 12:22
Date: Tue, 11 Oct 2022 12:22
19 lines
2127 bytes
2127 bytes
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ę 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.
Re: mój obfuskator - problem projektowy
Author: Roman Tyczka
Date: Sat, 15 Oct 2022 17:52
Date: Sat, 15 Oct 2022 17:52
12 lines
1634 bytes
1634 bytes
On 11.10.2022 14:22, Jivanmukta wrote: > Czy takie rozwiązanie jest do przyjęcia, tzn. że pierwsza obfuskacja > może trwać nawet kilka godzin, ale późniejsze już w minutach? A co jest tak długotrwałym procesem? Bo te kilka godzin to jakieś grube nieporozumienie. Czytanie dysku to sekundy, może kilkadziesiąt, a parsowanie na wielu wątkach też powinno wyrywać z kapci, zatem... co tyle trwa? -- pzdr Roman
Re: mój obfuskator - problem projektowy
Author: Jivanmukta
Date: Wed, 19 Oct 2022 06:10
Date: Wed, 19 Oct 2022 06:10
32 lines
2427 bytes
2427 bytes
W dniu 15.10.2022 o 19:52, Roman Tyczka pisze:
> On 11.10.2022 14:22, Jivanmukta wrote:
>> Czy takie rozwiązanie jest do przyjęcia, tzn. że pierwsza obfuskacja
>> może trwać nawet kilka godzin, ale późniejsze już w minutach?
>
> A co jest tak długotrwałym procesem? Bo te kilka godzin to jakieś grube
> nieporozumienie. Czytanie dysku to sekundy, może kilkadziesiąt, a
> parsowanie na wielu wątkach też powinno wyrywać z kapci, zatem... co
> tyle trwa?
>
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"
Re: mój obfuskator - problem projektowy
Author: Jivanmukta
Date: Wed, 19 Oct 2022 10:32
Date: Wed, 19 Oct 2022 10:32
1 lines
1063 bytes
1063 bytes
Ponadto dla każdego pliku wywołuję skrypt PHP robiący tokenizację.
Re: mój obfuskator - problem projektowy
Author: Jivanmukta
Date: Sun, 14 Jan 2024 15:27
Date: Sun, 14 Jan 2024 15:27
8 lines
1343 bytes
1343 bytes
Mam jeszcze jedno pytanie: Mój obfuskator ma możliwość sprawdzania poprawności składniowej kodu obfuskowanego projektu (php -l). Używa do tego zainstalowanej wersji PHP. Z pewnych przyczyn musi to być >= 8.0. Jednak projekt może być napisany w starszej wersji, np. 5.6. Dobrze by było sprawdzać projekt dla tej wersji, tzn. przydałaby się opcja w obfuskatorze: --phpver=5.6 Jak podejść do tego problemu, bo chyba w C++ nie da się zmienić numeru wersji używanego PHP...
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