Narzędzia pomagające w inżynierii wstecznej formatów plików binarnych

82

Jakie narzędzia są dostępne, aby pomóc w dekodowaniu nieznanych formatów danych binarnych?

Znam Hex Workshop i 010 Editor, obie struktury wspierające. Są one dopuszczalne w ograniczonym zakresie w przypadku znanych, stałych formatów, ale są trudne w użyciu w przypadku czegoś bardziej skomplikowanego, szczególnie w przypadku nieznanych formatów. Chyba patrzę na moduł języka skryptowego lub narzędzie GUI do obsługi skryptów.

Na przykład chciałbym móc znaleźć strukturę w bloku danych na podstawie ograniczonych znanych informacji, być może magicznej liczby. Po znalezieniu struktury podążaj za znanymi słowami długości i przesunięcia, aby znaleźć inne struktury. Następnie powtórz to rekurencyjnie i iteracyjnie, jeśli ma to sens.

W moich snach być może nawet automatycznie zidentyfikuj możliwe przesunięcia i długości na podstawie tego, co już powiedziałem systemowi!

Mata
źródło
1
To nie jest bezpośrednia odpowiedź na twoje pytanie: czy nie masz plików wykonywalnych, które działają z tymi plikami binarnymi o nieznanych formatach? Używanie debuggera ring3, takiego jak OllyDbg, do inżynierii wstecznej, które zamiast tego byłoby o wiele łatwiejsze niż próba brutalnej siły na formaty plików.
Daniel Sloof
O tak, jedną z aplikacji, które powinienem był dodać do pytania "który program chciałeś kiedykolwiek napisać, ale nigdy nie znalazłem na to czasu";)
devio
W niektórych przypadkach mam pliki wykonywalne, które w pewnym stopniu je przetwarzają. Czasami pliki są kodem wykonywalnym (ale nie w standardowym formacie) i mogą zawierać własne procedury dekodowania. Jako punkt wyjścia możemy mieć ograniczone fragmenty częściowej dokumentacji. W innych przypadkach nie mam nic.
Mat

Odpowiedzi:

22

Oto kilka wskazówek, które przychodzą na myśl:

Z mojego doświadczenia wynika, że ​​interaktywne języki skryptowe (używam Pythona) mogą być bardzo pomocne. Możesz napisać prostą strukturę do obsługi strumieni binarnych i kilku prostych algorytmów. Następnie możesz napisać skrypty, które wezmą Twój plik binarny i sprawdzą różne rzeczy. Na przykład:

Wykonaj analizę statystyczną różnych części. Na przykład losowe dane powiedzą ci, że ta część jest prawdopodobnie skompresowana / zaszyfrowana. Zera mogą oznaczać wypełnienie między częściami. Rozproszone zera mogą oznaczać wartości całkowite lub ciągi znaków Unicode i tak dalej. Spróbuj dostrzec różne przesunięcia. Spróbuj przekonwertować części binarne na 2 lub 4 bajtowe liczby całkowite lub na liczby zmiennoprzecinkowe, wydrukuj je i zobacz, czy mają sens. Napisz kilka funkcji, które będą szukać powtarzających się lub bardzo podobnych części w danych, w ten sposób możesz łatwo znaleźć nagłówki.

Spróbuj znaleźć jak najwięcej łańcuchów, wypróbuj różne kodowania (łańcuchy c, łańcuchy pascal, utf8 / 16, itp.). Są do tego dobre narzędzia (myślę, że Hex Workshop ma takie narzędzie). Struny mogą ci wiele powiedzieć.

Powodzenia!

Untrots
źródło
Hachoir z odpowiedzi poniżej to właśnie tego rodzaju ramy. Zawiera predefiniowany zestaw pól: różne rodzaje łańcuchów, dat, bitów, wartości zmiennoprzecinkowych, dopełnienia itp. Wbudowane parsery mogą być używane jako przykłady wraz z dokumentami.
roolebo
15

