🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#232603
Author: Jivanmukta
Date: Tue, 11 Oct 2022 12:22
19 lines
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
#232604
Author: Roman Tyczka
Date: Sat, 15 Oct 2022 17:52
12 lines
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
#232605
Author: Jivanmukta
Date: Wed, 19 Oct 2022 06:10
32 lines
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
#232606
Author: Jivanmukta
Date: Wed, 19 Oct 2022 10:32
1 lines
1063 bytes
Ponadto dla każdego pliku wywołuję skrypt PHP robiący tokenizację.
Re: mój obfuskator - problem projektowy
#232607
Author: Jivanmukta
Date: Sun, 14 Jan 2024 15:27
8 lines
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