Lange nicht mehr ins Forum geguckt
Dann wollen wir mal.
1. Unsere eingegebene Serial wird verändert
2. Die veränderte serial wird mit einem festen Wert verglichen.
Der Vergleich findet in diesem Call statt
00453887 E8 CC09FBFF CALL 00404258
Der feste Wert ist: U|_rBor~vn
Uns interresiert aber nicht der Vergleich, da wir das richtige Ergebnis ja schon kennen. Uns interessiert vielmehr die Umwandlung unserer Serial
0045386D MOV EDX,DWORD PTR SS:[EBP-4] Serial nach EDX
00453870 MOV DL,BYTE PTR DS:[EDX+EBX-1] 1. Zeichen der serial nach dl
00453874 XOR DL,1D xor das Zeichen mit 1D
00453877 MOV BYTE PTR DS:[EAX+EBX-1],DL Ergebnis in den Speicher
0045387B INC EBX ein zeichen weiter
0045387C DEC ESI eingegebene zeichen-1
Das ganze wird dann für alle Zeichen durchlaufen.
Also wir unsere gesamte Serial mit 1Dh gexort.
Einer xor Operation kann man u.a. wieder rückgänging machen indem man wieder xort.
12 xor 29 ist 17
17 xor 29 ist 12
Das heißt also wir geben den festen Wert U|_rBor~vn und das Programm rechnet für uns selber die lösung aus:
SUID:root serial xor 1D ist U|_rBor~vn
U|_rBor~vn xor 1D ist SUID:root serial
wir geben also den Wert ein U|_rBor~vn
setzen ein BP mit f2 auf
00453877 885418 FF MOV BYTE PTR DS:[EAX+EBX-1],DL
und dann geht es los.
wenn er breakt rechter MAuscklick-> Follow in dump memory adress
Das ist das Febster links unten
löschen den bp wieder mit f2. lassen weiterlaufen mit f9 un sehne dann im Dump
[ASCII] die Lösung. MAnchmal muss man auf das Dump Fenster nopchmal klicken um die Werte zu aktualisieren
HaBo_rocks
Schöne Idee SUID:root. Für den Anfang wirklich klasse. Gratulation
Gruß