Zostałem poproszony o przetworzenie niektórych plików serializowanych jako obiekty binarne (nie tekst/JSON niestety) Thrift, ale nie mam dostępu do programu lub programisty, który utworzył pliki, więc nie mam pojęcia o ich strukturze, kolejność w terenie itp. Czy istnieje sposób użycia bibliotek Thrift do otwarcia pliku binarnego i przeanalizowania go, uzyskania listy typów pól, wartości, zagnieżdżenia itp.?Jak można dokonać inżynierii wstecznej pliku binarnego?
Odpowiedz
Niestety wygląda na to, że protokół binarny Thrift w ogóle nie w znaczący sposób znakuje; do dekodowania wydaje się zakładać, że masz plik .thrift w ręce, więc wiesz, że następne 4 bajty mają być liczbą całkowitą i nie są w rzeczywistości pierwszą połową zmiennoprzecinkowej. Wygląda na to, że utknąłeś w zasadzie, patrząc na pliki w edytorze szesnastkowym (lub odpowiedniku) i próbując wywnioskować pola w oparciu o dokładnie te wzorce, które widzisz.
Istnieje bardzo niewiele osób bity:
Każdy plik zaczyna się od numeru wersji, identyfikator protokołu smyczkową i sekwencji. Mapy zaczną się od 6 bajtów identyfikujących typy kluczy i wartości (pierwsze dwa bajty, jako kody całkowite) oraz liczbę elementów jako 4-bajtową liczbę całkowitą. Kody typów wydają się być standardowe (kanoniczna lokalizacja ich definicji wydaje się być TProtocol.h w Źródłach oszczędzania, na przykład wartość boolowska jest określona przez kod typu 2, ciąg znaków UTF-8 według kodu typu 16 i tak dalej) . Łańcuchy poprzedzone są 4-bajtowym polem długości całkowitej, a listy poprzedzone są typem (1 bajt) i 4 bajtową długością. Wygląda na to, że wszystkie pola liczbowe są zapisywane jako duże-endian, a zmiennoprzecinkowe są zapisywane w formacie IEEE (co powinno sprawić, że podwaja się stosunkowo łatwo).
Pliki TBinaryProtocol * w folderze Thrift zawierają dodatkowe pomocne informacje; na plusie jest wiele różnych implementacji, dzięki którym możesz przeczytać te, które są implementowane w języku, który najbardziej Ci odpowiada.
Przepraszam, wiem, że to prawdopodobnie nie jest pomocne, ale tak naprawdę wygląda na to, że wszystkie informacje są dostępne w formacie binarnym Thrift; Oczywiście format binarny został zaprojektowany z myślą, że zawsze będziesz znał dokładną specyfikację protokołu i że celem jest zminimalizowanie przestrzeni drutu, a nie uczynienie go łatwym do rozszyfrowania na ślepo.
- 1. Rozważając rozpoczęcie inżynierii wstecznej/demontaż
- 2. Jak bezpieczne jest proguard przeciwko inżynierii wstecznej?
- 3. Aplikacja do inżynierii wstecznej MySQL i PostgreSQL DB?
- 4. W jaki sposób mogę dokonać inżynierii wstecznej plików lokalizacji w systemie Mac OS X w celu nauki języków naturalnych?
- 5. Jak dokonać binarnego serializowania klasy w przenośnej bibliotece klas?
- 6. PHP Jak inżynierii wstecznej dzień roku 3212 (YDDD) do 2013-08-01 (rrrr-mm-dd)
- 7. Deserializacja części pliku binarnego
- 8. Pobieranie pliku binarnego
- 9. Generowanie losowego pliku binarnego
- 10. Numer referencyjny układu pliku binarnego
- 11. Wtyczka Eclipse lub narzędzie Open Source do inżynierii wstecznej kodu java dla diagramu sekwencji
- 12. Czytanie pliku binarnego z pythonem
- 13. W jaki sposób mogę dokonać CVS-commit pliku binarnego z wiersza poleceń?
- 14. Jak zastąpić niektóre bajty pliku binarnego dd?
- 15. Jak wygenerować plik PDF z pliku binarnego?
- 16. Jak dołączyć dane do pliku binarnego?
- 17. Wysyłanie pliku binarnego w Tornado
- 18. Przesyłanie pliku binarnego na Node.js
- 19. Czy można dokonać redukcji w tablicy z OpenMP?
- 20. Używanie jquery ajax do pobrania pliku binarnego
- 21. Jak zmusić Mercurial (hg) do traktowania pliku jako pliku binarnego?
- 22. Jak wybrać tylko część ogromnego pliku binarnego (pliku)?
- 23. Parsowanie pliku binarnego w języku Ruby
- 24. Buforowanie pliku binarnego w języku C#
- 25. Symulacja inżynierii genetycznej
- 26. Osadzanie pliku binarnego wewnątrz biblioteki klasowej
- 27. Czy można dokonać rekurencyjnego zamknięcia w Rust?
- 28. Wiersz poleceń do inżynierii z wykorzystaniem pliku .mwb?
- 29. Otwarcie binarnego pliku wyjściowego strumienia bez obcinania
- 30. Odczytywanie danych z pliku binarnego kleszcza Dukascopy
Zakładam, że mówisz o http://incubator.apache.org/thrift/ - możesz opublikować/oznaczyć język, którego używasz. – TrueWill