Obasz
Obash to zaciemniacz skryptów bash napisany w języku programowania C. obash koduje i szyfruje skrypty powłoki bash do postaci wykonywalnych plików binarnych , podobnie jak shc , projekt, który go zainspirował, ale wykorzystuje szyfrowanie AES-256 , a klucz i wektor inicjujący są pobierane ze sprzętu, zamiast być zakodowane na stałe w samym pliku binarnym. Projekt obash został rozpoczęty w celu rozwiązania niektórych problemów wpływających na shc, z których głównym jest możliwość zobaczenia oryginalnego źródła skryptu powłoki przez proste wydanie ps -ef
. Chociaż cele są takie same, obash nie ma wspólnego kodu z shc i został zbudowany od podstaw od podstaw, wszelkie podobieństwa kodu są czysto przypadkowe i podyktowane wspólnymi celami.
Obash jest wciąż w toku, ale główna gałąź na GitHub ma generalnie użyteczne źródła, podczas gdy gałąź testowa może być w dowolnym momencie w stanie przejściowym.
Jak to działa wewnętrznie
Obash bierze skrypt wejściowy i szyfruje go AES-256, a także base64 koduje tekst zaszyfrowany AES, dzięki czemu można go użyć do zadeklarowania tablicy znaków bez znaku. Następnie tworzy pośredni plik C, który jest w zasadzie interpreterem (patrz interpreter.c
), funkcjami, tablicą tekstową zawierającą tekst zaszyfrowany, opcjonalny klucz i IV dla plików binarnych wielokrotnego użytku (nie związanych ze sprzętem) i main. Pośredni plik C jest następnie kompilowany do pliku wykonywalnego. Pośredni plik C jest zbudowany w następujący sposób (patrz mk_sh_c
w functions.c
):
- zawiera blok z
interpreter.h
-
crypted_script
zmienna zawierająca zaszyfrowany skrypt AES-256 zakodowany przez base64 - zmienne serial i uuid (puste, jeśli nie nadają się do ponownego użycia)
- blok funkcji z
interpreter.h
- blok main_body z
interpreter.h
Zobacz skrypt recreate_interpreter_header, aby uzyskać szczegółowe informacje na temat tworzenia pliku interpreter.h z pliku interpreter.c.
Klucz i wektor inicjujący dla szyfrowania AES-256
Klucz i IV nie są zakodowane na stałe w pliku binarnym (chyba że zdecydujesz się zbudować statyczny plik binarny wielokrotnego użytku z flagą -r
), ale są pobierane za każdym razem ze sprzętu (stąd powiązanie go z maszyną). W przypadku statycznego pliku binarnego wielokrotnego użytku (zbudowanego z -r
), wówczas uuid i serial znajdują się w samym pliku binarnym, ale i tak będą manipulowane przez makekey i makeiv, tak że nie będą natychmiast używane, jeśli ktokolwiek kiedykolwiek sprawdzi sam plik binarny. Chociaż miejsce pobytu, z którego pobrano numer seryjny i identyfikator użytkownika, jest identyfikowalne i nie jest tajemnicą (uid maszyny i numer seryjny w przypadku produktów jednorazowych i losowe cyfry szesnastkowe w przypadku wielokrotnego użytku), należy nimi następnie manipulować w taki sposób, aby nie nadawały się bezpośrednio do użytku, tak jak jest . W kodzie znajduje się komentarz sugerujący, gdzie należy to zrobić (patrz funkcje makekey i makeiv w functions.c): zachęca się do tego każdego z was używającego obash, w przeciwnym razie dość łatwo byłoby wyodrębnić źródło skryptu z zaciemniony plik binarny. Na przykład w kodzie rozproszonym „-” są usuwane z identyfikatora użytkownika, a numer seryjny jest uzupełniany, aby osiągnąć sugerowaną długość użytego szyfru.
Alternatywy