1. man gibt irgendwas 6 Stelliges ein - z.B "123456" ohne zu bestätigen
2. Nun könnte man OllyDbg mittels F12 pausieren und sich den Stack anschauen - etwas weiter "unten" im Stackfenster sieht man die Aufruferadressen der "Inputfunktion"
Code:
0244728C |007200FE pc_down.007200FE
02447290 |0041E2B4 pc_down.0041E2B4
02447294 ]024472B4
02447298 |00408386 RETURN to pc_down.00408386 from <JMP.&user32.DialogBoxParamA>
ein "Follow in Disassembler" auf diese Zeile führt und zu diesem Codestück:
Code:
00408378 |. 6A 00 PUSH 0 ; /lParam = NULL
0040837A |. 8B5D 08 MOV EBX,[ARG.1] ; |
0040837D |. 53 PUSH EBX ; |DlgProc
0040837E |. 51 PUSH ECX ; |hOwner
0040837F |. 52 PUSH EDX ; |pTemplate
00408380 |. 50 PUSH EAX ; |hInst
00408381 |. E8 56FCFFFF CALL <JMP.&user32.DialogBoxParamA> ; \DialogBoxParamA
00408386 |. 5B POP EBX
nun könnte man auf das POP EBX einen Breakpoint setzen und anschließend das Programm laufen lassen und "OK" bestätigen".
Olly pausiert brav am gesetzten Breakpoint
00408386 |. 5B POP EBX
Nun kann man einfach mittels "Step over" aka F8 den Code durchgehen bis man im "Hauptaufrufercode" landet:
Code:
0048FF97 . 50 PUSH EAX ; /Arg2
0048FF98 . A1 F8E74900 MOV EAX,DWORD PTR DS:[49E7F8] ; |
0048FF9D . 50 PUSH EAX ; |Arg1 => 004A2978 ASCII "123456"
0048FF9E . B9 28014900 MOV ECX,pc_down.00490128 ; |ASCII "Input"
0048FFA3 . 8D95 F47FFFFF LEA EDX,DWORD PTR SS:[EBP+FFFF7FF4] ; |
0048FFA9 . A1 C8E34900 MOV EAX,DWORD PTR DS:[49E3C8] ; |
0048FFAE . 8B00 MOV EAX,DWORD PTR DS:[EAX] ; |
0048FFB0 . E8 0FE4F8FF CALL pc_down.0041E3C4 ; \pc_down.0041E3C4
0048FFB5 . 84C0 TEST AL,AL ; <------ man landet hier
man landet bei "TEST AL,AL" und sieht sehr schön den Aufrufer.
Einen Schritt weiter:
Code:
0048FFC3 . A1 F8E74900 MOV EAX,DWORD PTR DS:[49E7F8]
sieht man plötzlich, wie ein Pointer auf die Eingabe in EAX landet:
man klicke auf EAX, wähle "Follow in Dump" und erblicke:
Code:
004A2978 31 32 33 34 35 36 00 00 00 00 00 00 00 00 00 00 123456..........
nun überlegt man sich als fauler Mensch: "warum muss ich den ganzen Code verfolgen, wo doch die Eingabe sowieso zu irgendeiner Berechnung oder Vergleich herausgeholt wird?" - daher markiert man die 6 Bytes und wählt über Rechtsklick -> "Breakpoint" -> "Memory on access".
Ab nun lässt man Olly mittels F9 einfach freien lauf und wird nur dann "belästigt" wenn auf die Eingabe zugegriffen wird.
Das passiert beim ersten mal hier:
Code:
00405C4B > /3A0A CMP CL,BYTE PTR DS:[EDX]
00405C4D . |74 17 JE SHORT pc_down.00405C66
00405C4F . |3A4A 01 CMP CL,BYTE PTR DS:[EDX+1]
00405C52 . |74 11 JE SHORT pc_down.00405C65
wird aber nichts interessantes gemacht, wie man schnell durch eine kleine Codeverfolgung herausfindet.
Der zweite Zugriff hier:
Code:
00403058 > \8B08 MOV ECX,DWORD PTR DS:[EAX]
0040305A . 66:8B40 04 MOV AX,WORD PTR DS:[EAX+4]
0040305E . 890A MOV DWORD PTR DS:[EDX],ECX
00403060 . 66:8942 04 MOV WORD PTR DS:[EDX+4],AX
sieht viel viel interessanter aus, vor allem weil man gleich im "Registers" Fenster einige interessante Strings wie die Eingabe und "Key%" erblickt.
Ab hier lohnt es sich, den Code genauer zu verfolgen. Die Eingabe wird hier nach [EDX] Pointer umkopiert. Man wiederholt einfach die Schritte wie vorher: Rechtsklick auf EDX, "Follow in Dump" markieren des Speichersabschnitt mit der Eingabe und "Breakpoint -> Memory on access"
Wieder lässt man Olly laufen und dieser stoppt hier:
Code:
004096C5 |. 807C1F FF 20 |CMP BYTE PTR DS:[EDI+EBX-1],20
004096CA |.^ 76 F4 \JBE SHORT pc_down.004096C0
man wird aber enttäucht, da hier nicht so viel aufregendes passiert.
Der nächste "Speicherzugriff" ist hier:
Code:
00405B22 |. 66:C74402 FE >MOV WORD PTR DS:[EDX+EAX-2],0
00405B29 |. 83C0 08 ADD EAX,8
00405B2C |. 5A POP EDX
00405B2D |. 8950 FC MOV DWORD PTR DS:[EAX-4],EDX
00405B30 |. C740 F8 01000>MOV DWORD PTR DS:[EAX-8],1
man sieht noch in ESI einen "keya%" String. Bleibt man am Ball (also mittel F8 den Code weiterverfolten) kommt man nach ein paar Minuten hier raus:
Code:
00467EE9 > \A1 40E84900 MOV EAX,DWORD PTR DS:[49E840]
00467EEE . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00467EF0 . 8945 90 MOV DWORD PTR SS:[EBP-70],EAX
00467EF3 . 8B5D 90 MOV EBX,DWORD PTR SS:[EBP-70]
und hier entdeckt man ganz interessante Dinge - wie z.B dass dem "keya%" String plötzlich noch eine Zahl zugewiesen wurde - das ganze auch noch als String. Denn EAX zeigt auf
Code:
031BC408 6B 65 79 61 25 3D 37 xx 33 xx xx xx keya%=7x3xxx
(hier zu muss man nichts verfolgen oder abgleichen - der String wird automatisch von Olly geladen und gegenüber "EAX" angezeigt

Und damit hat man schonmal den Code.