Muad'dib Keygen Crackme #1
- Afficher le bon serial a la place du msg d'erreur
- re ecrire une routine de controle du serial (oui , je me fais chier)
Tutorial by ACiD BuRN [Immortal Descendants]
· · - -- A C i D B U R N - P R O D U C T i O N S -- - ▄ · ·
░ ▄ ░ ▄ ▄ ▄ ░ ▄░ ░ ▄ ▄ ▐█▄ ▄ ░
▄██▓▀▀███▌▄▓█▀▀▀███▌▐█▌▐███▀▀▀█▓▄▐▓██▀▀███▄░▄▓█▌ ▀▄ ▐███▀▀███▄░▓██▄ ▐█▓▄
███▌ ░▓██▌███ ░▀▀▀▀ ▀▀▀ ███ ░ ███▌███ ▐██▓░▓██ ░ ██▌▐███▌ ▐██▓ ███▀█▄███▌
▓██▀▀▀███▌███▌░ ░▓█▌███▌███ ░ ███▌███▀▀▀██▄▐███ ░ ███▐███▀▀▓██▄ ███▌ ▀███▌
░▓██▌░ ███ ▓██▌░ ███▌███░▓██ ░▐███▌███▌ ▄███▐███▌░░▓██░▓██▌ ▐███▌███▌░ ███▄
▐███▌░ ███▐███▌░ ███▐██▓▐███ ░▐███░▓██▌░▐███▐███▌ ▐███▌███▌░ ███▌███▌░ ██▓▀▄
▐███▌░ ███▐███▌░ ███▐██▓▐███ ░▐███▐███ ░▐███▐███▌ ▐███▌███▌░░▓██ ▓██▌░ ██▌
▐██▓ ░▐██▓▀▒██▄▄▄███▒██▓▐███▄▄██▒▀▓███▄▄████▀████▄▓███▀▓█▒▄ ▐█▀ ░▓███ ▐█▀
▀ ▀░ ▀ ▀ ▀ ▀ ▀ ▀ ░ ▀ ▀ ▀
· · - -- A C i D B U R N - P R O D U C T i O N S -- - · ·
SRT - CRO
Introduction:
Pour commencer , je fais rarement des cours en francais , on va changer ca :)
Je pense bientot ecrire un cour sur le dernier armadillo en Francais bien sur :P
et je vais bientot convertir tout mes tuts !!! donc voila ppur les cours en francais
finis de mails pour ca ok ?? :PP
Parlons de ce crackme , il faut faire un keygen , les keygens ca commence a me gonfler, on
va pas coder un keygen (qui d'ailleur est tres simple a faire) mais forcer le crackme
a afficher le bon serial a la place du message: "try again , Blablabla.."
utils nescessaires:
- soft ice (it r0x)
- editeur hexadecimal
Let's kick some ass =)
Bon , deja on lance ce con de crackme , et on entre son nom: ACiD BuRN et un serial
a 2 francs: 0800
Ensuite dans soft ice (ctrl+d) on tape: Bpx hmemcpy
On click sur Register et on arrive dans soft ice.. F12 pour sortir dans dlls et des
qu'on est dans le crackme on commence a tracer.
On arrive assez vite a une routine qui controle le type de nom entree (miniscules,
majuscules , spaces , chiffres ...) mais il y a d'abord un check sur la longeur du nom:
025F:004010A3 83F804 CMP EAX,04 <-- compare la taille du nom a 4
025F:004010A6 7304 JAE 004010AC <-- ok si superieur ou egal a 4
025F:004010A8 C9 LEAVE
025F:004010A9 C21000 RET 0010
Apres ca , il y a le control des caracteres :
025F:004010AC BA00000000 MOV EDX,00000000
025F:004010B1 8A8200314000 MOV AL,[EDX+00403100]
025F:004010B7 3C00 CMP AL,00
025F:004010B9 7426 JZ 004010E1
025F:004010BB 3C20 CMP AL,20
025F:004010BD 7408 JZ 004010C7
025F:004010BF 3C41 CMP AL,41
025F:004010C1 7C07 JL 004010CA
025F:004010C3 3C5A CMP AL,5A
025F:004010C5 7F03 JG 004010CA
025F:004010C7 42 INC EDX
025F:004010C8 EBE7 JMP 004010B1
025F:004010CA 6A00 PUSH 00
025F:004010CC 687D304000 PUSH 0040307D
025F:004010D1 684D304000 PUSH 0040304D
025F:004010D6 6A00 PUSH 00
025F:004010D8 E8BD000000 CALL USER32!MessageBoxA
Cette merde check si notre nom a des minuscules , minuscules , spaces ...
Si c pas ok , ca jump a 4010CA , et un message box nous dis d'enter que des majuscules
et spaces...
Merci , mais on avait compris ;)
Donc , on sort de soft ice , on met: ACID BURN comme nom , et 0800 tjs pour le serial
et on y retourne.on trace et on tombe sur la comparaison final:
025F:0040112D 68F6304000 PUSH 004030F6 <- d 4030f6 = fake serial
025F:00401132 6800314000 PUSH 00403100 <- d 403100 = bon serial
025F:00401137 E840000000 CALL KERNEL32!lstrcmp
025F:0040113C 83F800 CMP EAX,00
025F:0040113F 7517 JNZ 00401158
025F:00401141 6A00 PUSH 00
025F:00401143 68D3304000 PUSH 004030D3 <- d 4030D3 = Good (titre de la msg box)
025F:00401148 6889304000 PUSH 00403089 <- d 403089 = Bon message qd tu as le serial
025F:0040114D 6A00 PUSH 00
025F:0040114F E846000000 CALL USER32!MessageBoxA
025F:00401154 C9 LEAVE
025F:00401155 C21000 RET 0010
025F:00401158 6A00 PUSH 00
025F:0040115A 68EA304000 PUSH 004030EA <- d 4030EA = Bad (titre de la msgbox)
025F:0040115F 68DD304000 PUSH 004030DD <- d 4030DD = bad boy ;p pas le bon pass
025F:00401164 6A00 PUSH 00
025F:00401166 E82F000000 CALL USER32!MessageBoxA
En resume , on voit une comparaison bon serial / mauvais serial execute par l'API
lstrcmp , qui compare des strings. on voit un CMP EAX,00 : si la comparaison est ok
le serial est bon, donc EAX = 0 et on affiche le bon messagebox :)
sinon , ca saute a la mauvaise box !!
ok donc pour nous , ici :
025F:0040112D 68F6304000 PUSH 004030F6 <- d 4030f6 = fake serial
025F:00401132 6800314000 PUSH 00403100 <- d 403100 = bon serial
d 4030f6 nous donne: 0800
d 403100 nous donne: XZP]P[LKW
le bon serial ok , mais c pas ca qu'on veut :)
on veut forcer le prog a montrer le bon serial a la place du message d'erreur :)
pour cela , on voit que juste avant la msg box Bad serial il y a 2 push
le caption du titre de la title bar = push 4030EA
le texte du message du msgbox = push 4030DD
il push ces merdes , et ensuite il affiche le message a la con !
donc pour le faire afficher le bon serial tu prends l'address du push 'bon serial' et tu la
copies a la place du push 'message comme quoi tu as foire' !!
025F:0040115A 68EA304000 PUSH 004030EA
025F:0040115F 68DD304000 PUSH 004030DD
025F:00401164 6A00 PUSH 00
025F:00401166 E82F000000 CALL USER32!MessageBoxA
cela devient:
025F:0040115A 68EA304000 PUSH 004030EA
025F:0040115F 6800314000 PUSH 00403100 <-- push bon serial
025F:00401164 6A00 PUSH 00
025F:00401166 E82F000000 CALL USER32!MessageBoxA
On a maintenant plus qu'a midifier physiquement notre crackme , et le bon pass apparaitra
a la place de l'erreur :) et voila notre super keygen pour branleurs :)
hehe , c rapide , efficace , et on se fatigue pas :P
on cherche donc dans l'exe: 68EA30400068DD304000
on remplace dans l'exe par: 68EA3040006800314000
tu saves le fichier , et tu lances, met un serial en majuscules et goodie :))
le good serial apparait , Facile ....
remarques on a toujours le titre : erreur code dans la msg box , rien ne vous empeche
de le changer en: Keygen ;)
voila c'etais facile , je me fais chier la donc , je vais vous montrer comme controler
si le serial est valid ou pas , mais d'une autre manier (simple aussi).
on va donc recoder le check du serial dans soft ice pour s'occuper
ca vas prendre 10 secs , mais bon ;)
C'est juste pour montrer que on peut faire bcp de choses en fait....
notre routine de base:
025F:0040112D 68F6304000 PUSH 004030F6 <- d 4030f6 = fake serial
025F:00401132 6800314000 PUSH 00403100 <- d 403100 = bon serial
025F:00401137 E840000000 CALL KERNEL32!lstrcmp
025F:0040113C 83F800 CMP EAX,00
025F:0040113F 7517 JNZ 00401158
025F:00401141 6A00 PUSH 00
025F:00401143 68D3304000 PUSH 004030D3 <- d 4030D3 = Good (titre de la msg box)
025F:00401148 6889304000 PUSH 00403089 <- d 403089 = Bon message qd tu as le serial
025F:0040114D 6A00 PUSH 00
025F:0040114F E846000000 CALL USER32!MessageBoxA
025F:00401154 C9 LEAVE
025F:00401155 C21000 RET 0010
025F:00401158 6A00 PUSH 00
025F:0040115A 68EA304000 PUSH 004030EA <- d 4030EA = Bad (titre de la msgbox)
025F:0040115F 68DD304000 PUSH 004030DD <- d 4030DD = bad boy ;p pas le bon pass
025F:00401164 6A00 PUSH 00
025F:00401166 E82F000000 CALL USER32!MessageBoxA
Compaison grace a l'api lstrcmp.
on va transcrire ca en :
025F:0040112D A1F6304000 MOV EAX,[004030F6]
025F:00401132 8B1500314000 MOV EDX,[00403100]
025F:00401138 3BC2 CMP EAX,EDX
025F:0040113A 7405 JZ 00401141
025F:0040113C EB1A JMP 00401158
025F:0040113E 90 NOP
025F:0040113F 90 NOP
025F:00401140 90 NOP
025F:00401141 6A00 PUSH 00
025F:00401143 68D3304000 PUSH 004030D3
025F:00401148 6889304000 PUSH 00403089
025F:0040114D 6A00 PUSH 00
025F:0040114F E846000000 CALL USER32!MessageBoxA
025F:00401154 C9 LEAVE
025F:00401155 C21000 RET 0010
025F:00401158 6A00 PUSH 00
025F:0040115A 68EA304000 PUSH 004030EA
025F:0040115F 68DD304000 PUSH 004030DD
025F:00401164 6A00 PUSH 00
025F:00401166 E82F000000 CALL USER32!MessageBoxA
ceci fais exactement la meme chose , mais n'utilise pas d'API pour comparer
on met en EAX: l'addresse du serial entre , et en EDX le bon serial.
on les compare via : CMP EAX, EDX
ensuite un saut conditionel a la con et un Jump...
Les nop n'etaient pas utile , mais ca fais plus clean ;)
Voila , le prog controle si le serial est valide d'une autre maniere, ca sert a
rien , c'etais juste pour montrer ce qu'on peut faire avec de l'imagination , hehe
comme les messages box , on peut en ajouter dans un programme aussi , il suffit
de mettre les bons paramettres (les push)...
Les mots de la fin:
Bref , j'espere que ce cour vous a plus et que vous avez apris une ou deux petites choses.
Bien sur , le cour etait destine aux debutants , donc tous les crackers "avances" ne vous
plaigne pas ;)
et lisez mon cour sur cdilla si ce n'est pas deja fais :p
Pour les questions et autres commentaires :
ACiD_BuRN@nema.com ou acid2600@hotmail.com
Tous mes cours sont disponibles ici: http://acidburn2000.cjb.net
Greetings:
group greetings: ID - ECLiPSE - CiA - ODT - EXEC - TiTaNe - PWA - PC - UCF- CORE - CC
Also greetingz to: (no specific order)
R!SC, ^INFeRNo^, AB4DS, Cyber Blade, Klefz, , Volatility, TORN@DO, T4D
Jeff, [Virus], JaNe , Appbusta , Duelist , tKC , BuLLeT , Lucifer48 ,
MiZ , DnNuke , Bjanes , Skymarshall , afkayas , elmopio , SiFLyiNG ,
Fire Worx , CrackZ , neural_en , WarezPup , _y , SiONIDE , SKORPIEN
Lazarus , Eternal_Bliss , Magic Raphoun , DEZM , Bisoux , Carpathia ,
K17 , theMc , noos , Xmen , TeeJi , JB007 , Arobas , T0AD ,ytc , Kwai_lo ,
Killer_3K, TaMaMBoLo , gizmo , Gota , ExtaBrain , Alpine , WarezPup,
zoltan , [yAtes], TarGon , Icecream , Punkguy2 , Sortof, TRDdonjuan,
Lord Soth, Judged, G-Rom, Quantico, Christal, psike, Leo0n, Albator,
+Spath, +Frog's Print, toutim et tous ceux que je connais mais que j'ai oublie
les nicks ;p desole ...
Copyright (c) ACiD BuRN and the Immortal Descendants.
http://www.immortaldescendants.com/