Dla Mac OS X jest nowe, świetne narzędzie, które jest jeszcze lepsze niż mój iBored: Synaliyze It! ( http://www.synalysis.net/ )

W porównaniu do iBored , lepiej sprawdza się w przypadku plików niezablokowanych, a jednocześnie zapewnia pełną kontrolę nad strukturami, w tym skryptowalnością (z Lua). I lepiej wizualizuje struktury.

Thomas Tempelmann
źródło
10

Tupni ; o ile mi wiadomo, nie jest dostępne bezpośrednio z Microsoft Research, ale jest artykuł o tym narzędziu, który może zainteresować kogoś, kto chce napisać podobny program (być może open source):

Tupni: Automatyczna inżynieria odwrotna formatów wejściowych ( @ biblioteka cyfrowa ACM )

Abstrakcyjny

Niedawne prace wykazały znaczenie automatycznej inżynierii wstecznej specyfikacji protokołów lub formatów plików. Jednak w formatach poddanych inżynierii wstecznej przez poprzednie narzędzia brakowało ważnych informacji, które są krytyczne dla aplikacji zabezpieczających. W tym artykule przedstawiamy Tupni, narzędzie, które może odtworzyć format wejściowy z bogatym zestawem informacji, w tym sekwencjami rekordów, typami rekordów i ograniczeniami wejściowymi. Tupni może uogólniać specyfikację formatu na wiele danych wejściowych. Wdrożyliśmy prototyp Tupni i oceniliśmy go w 10 różnych formatach: pięciu formatach plików (WMF, BMP, JPG, PNG i TIF) oraz pięciu protokołach sieciowych (DNS, RPC, TFTP, HTTP i FTP). Tupni zidentyfikował wszystkie sekwencje rekordów na wejściach testowych. Pokazujemy również, że agregując wiele plików WMF, Tupni może uzyskać pełniejszą specyfikację formatu dla WMF. Ponadto demonstrujemy użyteczność Tupni, wykorzystując bogate informacje, które dostarcza do generowania sygnatur luk w zabezpieczeniach zeroday, co nie było możliwe w przypadku poprzednich narzędzi inżynierii wstecznej.

MaD70
źródło
2
Link do artykułu: research.microsoft.com/en-us/um/people/wdcui/papers/…
Steve Bennett
8

Moje własne narzędzie „iBored”, które niedawno wypuściłem, może to zrobić częściowo. Napisałem narzędzie do wizualizacji i debugowania formatów systemów plików (UDF, HFS, ISO9660, FAT itp.) I zaimplementowałem wyszukiwanie, kopiowanie, a później nawet obsługę struktury i szablonów. Obsługa struktur jest dość prosta, a szablony są sposobem na dynamiczne identyfikowanie struktur.

Całość jest programowalna w dialekcie Visual BASIC, co pozwala na testowanie wartości, odczytywanie określonych bloków i tak dalej.

Narzędzie jest bezpłatne, działa na wszystkich platformach (Win, Mac, Linux), ale ponieważ jest to osobiste narzędzie, które właśnie udostępniłem publicznie, aby je udostępnić, nie jest zbytnio udokumentowane.

Jeśli jednak chcesz spróbować i wyrazić swoją opinię, mogę dodać więcej przydatnych funkcji.

Zrobiłbym to nawet jako open source, ale ponieważ jest napisane w REALbasic , wątpię, aby wiele osób przyłączyło się do takiego projektu.

Link: strona główna iBored

Thomas Tempelmann
źródło
2
Brzmi jak cholernie fajny projekt do przyłączenia się ... Kiedy pracowałem jako badacz antywirusów, byłoby to naprawdę przydatne. Zamiast tego zrobiłem wszystko ręcznie ... Ściągnę to i sprawdzę. Dziękuję za to, mam z tego użytek. :)
LarryF,
Wygląda na początek fajnego narzędzia do analizy plików binarnych, ale nadal jest bardzo skoncentrowane na dysku (bloki 512-bajtowe to trochę gratis ...)
Steve Bennett
@SteveBennett: lubi grupować plik w bloki o równej wielkości, to prawda, ale można łatwo zmienić rozmiar bloku za pomocą menu. Ponadto iBored może obsługiwać cały plik jako jeden blok. Jedyną wadą jest to, że będzie miał problemy z dużymi plikami, ponieważ próbuje pokazać wszystkie dane w jednym przewijalnym widoku bloku, jako jednym bloku, co może prowadzić do problemów z wydajnością.
Thomas Tempelmann
6

