Ollydbg ASM verstehen

  • Es geht um folgendes ich möchte ein wenig Reverse Engineering lernen, nur leider ist es schwer den richtig ansatz zu finden und somit ist es schwer zu verstehen was genau Ollydbg macht. Gut einige leichte sachen(JMP, NOP etc.) sind mir klar und paar befehle weiß ich wofür sie sind, jedoch bringt mir das nicht das verständniss was ich haben möchte.


    Als beispiel nehme ich den MultiClient im RSRO Client, ich will die Mac-Adresse generieren damit ich kein C10 error. Aus dem Hawk Loader weiß ich das hier der Rote Calll zur funktion mit der Mac Generate Adresse führt. Hoffe dongdong ist nicht sauer.


    Code
    1. 004C9DE5 E8 769BFEFF CALL sro_clie.004B3960
    2. 004C9DEA 6A 06 PUSH 6
    3. 004C9DEC 8D4424 48 LEA EAX,DWORD PTR SS:[ESP+48]
    4. 004C9DF0 50 PUSH EAX
    5. 004C9DF1 8BCF MOV ECX,EDI
    6. [color=#ff0000]004C9DF3 E8 689BFEFF CALL sro_clie.004B3960[/color]
    7. 004C9DF8 A1 50431201 MOV EAX,DWORD PTR DS:[1124350]
    8. 004C9DFD 8B9B 60100000 MOV EBX,DWORD PTR DS:[EBX+1060]
    9. 004C9E03 8B08 MOV ECX,DWORD PTR DS:[EAX]
    10. 004C9E05 8B51 50 MOV EDX,DWORD PTR DS:[ECX+50]



    Nun weiß ich das in der dll über Gettickcount die Mac-Adresse generiert wird und die an diese Adresse wieder gecallt wird:




    Welche übrigens sofort vom client gecallt wird, falls keine Multiclient funktion vorliegt.


    Nun das ist ein wenig kompliziert. Ich will hier nicht die lösung oder einen ansatz darauf wissen. Ich will wissen was hier gemacht wird, also im ASM Code bzw in Ollydbg.


    Denn im ernst ich finde keine Tutorials mit dem richtigen ansatz die mir dieses wissen vermitteln.

  • Hi,


    Ich hab gerade zu wenig Zeit was zu erklären aber:
    Wenn du Reversen lernen willst, kann ich dir nur Lena's Tutorial-Serie ans Herz legen. Da lernst du Schritt für Schritt mit OllyDbg umzugehen, Assembler zu analysieren und zu verstehen.


    Lenas Reversing for Newbies


    Gruß
    florian0

  • Dein roter Call hat eine ThisCall-Calling-Convention. Das heißt, dass je nach Compiler entweder der This-Pointer in das ECX Register geschoben wird (MSVC), oder als erster Parameter auf dem Stack erscheint (GCC).
    Desweiteren hat die Methode keinen Rückgabewert (also void), weil EAX direkt nach dem Call überschrieben wird.
    Die Methode hat 2 Argumente. Das zweite ist ein konstanter int (6) und das erste eine Struktur/Datenpointer und wurde lokal erstellt.
    Woran man den integer erkennt, ist wohl klar. Dass es sich um eine Struktur/Datenpointer handelt kann man ganz einfach an der LEA Instruction sehen und dem sofort danach folgenden PUSH von EAX. Das ESP+0x48 sagt dir dann, dass es sich um eine lokale variable handelt.


    Was du dann mit GetTickCount sagst verstehe ich nicht. Meinst du vielleicht GetAdapterInfo?


    MfG