Key berechnen?

Ich bastel gerade an folgendem Crackme.
Code:
MOV ECX,DWORD PTR SS:[EBP-4]                        ;  passwort[10d] * 2^24 ===> ECX
OR ECX,DWORD PTR SS:[EBP-C]                         ;  OR ECX, passwort[13d] * 2^16
OR ECX,DWORD PTR SS:[EBP-8]                         ;  OR ECX, passwort[15d] * 2^8
OR ECX,DWORD PTR SS:[EBP-10]                        ;  OR ECX, passwort[18d]
Das Ergebnis (was in ECX steht) muss 0x53484954 sein. Gelöst habe ich dieses Problem, indem ich ein Brute-Force-Programm geschrieben habe.
Allerdings würde es mich interessieren, ob man das auch "auf einem Blatt Papier" berechnen kann (es gibt übrigens nur eine Lösung in einem Zahlenbereich zwischen '0' und 'z').
Das Array 'passwort' (in den Kommentaren) ist ein ganz normales C-Array, indem die Buchstaben des Keys abgespeichert sind.
Berechnet werden muss passwort[10], passwort[13], passwort[15] und passwort[18] (alles dezimal).
 
Ich habe es jetzt selbst geschafft. Ging sogar ziemlich schnell, wenn man davon absieht, dass mir an dem Tag absolut nichts eingefallen ist xD

Lösung:
Die Zahl 0x53484954 sieht binär so aus:
Code:
1010011010010000100100101010100
Jetzt guckt man sich erst mal die 2er-Potenzen an:
passwort[10] ==> 24
passwort[13] ==> 16
passwort[15] ===> 8
passwort[18] ===> 0

Jetzt erkennt man, dass es sich um Bitshifts handelt (wenn man nicht gerade so schlau wie ich ist und es nicht gleich im Debugger abliest).
Ausserdem ergeben 4 byte (4 character) auch einen Integer. Da liegt die Vermutung natürlich recht nahe, dass man die binäre Zahl einfach bei 0,8,16 und 24 aufteilt.
Code:
01010011|01001000|01001001|01010100
Auf diese Weise kann man die Werte von jedem Byte ablesen und den dazugehörigen Buchstaben in der ASCII-Tabelle suchen.
Danach ergibt sich für: passwort[10] = S, passwort[13] = H, passwort[15] = I, passwort[18] = T

mfg @night@
 
Zurück
Oben