Nadal czasami używam starego edytora szesnastkowego o nazwie AX, zaawansowanego edytora szesnastkowego. Wygląda na to, że teraz w dużej mierze zniknął z Internetu, chociaż Google powinien nadal być w stanie go dla Ciebie znaleźć. Ostatnią wersją, jaką znam, była wersja 3.4, ale tak naprawdę korzystałem tylko z wersji 2.1 przeznaczonej do użytku osobistego.

Jego najciekawszą funkcją i tą, której najczęściej używałem do rozszyfrowania różnych formatów gier i grafik, jest graficzny tryb widoku. To po prostu pokazuje plik z każdym bajtem zamienionym w piksel oznaczony kolorem. I choć brzmi to prosto, czasami znacznie ułatwiło mi to próby inżynierii wstecznej.

Przypuszczam jednak, że robienie tego na oko jest przeciwieństwem wykonywania automatycznej analizy, a tryb graficzny nie będzie zbyt przydatny do znajdowania i śledzenia przesunięć ...

Późniejsza wersja ma pewne funkcje, które brzmią, jakby pasowały do ​​twoich potrzeb (skrypty, wyszukiwarka regularności, generator gramatyki), ale nie mam pojęcia, jak dobre są.

mercator
źródło
URL jest martwy, może teraz jest tutaj: advanced-hex-editor-axe.en.softonic.com
Steve Bennett
@Steve Dzięki za ostrzeżenie. To jest ten. Pomimo wszystkich obietnic dotyczących braku wirusów, mój skaner antywirusowy dał mi ostrzeżenie przed wirusami, próbując go pobrać, więc nie zawracałem sobie głowy. Przeformułowałem swoją odpowiedź.
mercator
6

Istnieje Hachoir, który jest biblioteką Pythona do przetwarzania dowolnego formatu binarnego na pola, a następnie przeglądania pól. Ma wiele parserów dla popularnych formatów, ale możesz także napisać własne parsery dla swoich plików (np. Podczas pracy z kodem, który czyta lub zapisuje pliki binarne, zwykle najpierw piszę parser Hachoir, aby mieć pomoc w debugowaniu). Wygląda jednak na to, że projekt jest obecnie prawie nieaktywny.

oliver
źródło
(Link jest uszkodzony)
jacobq
1

Mój projekt icebuddha.com obsługuje to za pomocą Pythona do opisania formatu w przeglądarce.

0xdabbad00
źródło
0

Wytnij i wklej moją odpowiedź na podobne pytanie:

Jednym z narzędzi jest WinOLS , które jest przeznaczone do interpretacji i edycji binarnych obrazów komputerowych zarządzających silnikami pojazdów (głównie danych liczbowych w ich tablicach przeglądowych). Obsługuje różne formaty endian (choć myślę, że nie PDP) i przegląda dane przy różnych szerokościach i przesunięciach, definiuje obszary tablic (mapy) i wizualizuje je w 2D lub 3D z różnymi opcjami skalowania i przesunięcia. Posiada również heurystyczną / statystyczną automatyczną wyszukiwarkę map, która może Ci pomóc.

Jest to narzędzie komercyjne, ale darmowe demo pozwoli ci zrobić wszystko, poza zapisywaniem zmian w pliku binarnym i korzystaniem z funkcji zarządzania silnikiem, których nie potrzebujesz.

blueshift
źródło