W rzeczywistości Dropbox zrobił to bardzo dobrze, udało im się zabezpieczyć swoją aplikację na pulpicie wykonaną w Pythonie; Dużo się nad tym zastanawiałem, ale nie ma lepszego rozwiązania niż obfuskacja, co nie jest zbyt bezpiecznym rozwiązaniem, a zobaczysz gdzieś swój kod.Obfuscowanie kodu bajtowego python poprzez mutację interpretera
Słuchałem sesji wykonanej przez Giovanni Bajo (założyciel PyInstaller), powiedział Dropbox to robi:
- Bytecode-kodowania przez rekompilacji tłumacza CPython, a przez ten standard CPython interpreter nie będzie w stanie go uruchomić, tylko rekompilowany interpreter cpython.
- Wszystko, co musisz zrobić, to przetasować liczby poniżej numeru
define loadup 8
.
Nigdy nie przeszukiwałam kodu źródłowego Pythona, więc nie będę twierdził, że w pełni rozumiem powyższe słowa.
Muszę usłyszeć głos ekspertów: jak to zrobić? A jeśli po ponownej kompilacji będę mógł spakować moją aplikację przy użyciu dostępnych narzędzi, takich jak PyInstaller?
Aktualizacja:
Zrobiłem rozeznanie odnośnie jak Dropbox robi tego typu zaciemniania/mutacji i znalazłem to:
Według Hagen Fritsch, robią to w dwóch etapach:
Używają one szyfru TEA wraz z RNG wysianymi przez pewne wartości w kodzie obiektu każdego modułu python. One dostosowane interpreter odpowiednio tak, że
a) Odszyfrowuje moduły i
b) uniemożliwia dostęp do odszyfrowanych kodowej obiektów.
Byłaby to prosta ścieżka pozwalająca odszyfrować wszystko i zrzucić moduły za pomocą wbudowanego programu Marshall.
Inną używaną sztuczką jest ręczne szyfrowanie kodów operacyjnych. Niestety, można to naprawić tylko półautomatycznie, dlatego ich jednolphabetyczny algorytm podstawiania okazał się dość skuteczny pod względem wygranej trochę czasu.
wciąż chcę więcej wgląd w jaki sposób można to zrobić, bardziej skończy, nie wiem, w jaki sposób deszyfrowanie dzieje się w tym procesie ... Chcę głos wszystkich ekspertów tutaj ... wspólne faceci gdzie jesteś.
Podobne, bardziej aktualne pytanie: [Undecompilable Python] (http://stackoverflow.com/q/15087339/222914) –
Dzięki Janne. Bardzo podobne do tego, co powiedziałeś, dodając do tego, usunięcie modułów introspekcji w nowo utworzonym/przetasowanym tłumaczu. – securecurve
na koniec dnia kod bajtowy będzie można wyodrębnić z pamięci, a następnie osoba atakująca może porównać nowy przetasowany kod bajtowy ze standardowym, aby wiedzieć, w jaki sposób tasowanie było; ale, bądźmy uczciwi, czy ten sam napastnik nie może dekompilować programu napisanego w C, aby uzyskać kod źródłowy, nic nie jest zabezpieczone przed odwróceniem, to kompromis ... tak widzę rzeczy, może jestem w błędzie . – securecurve