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!
Odpowiedzi:
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!
źródło
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.
źródło
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 )
źródło
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
źródło
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ą.
źródło
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.
źródło
Mój projekt icebuddha.com obsługuje to za pomocą Pythona do opisania formatu w przeglądarce.
źródło
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.
źródło