___           ___           ___           ___           ___           ___     
     /\  \         /\__\         /\  \         /\__\         /\  \         /\  \    
     \:\  \       /:/  /        /::\  \       /::|  |       /::\  \       /::\  \   
      \:\  \     /:/__/        /:/\:\  \     /:|:|  |      /:/\:\  \     /:/\ \  \  
      /::\  \   /::\  \ ___   /:/  \:\  \   /:/|:|__|__   /::\~\:\  \   _\:\~\ \  \ 
     /:/\:\__\ /:/\:\  /\__\ /:/__/ \:\__\ /:/ |::::\__\ /:/\:\ \:\__\ /\ \:\ \ \__\
    /:/  \/__/ \/__\:\/:/  / \:\  \ /:/  / \/__/~~/:/  / \/__\:\/:/  / \:\ \:\ \/__/
   /:/  /           \::/  /   \:\  /:/  /        /:/  /       \::/  /   \:\ \:\__\  
   \/__/            /:/  /     \:\/:/  /        /:/  /        /:/  /     \:\/:/  /  
                   /:/  /       \::/  /        /:/  /        /:/  /       \::/  /   
                   \/__/         \/__/         \/__/         \/__/         \/__/    
				   .openmod.org


ArturDent CRACKME2 - Serial/Name



-|- A. Introduction


Au programme du jour le 2eme crackme de Mr ArthurdENTs, but du jeu,  trouver le serial 
comparé a notre nom, puis keygen si motivé.

comme d'habitude on lance PEiD histoire de verifier si le crackme est packé ou crypté, 
ce qui ne semble pas etre le cas, PEiD nous indique : TASM/MASM



-|- B. ArturDent CRACKME2


----------------------------------------------------------------------------------------

Level: 1
crackme author : ArturDent
type : Serial/Name

----------------------------------------------------------------------------------------



on degaine note ollydebug preferé et op click droit search for all referenced text string.



on note d'emblé : 

Text strings referenced in AD_CM#2:.text, item 4
 Address=00401123
 Disassembly=PUSH 00403044
 Text string=ASCII "Your name must be at least five characters long!"


interessantàa savoir,  puis : 

Text strings referenced in AD_CM#2:.text, item 6
 Address=00401167
 Disassembly=PUSH 00403027
 Text string=ASCII "Yeah, you did it!"

On double clique sur cette ligne, et olly nous emmene en 00401167 :


00401160  |.  6A 40         PUSH 40                           ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401162  |.  68 12304000   PUSH 00403012                     ; |Title = "ArturDents CrackMe#2"
00401167  |.  68 27304000   PUSH 00403027                     ; |Text = "Yeah, you did it!"
0040116C  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]         ; |hOwner
0040116F  |.  E8 1C000000   CALL     ; \MessageBoxA



on remonte un poil afin de regarder de plus pret la routine generant le serial


0040111A  |. /7D 18         JGE SHORT 00401134
0040111C  |. |6A 40         PUSH 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0040111E  |. |68 12304000   PUSH 00403012                            ; |Title = "ArturDents CrackMe#2"
00401123  |. |68 44304000   PUSH 00403044                            ; |Text = "Your name must be at least five characters long!"
00401128  |. |FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hOwner
0040112B  |. |E8 60000000   CALL            ; \MessageBoxA
00401130  |. |33C0          XOR EAX,EAX
00401132  |. |EB 40         JMP SHORT 00401174
00401134  |> \6A 14         PUSH 14                                  ; /Count = 14 (20.)
00401136  |.  68 80324000   PUSH 00403280                            ; |Buffer = AD_CM#2.00403280
0040113B  |.  68 B90B0000   PUSH 0BB9                                ; |ControlID = BB9 (3001.)
00401140  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
00401143  |.  E8 42000000   CALL        ; \GetDlgItemTextA
00401148  |.  B8 80304000   MOV EAX,00403080
0040114D  |.  BB 80324000   MOV EBX,00403280
00401152  |.  8BCE          MOV ECX,ESI
00401154  |>  8A10          /MOV DL,BYTE PTR DS:[EAX]
00401156  |.  2AD1          |SUB DL,CL
00401158  |.  3813          |CMP BYTE PTR DS:[EBX],DL
0040115A  |.  75 18         |JNZ SHORT 00401174
0040115C  |.  40            |INC EAX
0040115D  |.  43            |INC EBX
0040115E  |.^ E2 F4         \LOOPD SHORT 00401154
00401160  |.  6A 40         PUSH 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401162  |.  68 12304000   PUSH 00403012                            ; |Title = "ArturDents CrackMe#2"
00401167  |.  68 27304000   PUSH 00403027                            ; |Text = "Yeah, you did it!"
0040116C  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hOwner
0040116F  |.  E8 1C000000   CALL            ; \MessageBoxA
00401174  |>  C9            LEAVE
00401175  \.  C2 0400       RET 4




vous l'aurez remarqué, elle debute en 00401154, regardons là de plus pret :


00401154  |>  8A10          /MOV DL,BYTE PTR DS:[EAX] 
00401156  |.  2AD1          |SUB DL,CL
00401158  |.  3813          |CMP BYTE PTR DS:[EBX],DL
0040115A  |.  75 18         |JNZ SHORT 00401174
0040115C  |.  40            |INC EAX
0040115D  |.  43            |INC EBX
0040115E  |.^ E2 F4         \LOOPD SHORT 00401154

il prend donc la premiere lettre du nom en hexa
soustrait cette valeur au nombre de caractere composant le nom
compare ce resultat avec le premier caracere de votre serial..

JUMP si c'est mauvais
et fait LOOP si c bon jusque la lettre suivante en prenant soin a chaque fois de soustraire uniquement le
nombre de caractere qu'il reste a verifier.

on sort la table ASCII et on regarde ce que ça donne pour moi :

t=74-6=6E=n
h=68-5=63=c
o=6F-4=6B=k
m=6D-3=6A=j
a=61-2=5F=_
s=73-1=72=r

je rentre donc le serial : "nckj_r" et bingo. You did it !


-|- C. Keygen


euh. plus tard, là j'ai faim.