eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingmój obfuskator - problem projektowy › mój obfuskator - problem projektowy
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.2a01:110f:1505:45
    00:18ce:3af5:a84:5f43!not-for-mail
    From: Jivanmukta <j...@p...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
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    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="a...@w...edu.pl"
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
    Thunderbird/102.2.2
    Content-Language: en-US
    Xref: news-archive.icm.edu.pl pl.comp.programming:215859
    [ ukryj 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: