2010-09-03 18 views
6

Mam exe, które otworzyłem z Dissemblerem PE Explorer. Teraz widzę kod asm, który wygląda tak:Jak przekonwertować ASM na kod czytelny?

push ebx 
    push esi 
    mov ebx,eax 
    mov eax,[ebx+38h] 
    push eax 
    mov eax,[ebx+3Ch] 
    push eax 
    mov ecx,edx 
    mov eax,ebx 
    mov edx,[ebx+30h] 
    mov esi,[eax] 
    call [esi+7Ch] 
    or byte ptr [ebx+00000088h],02h 
    pop esi 
    pop ebx 
    retn 

Nie mam pojęcia, co to oznacza. Czy istnieje sposób, aby przekonwertować to teraz do odczytu kodu (C, C++, C# lub VB.NET)?

Informacje dodatkowe: Powodem, dla którego tego potrzebuję jest to, że muszę wywołać powyższą funkcję z mojej aplikacji Windows. Teraz ta funkcja znajduje się w exe strony trzeciej - nie ma dla niego API ani kodu źródłowego. Każda pomoc lub porada jest doceniana.

Odpowiedz

0

To, czego chcesz, nazywa się "dekompilacją".

To nie jest łatwe do rozwiązania, a często nie jest możliwe. Możesz spróbować jako Google jako początek.

+0

Przeczytałem następujący artykuł na temat cp: http://www.codeproject.com/KB/cpp/funccaller.aspx - Czy mogę zastosować te same metody? – vikasde

+0

Tak właśnie robią dekompresory (między innymi). Z pewnością możesz to zrobić, ale nie jest to zadanie 5 minut. – BarsMonster

+0

ok. Próbowałem zrobić to w sposób opisany w artykule, ale nie mogłem znaleźć żadnych funkcji, które miałyby dla mnie sens. – vikasde

0

Można go dekompilować do C lub jakimś innym językiem za pomocą wskaźników, ale nadal będzie w większości nieczytelny.

1

Jeśli uda się to uchwycić, IDA Pro + Hex-Rays może dokonać dekompilacji tego kodu do postaci częściowo czytelnej.

+1

Hej, tylko 2000 EUR wszystko razem;) ... Byłem klientem IDA Pro od lat, ale jako osoba indywidualna wciąż nie mogłem sobie wyobrazić, aby jeszcze więcej korzystało z wtyczki. – 0xC0000022L

2

Musisz wiedzieć, jakie argumenty są używane. W tym przypadku wygląda na to, że argumenty są przekazywane do tej procedury w rejestrach eax & . Kiedy już wiesz, co oznaczają te wartości, możesz prawdopodobnie dowiedzieć się, w jaki sposób jest używana ta procedura i ponownie ją zakodować w dowolnym języku, którego używasz.

0

Na pierwszy rzut oka jest to obiektowy kod; pobiera (przynajmniej) obiekt jako argument, wywołuje metodę tego obiektu, który przyjmuje jako argumenty trzy atrybuty obiektu, a następnie ustawia bit (flagę) w innym atrybucie tego samego obiektu na jeden.

IDA Pro prawdopodobnie będzie w stanie zidentyfikować prototyp funkcji i ma dostępną bezpłatną wersję, która ma wszystkie potrzebne funkcje: http://www.hex-rays.com/idapro/idadownfreeware.htm. Będzie to jednak tylko dać wyobrażenie o prototypie funkcji, a nie jej zachowaniu (chyba że można "odczytać" montaż x86). Przywrócenie go do zwykłego C/C++ wymaga wtyczki HexRays, która jest dość droga i nie zawsze działa (dekompilacja do języka wysokiego poziomu jest dość skomplikowana).

0

Jestem trochę spóźniony, aby odpowiedzieć na to stanowisko, ale widząc, że zaakceptowana odpowiedź jest błędna, nadal będę podawać 0.2 w przypadku, gdy inni ludzie szukają tego samego.

To, czego szukasz, nie jest "dekompilacją", ponieważ już je zdekompilowałeś do kodu asm. To, czego oczekujesz, jest rodzajem kompilacji zdemontowanego kodu do czegoś, co możesz przeczytać (np. C)

Ta dziedzina inżynierii wstecznej wciąż nie jest dobrze rozwinięta. Niektórzy wspomnieli o IDA z drogimi wtyczkami, ale nic ci to nie pomoże ... Wspomnę o jedynym programie, który może ci pomóc: REC

Dane wyjściowe mogą nie być dokładne lub może nie być możliwe uzyskanie C w ogóle w zależności od programu, który chcesz debugować. Ale to najlepsza opcja, jeśli nie znasz zespołu.

Jeśli chodzi o to, co próbujesz zrobić, funkcja, którą wysłałeś, nic nie robi. Wywołuje inną funkcję z parametrami i otrzymuje wartość zwracaną. To, czym jesteś zainteresowany, to call [esi + 7Ch]. Potrzebujesz debuggera i wejdź do tego połączenia.

Haczyk tej funkcji w programie to inna historia ... Lepiej sam to napiszesz.

Powiązane problemy