Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.

Frage zu JE SHORT EasyCrac.0040113D

Diskussion: Frage zu JE SHORT EasyCrac.0040113D im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige hi, schaut euch mal folgenden code aus einem crackme an Code: 00401124 |. 50 PUSH EAX 00401125 |. E8 ...

Antwort
Alt 02.08.10, 20:15   #1 (permalink)
 
Registriert seit: 01.08.10
nurmalso Leistung: Facit NTK
Likes: 0
Standard Frage zu JE SHORT EasyCrac.0040113D

Anzeige

hi, schaut euch mal folgenden code aus einem crackme an

Code:
00401124   |.  50                PUSH EAX
00401125   |.  E8 D6FEFFFF       CALL EasyCrac.00401000  //serial wird geprüft
0040112A   |.  85C0              TEST EAX,EAX
0040112C   |.  59                POP ECX
0040112D   |.  59                POP ECX
0040112E   |.  56                PUSH ESI
0040112F   |.  74 0C             JE SHORT EasyCrac.0040113D   //<------????
00401131   |.  68 38234000       PUSH EasyCrac.00402338                           ;  ASCII "RIGHT"
00401136   |.  68 2C234000       PUSH EasyCrac.0040232C                           ;  ASCII "You got it!"
0040113B   |.^ EB DA             JMP SHORT EasyCrac.00401117
0040113D   |>  A1 B4234000       MOV EAX,DWORD PTR DS:[4023B4]                    ; |
00401142   |.  68 24234000       PUSH EasyCrac.00402324                           ; |Title = "WRONG"
00401147   |.  6A 0B             PUSH 0B                                          ; |
00401149   |.  59                POP ECX                                          ; |
ich koennte jetzt einfach den JE SHORT EasyCrac.0040113D aushebeln, aber das möchte ich nicht.

meine frage ist, was wird da verglichen bei JE SHORT EasyCrac.0040113D
also wann springt er?
ESI ist in beiden fällen 0x00. also egal ob serial richtig/flasch ist
wenn ich eax manuell auf 0 oder 1 setze springt er auch immer.
wenn die serial oben in
Code:
00401125   |.  E8 D6FEFFFF       CALL EasyCrac.00401000
richtig ist, führt er den jump nicht aus.
aber wie prüft er das?

Geändert von nurmalso (02.08.10 um 20:20 Uhr)
nurmalso ist offline   Mit Zitat antworten
Alt 02.08.10, 21:08   #2 (permalink)
 
Registriert seit: 12.06.08
Keci Leistung: Addierstift
Likes: 0
Standard

Ich glaube, dass das Tutorial - von lena151 - dir bei der Frage sehr hilfreich sein wird.

In Tutorial #12 wird es gut erklärt

Downloadlink: http://tuts4you.com/request.php?133
Keci ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 02.08.10, 22:45   #3 (permalink)
Themenstarter
 
Registriert seit: 01.08.10
nurmalso Leistung: Facit NTK
Likes: 0
Standard

danke dir, aber es gab keine anderen referenzen zu dem befehl.

bin mal essen gegangen und hab nen bissl "offline" überlegt.
JE überprüft ob das Zero flag gesetzt ist, also muesste das z flag in der call funktion gesetzt werden.
es werden also keine serials miteinander verglichen, sondern nur ob die eingebene serial durch fest definierte mathematische funktionen 0 oder !=0 ergibt.

nochmal an den pc gesetzt und es kontrolliert, es ist in der tat so, dass in dem call aufruf das zero flag auf 1 bzw 0 gesetzt in abhängigkeit von der gültigkeit der serial.
war nen bissl tricky weil ein überlauf produziert wird, aber naja, bin noch anfänger
problem gelößt.



Geändert von nurmalso (02.08.10 um 23:02 Uhr)
nurmalso ist offline   Mit Zitat antworten
Alt 02.08.10, 22:59   #4 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

http://www.informatik.htw-dresden.de...assembler.html
(Abschnitt "bedingte Sprünge" - da sind auch die Flagzustände mit aufgelistet)
Nun setzen aber nicht alle Operationen diese Flags - d.h zwischen
solcher "Prüfungsoperation" und dem Sprung können ruhig diese eingeschoben
werden

PS: nicht der Callaufruf, sondern TEST EAX,EAX ist hier entscheidend.
Denn dieses setzt oder löscht das ZF.
TEST EAX,EAX ist fast das gleiche
wie AND EAX,EAX (nur wird dabei der Inhalt des Registers nicht verändert).
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 02.08.10, 23:18   #5 (permalink)
Themenstarter
 
Registriert seit: 01.08.10
nurmalso Leistung: Facit NTK
Likes: 0
Standard

in dem call wird das zflag schon "richtig" gesetzt (man koennte TEST EAX,EAX deshalb auch weglassen finde ich),

weis nicht ob das flag durch irgentwelche interrups geändert werden kann, da ja TEST EAX,EAX direkt nach dem call ist. aber schaden kann es nicht.

Geändert von nurmalso (02.08.10 um 23:34 Uhr)
nurmalso ist offline   Mit Zitat antworten
Alt 02.08.10, 23:35   #6 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
wieso ist TEST EAX,EAX das wichtige?
Weil TEST EAX,EAX die Flags trotzdem setzt - abhängig vom Inhalt
EAX kann gerne den Wert 0 oder 01 haben. Das heißt aber noch lange nicht, dass ZF automatisch auch gesetzt ist . Z.B weil die Rückgabe EAX==0 oder EAX==1 am Ende der Funktion durch MOV EAX,0 / MOV EAX,1 oder MOV EAX, Variable
zustande gekommen ist. Dann ist EAX auch 0/1/was auch immer, die Flags werden dabei aber nicht verändert. Und natürlich können zwischen dem "nullsetzen" des Wertes irgendwo in der geCALLten Funktion und dem eigentlichen JE noch andere Operationen kommen - z.B am Ende der aufgerufenen Funktion:
Code:
MOV EAX, 0 (== hierbei wird ZF NICHT gesetzt)
ADD ESP, 20 (Stackbereinigung, hierbei wird ZF gelöscht, weil das Ergebniss dieser Operation ungleich 0 war).
RET
Um Missverständnisse zu vermeiden: Flags werden nur nach bestimmten Operationen in Abhängigkeit vom Registerinhalt gesetzt.

Edit:
jep, hier kann es sein, dass es überflüssig ist - nur kann der Compiler dies nicht immer erkennen.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » Frage zu JE SHORT EasyCrac.0040113D
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61