eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingmój obfuskator - problem projektowy › mój obfuskator - problem projektowy
  • Data: 2022-10-24 15:42:06
    Temat: mój obfuskator - problem projektowy
    Od: Jivanmukta <j...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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|pub
    lic)?\\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ę.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: