14 avril 2004
Outils nécessaires
Le crack-me
Windasm (la v10 est sorti)-IDA pour trouver une routine ou un debuggeur
Première partie : le Password
on lance le crackme on clique sur l'onglet protection/Password
Un magnifique Popup arrive

On clicke sur Check
On voit apparaitre un magnifique Nop, try again...
La comme d'habitude on va prendre Windasm et regardez ceux qui a dans le programme
On clique sur les SDR et sur Nope,try again
:00401353 E8F4030000 Call 0040174C
:00401358 68B8334000 push 004033B8
* Possible StringData Ref from Data Obj ->"JD39-CK4-5QV345"
|
:0040135D 68A2304000 push 004030A2
* Reference To: KERNEL32.lstrcmpA, Ord:02D6h
|
:00401362 E851040000 Call 004017B8
:00401367 50 push eax
:00401368 6A00 push 00000000
:0040136A 83F040 xor eax, 00000040
:0040136D 6683E010 and ax, 0010
:00401371 C1E80D shr eax, 0D
:00401374 C1E003 shl eax, 03
:00401377 58 pop eax
:00401378 83F800 cmp eax, 00000000
:0040137B 7528 jne 004013A5
:0040137D 83F040 xor eax, 00000040
:00401380 C1E80D shr eax, 0D
:00401383 6683E010 and ax, 0010
:00401387 C1E003 shl eax, 03
:0040138A 58 pop eax
:0040138B 83F800 cmp eax, 00000000
:0040138E 7415 je 004013A5
:00401390 6A30 push 00000030
* Possible StringData Ref from Data Obj ->"Password Check"
|
:00401392 68B2304000 push 004030B2
* Possible StringData Ref from Data Obj ->"Nope, try again!"
|
:00401397 68E9304000 push 004030E9
:0040139C 6A00 push 00000000
* Reference To: USER32.MessageBoxA, Ord:01BBh
|
:0040139E E8C7030000 Call 0040176A
:004013A3 EB15 jmp 004013BA
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040137B(C), :0040138E(C)
|
:004013A5 6A40 push 00000040
* Possible StringData Ref from Data Obj ->"Password Check"
|
:004013A7 68B2304000 push 004030B2
* Possible StringData Ref from Data Obj ->"Good job, you got the correct
"
->"password!"
|
:004013AC 68C1304000 push 004030C1
:004013B1 6A00 push 00000000
* Reference To: USER32.MessageBoxA, Ord:01BBh
|
:004013B3 E8B2030000 Call 0040176A
:004013B8 EB00 jmp 004013BA
On voit donc ce code avec plusieurs sauts en 0040137B et 0040138E à forcer pour qu'il aille toujours vers le bon message
Mais le plus amusant c'est la SDR en 0040135D : JD39-CK4-5QV345 qui n'est rien d'autre que le Password recherché
Deuxième partie : les Nags Par Dark_Skull
okay bienvenue dans la section NAG
Pour commencer vous avez besoin de windasm9.3 patcher ou
windasm et un hediteur hexadecimal
un cerveau non réveiller
et... une grosse biere si il est 6:00am si non 3 bierres ;)
on commence
on ouvre le crackme
avec windasm on va dans les string data ref
et on voie "nag nag nag ||remove this message" on double click
dessus
on arrive 0040142b
6855314000 push 00403155
on monte un peu et on va a la referance du call on arrive sur un call bien
entendu hihihi
on va a l'adresse de la ref 00401167 (c) WOW on tombe sur
00401163 663d439c
cmp ax, 9c43 <--- cela veut dire quil
teste si c loption du nag qui a ete enclancher
00401167 745f
je 004011c8
<--- si oui saute a cette address
mais nous on veut pas quil saute car sinon il annonce les nags alors on
remplace le 745F par 9090
on essaie et ca marche OUIIiii
by Dark_Skull
Troisième partie : le cd-check
On clique sur Cd-check et il nous dit

Donc on regarde dans Windasm CDROM not Found
La on voit qu'il fait appel a l'api GetDriveType qui est un grand classique
* Reference To: KERNEL32.GetDriveTypeA, Ord:00F0h
|
:0040143C E86B030000 Call 004017AC
:00401441 33DB xor ebx, ebx
:00401443 43 inc ebx
:00401444 43 inc ebx
:00401445 F6F3 div bl
:00401447 3C02 cmp al, 02
:00401449 751C jne 00401467
:0040144B 80FC01 cmp ah, 01
:0040144E 7402 je 00401452
:00401450 EB15 jmp 00401467
Donc on va essayez de la joué fin, en regardant dans les registres on s'apercoit
que le Xor,ebx,ebx est inutiles puisque le registre est déja a zéro
et sachant que le controle d'un CD-ROM positifs c'est de mettre EAX a 5 on va
remplacer le XOR par un mov al,5
al étant la une sous-partie de EAX et un mov al,5 équivaut dans notre cas à
la mêm chose qu'un mov EAX,5 à la différence près que le premier prend moins
de place, environ 5 octets de différence
soit remplacer 33DB par B005(pour
trouver les bons opcodes vous pouvez lire mes autres tuts)
Quatrième partie : le Name/Serial
On clique sur le Name/Serial et on met comme nom SOM'R et comme serial 123456

on clique sur check et il nous que le serial est mauvais :-(

Donc on prend Windasm et on va regarder ça de plus prêt
On clique sur Wrong Serial! dans les SDR et en descandant un peu on voit ça
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004015BC(C), :004015CF(C), :00401623(C)
|
:004015E8 6A40 push 00000040
* Possible StringData Ref from Data Obj ->"Check Serial"
|
:004015EA 68FA304000 push 004030FA
* Possible StringData Ref from Data Obj ->"You got it! Congrats! :)"
|
:004015EF 6831314000 push 00403131
En tracant un peu dans le code et en allant au deux premiers sauts on voit que les conditions sont contracdictoires
Et que l'on arrive obligatoirement au troisième saut qu'il suffit juste de forcer
:00401607 E839000000 call 00401645<= Call d'analyse du serial
:0040160C 83F040 xor eax, 00000040
:0040160F 6683E010 and ax, 0010
:00401613 C1E80D shr eax, 0D
:00401616 C1E003 shl eax, 03
:00401619 6A00 push 00000000
:0040161B E87C000000 call 0040169C<= Call d'analyse du name et compare a la fin si le serial modulé est égal au Name modulé
:00401620 83F800 cmp eax, 00000000<= Si Serial mouliné égal Name
mouliné alors EAX=00000000 sinon EAX=FFFFFFFF
:00401623 74C3 je 004015E8<= Saut à forcer
:00401625 EBAC jmp 004015D3
Donc on remplace en A23 74C3 par EBC3
Le problèmes ce que l'on a toujours la protection concernant la taille du Serial et du Name
On pourrait aussi s'amuser pour transformer ces sauts pour qu'il aille directement
vers le bon MSG soit transformer :00401580 0F8EA1000000 jle 00401627
jle 00401627 en jle 004015E8 et celui d'en dessous aussi
Donc le patch serait en 980 de passer de 0F8EA1000000 à 7E6690909090 et en 993 de 0F8E8E000000 à 7E5390909090
Voila le log est complétement cracké si vous êtes gentil et si je trouve le temps je vous montrerais comment coder un keygen pour ce crackme
Log cracké
Par SOM'R
Email : som.r@caramail.com
Apocalypse's Angel Team