Python Obfuscator — Obfuskuj i wirtualizuj kod Python

Obfuskuj, wirtualizuj i chroń skrypty Python .py dzięki polimorficznemu szyfrowaniu łańcuchów, silnikowi VM, transformacjom automatem stanów, kontroli integralności i antydebugowaniu — przez GUI, CLI, narzędzie online lub API.

Obfuskacja, wirtualizacja i ochrona skryptów Python

Python Obfuscator chroni własnościowe skrypty .py poprzez zmianę nazw, polimorficzne szyfrowanie ciągów znakowych i liczb całkowitych, spłaszczanie przepływu sterowania, automat skończonych stanów (FSA), silnik VM, samoobronne kontrole integralności, linker ochrony oraz sondy antydebugowania i antyanalizy.

Python to wieloplatformowy, dynamicznie typowany język skryptowy szeroko stosowany do automatyzacji, usług backendowych, przetwarzania danych i narzędzi wewnętrznych. Ponieważ pliki .py są dystrybuowane jako czytelny kod źródłowy, lub są trywialnie dekompilowane z bajtkodu .pyc, własnościowa logika i osadzone sekrety są narażone na dostęp każdego, kto ma dostęp do pliku, chyba że kod źródłowy zostanie obfuskowany.

Dlaczego skrypty Python wymagają obfuskacji?

Skrypty są zazwyczaj dystrybuowane jako zwykłe pliki .py lub proste paczki. Ta wygoda oznacza, że każdy z dostępem do pliku może odczytać całą logikę, poszukać danych uwierzytelniających lub kluczy API w ciągach znakowych i wykraść Twoje algorytmy, chyba że podejmiesz dodatkowe kroki, aby ukryć zamysł programu.

Obfuskacja

Zaawansowana obfuskacja

Python Obfuscator wykorzystuje najnowocześniejsze strategie obfuskacji, takie jak polimorficzne szyfrowanie ciągów znakowych, szyfrowanie liczb całkowitych i zmiennoprzecinkowych, przepisywanie mieszanych wyrażeń boolowsko-arytmetycznych oraz szum w postaci przynęt. Wynik ukrywa literały i strukturę, zachowując przetestowane zachowanie w czasie działania.

Procesor

Wirtualizacja kodu

Wybrane instrukcje są przenoszone do losowo generowanego silnika VM z przemieszanymi tabelami dyspozycji, fałszywymi opcode'ami i zaciemnioną pętlą dyspozytora. Analitycy muszą interpretować maszynę wirtualną zamiast czytać zwykły kod Python.

Węzeł

Automat skończonych stanów (FSA)

Obfuskacja automatem skończonych stanów (FSA) przepisuje liniowe bloki instrukcji Python na dwustanowe automaty z nieprzezroczystymi harmonogramami i przemieszanymi handlerami dyspozycji. Zamiast czytać kod od góry do dołu, analitycy muszą śledzić liczbowe stany, tabele przejść i fałszywe ścieżki, aby zrekonstruować pierwotną kolejność.

Błąd

Antydebugowanie i antyanaliza

Ochrona antydebugowa wstawia polimorficzne sondy, które wykrywają podłączone debuggery, trasery, maszyny wirtualne, środowiska sandbox i emulowane interpretery. Gdy sonda się aktywuje, zobfuskowany skrypt kończy działanie po cichu zamiast ujawniać chronioną logikę podczas interaktywnej analizy.

Monitor systemu

Kontrola integralności

Sonda startowa weryfikuje kształt skryptu na dysku (skalowany digest treści) i ustawia klucz naruszenia, gdy plik nie odpowiada już zbudowanej wersji zobfuskowanej. Deszyfratory ciągów znakowych korzystają z tego klucza, więc zmodyfikowane skrypty zwracają śmieci zamiast czystego tekstu. Ta samoobronna warstwa zwiększa koszt swobodnej deobfuskacji i edycji plików.

Łącznik

Linker ochrony

Linker ochrony dodaje funkcje-przynęty i fałszywe wywołania, żeby skopiowany fragment nadal wyglądał jak zwykły kod programu. Ukryte pułapki uruchamiają się tylko wtedy, gdy ktoś zmieni plik albo odpali sam kawałek kodu. Jeśli skrypt startuje normalnie, te dodatki milczą i program działa jak zwykle.

Przed i po obfuskacji

