2010-09-03 8 views
6

Ich habe eine exe, die ich mit PE Explorer Disassembler geöffnet habe. Jetzt kann ich den Asm-Code sehen, der so aussieht:Wie ASM in lesbaren Code konvertieren?

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 

Ich habe keine Ahnung, was das bedeutet. Gibt es eine Möglichkeit, dies jetzt in lesbaren Code umzuwandeln (C, C++, C# oder VB.NET)?

Hintergrundinfo: Der Grund, warum ich das brauche, ist, weil ich die obige Funktion von meiner Windows App aufrufen muss. Jetzt befindet sich diese Funktion in der Drittanbieter-Exe - es gibt keine API oder Quellcode dafür. Jede Hilfe oder Beratung wird geschätzt.

Antwort

0

Was Sie wollen, heißt "Dekompilierung".

Das ist nicht einfach zu lösen Aufgabe, und oft überhaupt nicht möglich. Sie könnten Google als Start versuchen.

+0

Ich lese den folgenden Artikel auf cp: http://www.codeproject.com/KB/cpp/funccaller.aspx - Kann ich die gleichen Methoden anwenden? – vikasde

+0

Das ist, was decompillers tun (neben vielen anderen Dingen). Sicher kannst du das, aber das ist keine 5 Minuten Aufgabe. – BarsMonster

+0

ok. Ich habe versucht, es so zu machen, wie es in dem Artikel beschrieben wurde, konnte aber überhaupt keine Funktionen finden, die für mich einen Sinn ergeben würden. – vikasde

0

Sie können es in C oder eine andere Sprache mit Zeigern dekompilieren, aber es wird immer noch größtenteils nicht lesbar sein.

1

Wenn Sie es erreichen können, könnte IDA Pro + Hex-Rays das in semi-lesbaren Code dekompilieren.

+1

Hey, nur 2000 EUR alles zusammen;) ... Ich bin seit Jahren ein Kunde von IDA Pro, aber als Einzelperson konnte ich immer noch nicht die Mühe machen, noch mehr für das Plugin auszugeben. – 0xC0000022L

2

Sie müssten wissen, welche Argumente verwendet werden. In diesem Fall sieht es so aus, als ob die Argumente an diese Routine in den Registern übergeben werden. Sobald Sie wissen, was diese Werte bedeuten, können Sie wahrscheinlich herausfinden, wie diese Routine verwendet wird, und sie in der von Ihnen verwendeten Sprache neu codieren.

0

Auf den ersten Blick ist es objektiver Code; es ruft (mindestens) ein Objekt als Argument ab, ruft eine Methode dieses Objekts auf, die als Argumente drei der Attribute des Objekts annimmt und dann ein Bit (Flag?) in einem anderen Attribut des gleichen Objekts auf eins setzt.

IDA Pro würde wahrscheinlich in der Lage sein, den Funktionsprototyp zu identifizieren, und es hat eine freie Version verfügbar, die alle Funktionen hat, die Sie benötigen: http://www.hex-rays.com/idapro/idadownfreeware.htm. Es gibt Ihnen jedoch nur eine Vorstellung vom Prototyp der Funktion, nicht von ihrem Verhalten (es sei denn, Sie können die x86-Baugruppe "lesen"). Um es in reines C/C++ umzuwandeln, benötigt man das HexRays-Plugin, das ziemlich teuer ist und nicht immer funktioniert (die Dekompilierung in eine Hochsprache ist ziemlich kompliziert).

0

Ich bin ein bisschen spät, um diesen Beitrag zu beantworten, aber sehen, dass die angenommene Antwort falsch ist, gebe ich immer noch meine 0,2, falls andere Leute nach der gleichen Sache suchen.

Was Sie suchen, ist nicht "Dekompilierung", da Sie es bereits zu Asm-Code dekompiliert haben. Was Sie wollen, ist eine Art der Kompilierung des disassemblierten Code in etwas, was Sie lesen können (wie C)

Dieses Feld des Reverse Engineering ist immer noch nicht gut entwickelt. Einige erwähnten IDA mit einigen teueren Plugins aber es wird Sie nicht gut tun ... Ich werde das einzig Programm erwähnen, die Ihnen helfen: REC

Der Ausgang nicht genau sein könnte oder Sie vielleicht nicht in der Lage sein, jede C zu erhalten Code überhaupt abhängig von dem Programm, das Sie debuggen möchten. Aber das ist die beste Option, wenn Sie Assembly nicht kennen.

Was Sie versuchen zu tun, die Funktion, die Sie gebucht haben, tut nichts. Es ruft eine andere Funktion mit Parametern auf und erhält einen Rückgabewert. Was Sie interessiert, ist Call [esi + 7Ch]. Sie benötigen einen Debugger und treten in diesen Aufruf ein.

Um diese Funktion in Ihrem Programm zu haken, ist eine andere Geschichte ... Sie sollten es besser selbst schreiben.