Mam plik exe i dekompilowałem go z Ida. Mówiono programowi kodowanemu w Delphi, więc próbowałem dekompilować z DeDe, ale to się nie udało, nie ma wyjścia i błędu. Zastanawiam się, czy można znaleźć język używany w tworzeniu exe, próbując różnych dekompilatorów napisanych specjalnie dla języka programowania? A może mogą zawieść z jakiegoś innego powodu?Czy można się dowiedzieć, w jakim języku jest napisany plik exe?
Odpowiedz
W wielu przypadkach numer to, umożliwiający identyfikację kompilatora użytego do kompilacji kodu, a także oryginalny język.
Większość wdrożeń językowych obejmuje pewną bibliotekę środowiska wykonawczego do implementacji różnych wysokopoziomowych operacji językowych. Na przykład C ma CRT, który implementuje operacje wejścia/wyjścia pliku (fopen
, fread
itp.), Delphi ma pomocników kompilatora dla swojego typu string
(konkatenacja, przypisanie i inne), ADA ma różne funkcje niskiego poziomu, aby zapewnić bezpieczeństwo i wkrótce. Porównując kod programu i bibliotek uruchomieniowych kompilatorów kandydatów, możesz znaleźć dopasowanie.
IDA wdraża to podejście w FLIRT technology. Korzystając z podpisów, IDA jest w stanie określić większość głównych kompilatorów dla DOS i Windows. W przypadku Linuksa jest to nieco trudniejsze, ponieważ nie ma jednego dostawcy plików binarnych kompilatora, więc podpisy musiałyby być wykonane dla każdej dystrybucji.
Jednak nawet bez użycia kodu biblioteki wykonawczej może być możliwe zidentyfikowanie używanego kompilatora.Wiele kompilatorów używa bardzo różnych idiomów do reprezentowania różnych operacji. Na przykład I was able to guess, że kompilatorem używanym w wirusie Duqu był Visual C++, który później był confirmed.
Kompilacja jest stratny proces, więc nie jest to w ogóle możliwe, aby dekompilacji pliku wykonywalnego (lub inny moduł skompilowany program, taki jak .so
lub .dll
) i odzyskania kodu źródłowego w języku oryginalnym lub nawet jednoznacznie określić, jakie oryginalny język był. Nie jest nawet konieczne, aby istniał tylko jeden oryginalny język kodu źródłowego, ponieważ możliwe jest, że przed połączeniem różne moduły zostały napisane w różnych językach. Zazwyczaj można, zdemontować binarny i odzyskać język asemblera, chociaż może to mieć bardzo ograniczoną wartość.
W wielu przypadkach możesz może powiedzieć coś o oryginalnym języku pod warunkiem, że plik binarny nie został usunięty (z symboli). Na przykład zwykle możesz stwierdzić, czy plik binarny został pierwotnie napisany w C++, patrząc na symbole w pliku binarnym (w systemie Linux, używając objdump
, nie ma pojęcia, jaki odpowiednik może być w systemie Windows): C++ symbole są zniekształcone w szczególny sposób. To nie jest 100% gwarancji, ale duże prawdopodobieństwo.
To powiedziawszy, niektóre dekompilatory wykonują całkiem sensowną pracę w bardzo trudnym zadaniu. Wnioskowanie prawdopodobnych konstruktów wysokiego poziomu z pliku binarnego nie jest łatwe. W moim (bardzo ograniczonym) doświadczeniu, pracują raczej dla dość trywialnych programów lub oprogramowania skompilowanego z wąskim zakresem wersji oryginalnego kompilatora, ale dławią się na czymś zasadniczym: autorowi dekompilatora bardzo trudno jest nadążyć za zmiany w kompilatorach, i może być dla niej bardzo mało bodźca do tego.
Nawet w przypadkach, gdy dekompilacja jest bardzo udana, wynikiem jest zasadniczo całkowicie nieskomentowany kod z bezsensownymi nazwami zmiennych, który jest niezwykle trudny do zrozumienia. Dekompilacja to jedno, a wydobycie zamierzonego semantycznego znaczenia z wyniku jest inne. Pamiętaj, że wiele zmiennych, odgałęzień, pętli i funkcji zostanie całkowicie zoptymalizowanych, wiele funkcji zostanie wstawionych itp. Zatem "kod źródłowy", nawet jeśli możesz go uzyskać w ten sposób, może nie być dużo użytkowania dla ciebie.
- 1. Jak sprawdzić, w jakim języku jest napisany zwykły tekst?
- 2. W jakim języku programowania jest Sublime Text 2 napisany
- 3. Jaki język jest napisany w języku html?
- 4. Jak się dowiedzieć, czy plik został zmodyfikowany?
- 5. Jak się dowiedzieć, na jakim widoku zakończyło się wydarzenie dotykowe?
- 6. w jakim języku jest napisane Asana?
- 7. Czy można dezasemblować plik exe programu Visual FoxPro 9.0?
- 8. Polecenia powłoki są napisane w jakim języku?
- 9. Dowiedzieć się, czy jest potęgą b
- 10. Jak utworzyć samodzielny, samodzielny program instalacyjny napisany w języku C#?
- 11. szyn: dowiedzieć się, czy IP jest w zakresie adresów IP
- 12. Jak mogę się dowiedzieć, czy pierwszy znak ciągu jest liczbą?
- 13. Czy możesz dowiedzieć się, czy instancja Django Model jest "brudna"?
- 14. W jakim języku należy używać wtyczki Pidgin?
- 15. w jakim języku wprowadzono cybersyn/cyberstride?
- 16. Jak sprawdzić, czy plik jest plikiem EXE lub DLL?
- 17. wyraźnie powiedzieć, w jakim języku tłumaczyć
- 18. W jakim języku używam swojego projektu?
- 19. W jakim języku napisano .NET Framework?
- 20. W jakim języku programowania opracowano aplikację GoogleTalk?
- 21. jak się dowiedzieć, czy sesja audio jest aktywna w iOS
- 22. Czy można ponownie wygenerować symbole dla exe?
- 23. Czy można ustalić, w jakim języku Zgromadzenie .NET zostało napisane ex post facto?
- 24. . Kontrakty CodeNet - Gdzie można dowiedzieć się więcej?
- 25. Czy można dowiedzieć się, ile czasu spędził użytkownik na stronie?
- 26. Czy można napisać ogólny plik zipWith w języku C++?
- 27. Jak dowiedzieć się, kiedy plik został utworzony w ColdFusion
- 28. co zawiera plik .exe?
- 29. W jakim celu stosuje się Django?
- 30. Czy można się dowiedzieć, który skrypt jest uruchomiony w procesie Pythona?
Oczywiście nie oczekuję nagiego kodu źródłowego :) Ale programy tak bardzo się rozwinęły i mogą pokazać kod zespołu w sposób znacznie bardziej przyjazny dla użytkownika, dzięki czemu łatwiej jest odwrócić proste programy. Mimo to dziękuję – Kuzgun
Możesz użyć 'objdump' na Windows też poprzez MingW lub Cygwin. Są instalowane w pakiecie 'binutils'. – adam