Spójrz na ten przykład i kliknij zakładkę „Po obfuskacji”, aby zobaczyć jak ten sam skrypt staje się trudniejszy do odczytania na pierwszy rzut oka:

def get_greeting(name):
    print(f"Hello World from {name}!")


get_greeting("Python Obfuscator")
_hn_jtskg = 0
_jw_ntq = 297 * 400 + 36
_x4e8bfda = abs(_jw_ntq - 8074)
_ev_koc_nn = max(_jw_ntq, _x4e8bfda) - min(_jw_ntq, _x4e8bfda)
_j_uo_xk_byh = 0


def _gn_jjz_mcn3v8p(slot, salt, guard):
    global _hn_jtskg, _j_uo_xk_byh
    if not _hn_jtskg:
        return ''
    [c.upper() for c in ('jfe', 'm0ao', 'r8ysw')]
    if (((slot * 31) + salt) & 65535) != guard:
        return ''
    tk = _j_uo_xk_byh
    _ie_m39_csp_doefp = {'ouj1': 455, 'vjz_o': 170, 'iqnv': 291}
    _ie_m39_csp_doefp['r5_lr_m'] = _ie_m39_csp_doefp['ouj1'] + _ie_m39_csp_doefp['vjz_o']
    _yw_xso = sum(_ie_m39_csp_doefp.values())
    if tk is None:
        tk = 0
    _v93a130f2e4 = 508
    if _v93a130f2e4 == 524:
        _g_yf7_ia14_go = 'h1_vph'
    elif _v93a130f2e4 == 561:
        _g_yf7_ia14_go = 'hawo_b'
    else:
        _g_yf7_ia14_go = _v93a130f2e4 * 2
    dk = _vb6a18ffee4 if '_vb6a18ffee4' in dir() else None
    try:
        _xg_ln5_kz_yeus_fo7 = 850 ** 0.5
    finally:
        pass
    if dk is None:
        dk = 0
    d = [46866, 46865]
    r = ''
    for s9q_o_spi_zzuf_ql_vy_v in range(len(d)):
        v = d[s9q_o_spi_zzuf_ql_vy_v]
        for _j_l9g_l7_pe_tqe_is in range(2, -1, -1):
            for _psbom_dh_x_ay in range(2, -1, -1):
                v = v + 230
        for _zh_h33vzxj_izegl9 in range(0, -1, -1):
            v = v + int(((236 + (-3 * s9q_o_spi_zzuf_ql_vy_v) + (3 * _zh_h33vzxj_izegl9)) % 256 + 256) % 256))
            v = v ^ 53766
        v = v - (salt + slot + tk + dk + 0)
        if 0 <= v <= 0xFFFF:
            r += chr(v)
        elif 0x10000 <= v <= 0x10FFFF:
            r += chr(v)
    return r
...

Czy nadal rozpoznałbyś pierwotny zamysł, gdybyś miał tylko zobfuskowany tekst i żadnej wcześniejszej kopii skryptu?

Jak działa Python Obfuscator?

Silnik parsuje kod źródłowy Python do drzewa AST, a następnie stosuje wybieralne transformacje: zmianę nazw identyfikatorów, spłaszczanie przepływu sterowania, automat skończonych stanów (FSA), wirtualizację VM, polimorficzne szyfrowanie ciągów znakowych i liczb, wstawianie szumu i przynęt, samoobronne sondy integralności, linker ochrony oraz kontrole antydebugowania i antyanalizy. Wiele technik jest specyficznych dla tego produktu; niektóre pomysły są współdzielone z naszymi innymi narzędziami ochronnymi.

Potok Python Obfuscator — obfuskacja, wirtualizacja i ochrona

Po zakończeniu wszystkich przebiegów silnik generuje nowy plik .py. Skrajne przypadki w gramatyce Pythona i bibliotekach zewnętrznych oznaczają, że zawsze powinieneś przetestować wynik w docelowym środowisku uruchomieniowym.

Wersja konsolowa

Python Obfuscator jest dostarczany z interfejsem konsolowym dla automatyzacji pod Windows i Linux.

CLI Python Obfuscator do automatyzacji pod Windows i Linux

Wykorzystaj go do zintegrowania obfuskacji z serwerami budowania, zadaniami CI lub pakowaniem wsadowym.

Jakieś pytania?

Jeśli chcesz zapytać o Python Obfuscator, lub coś jest niejasne, napisz do mnie.