                            Le Manuel Du CrAcKeuR
                 
                     
                         
                                   Part 7
                         
                     
                 
                               


I-INTRODUCTION

        Aprs les ftes de nol et une crise de foie me revoil...mais je
prviens: le premier qui me parle de chocolat je lui vomis dessus :(^^).


II-THE TOOLS OF THE TRADE

-W32Dasm v8.9
Tiens il y a une nouvelle version qui est sortie, je l'ai sur mon disque
mais j'ai pas encore test....c'est la 9.3

-Softice v3.2
Indispensable....


III-GO AND FIGHT

Une, deux, une, deux, une, deux, bon on reprend l'entrainement avec un
logiciel pas mal du tout:
*Borland Java Builder v2.00 Professionnel version Franaise*

C'est un logiciel que j'ai trouv sur un cd de ".net Pro"...magazine cei dit
totalement nul si il n'y avait pas son CD...

Bon donc on installe le prog....dans l'install il nous dit d'entrer 1789
comme srial...l on doit surement pouvoir en entrer un autre qui nous
installe directement la version illimit....m'enfin j'ai pas essay...

Donc on a install le truc, on le lance.....hmmmm pas mal il mrite que je
le garde plus de 30 jours =).

Donc on augmente la date(on passe de 1998  1999 par ex) pis on look...
Une horrible boite de dialogue nous indique que "Cette preversion de Java
Builder a expire"....mouais on verra ;).

On lance donc "/JBuilder/bin/Jbuilder.exe" avec le Symbol Loader fournit avec
Softice pour pouvoir tracer depuis le debut et chopper le call qui affiche la
boite de dialogue...et donc on tombe sur ce call l:
***********************************************
0137:0056977C   call 004343A0
0137:00569781   mov  eax,[ebx]
0137:00569783   call 0043442C   <--- Ce call l
***********************************************

Bon on regarde autour et on voit pas de jz et autre jumps conditionnels...donc
il faut rentrer dans le call....on double clique sur le call pour mettre un
breakpoint et on relance le prog....et cette fois on trace dans le call avec
F8 puis F10....

On trace, on trace et on finit par tomber sur a:
********************************************************
jmp  004344AA
mov  dl,01
call 0042FF3C   <--Call qui affiche la boite de dialogue
********************************************************

Il y a de plus pas mal de jz autour...mais si vous essayez de modifier un de
ces jumps conditionnels vous vous rendrez compte que le prog ne se lance pas!
Donc ce call n'est pas seulement l pour afficher la boite de dialogue mais
bien pour initialiser le programme....
Donc vous effaez votre precedent call(BC *) et vous double-cliquer sur ce
nouveau call, histoire de mettre un nouveau breakpnt et d'aller encore plus
en profondeur....

Donc vous recommenez tout le bazard, vous rentrez dans le call qu'on vient
de breakpointer avec F8 et vous traez pour trouver le call qui affichera
la boite de dialogue...et vous tombez sur a:
*************************************
ret
mov  eax,ebx
call 0042415C    <-- Here is the call
pop ebx
ret
*************************************

Bon n'effaez pas tout de suite votre precedent breakpoint, mettez en d'abord
un nouveau sur ce call et faite Ctrl+D.....et l quesque vous voyez? Le break-
point qu'on vient de mettre arrte plusieurs fois le programme...et a ce
n'est pas bon du tout....en fait il s'aggit surement d'une boucle qui a
pour but d'initialiser le programme :(. Donc on efface le dernier breakpoint
qu'on a mit(sur le call 0042415C) et on relance encore une fois le prog....

Bon l on touche presque au but...le breakpoint que nous avons mit nous
permet de mieux preciser l'endroit ou se trouvera l'apparition de la fentre
mais en traant cela ne marche pas....il faut donc rajouter un autre
breakpoint...essayons Bpx MessageBox...marche pas....hmmmm...il s'agit sans
doute d'une fentre normale....essayons Bpx ShowWindow....BINGO!!!

Le programme s'arrte...et si on appuit sur Ctrl+D il attend que nous
cliquions sur OK....il s'agit donc de toute vidence de la bonne fentre =).

Bon une fois que le programme a stopp vous effaez ce breakpoint car windows
a tendance a l'appeler ds que vous cliquez sur la fentre...(BL pour avoir
la liste des breakpoints, et BC <number> pour effacer un breakpoint)...

Et vous appuyez sur F12 jusqu'a revenir dans le code du programme de
JBuilder.exe....dans les 0137:004XXXXX...et vous tombez sur a
**********************************************
push eax
push 004EEE5C
call ebx        <-- this is the fucking call
test al,al      <-- vous vous retrouvez l....
**********************************************

Voil donc the fucking call qui nous appelle cette fucking fentre(ha
vraiment, le language des jeunes!!!)...bon si on nop le "call ebx"....le
programme se lance sans limitation....mais il y a des push au dessus, faudrait
les nopper aussi sinon il y a des risques de stack overflow(depassement de
pile, allez apprendre l'asm j'vous dit)...et pis a fait pas bien nickel tout
a ;).

Donc on efface tout les precedents breakpoints(BC *) et on en met un sur ce
call ebx...et on rentre dedans avec F8(vous commencez  en avoir l'habitude
non??)...et on tombe sur du jolie code comme d'ab:
***********************************************************************
mov  ecx,[EBP+10]      
mov  edx,[EBP+0C]    <-- Sans doute la date
mov  eax,[EBP+08]      
call 00C2D594        <-- Hello i'm here to annoy you
mov  ebx,eax
test bl,bl           <-- haaaa enfin un beau test ;)
jnz  00C2DBAE        <-- Si t'es pas gentil tu ira dormir sans soupe
mov  eax,00C2DBC0    <-- "Cette preversion a expire"
call 00C2C37C        <-- Je te le montre avec ma belle boite de dialogue
***********************************************************************
Notez qqchose de trs important, regardez dans le titre de la fentre ou vous
pouvez entrez les commandes softice....il est crit:
BLDINFO!CODE+0002CB8C

En fait nous ne sommes plus dans Jbuilder.exe mais dans Bldinfo.dll, une
bibliothque utilis par Jbuilder.exe qui se trouve dans le mmme repertoire.

Revenons  notre code...

Donc on repere...le resultat du test de la date est renvoy dans eax...
eax est copi dans ebx, qui est lui test pour voir si il est  0...si il
n'est pas  0 alors il saute et se suicide...euh keske je raconte???

Si il est pas  0(donc  1 par ex) il n'affiche pas la boite de dialogue
et continue  fonctionner...

Les petits "malins" qui ont lus mes premiers tutorials diront..."mais boss,
il y a qu'a changer le jnz en jmp...et pis a roule...". Bein non mes ptits
gars...car c'est bl qui est test....et pourquoi croyez vous qu'ils aient
choisit de tester bl....et bein pour tester eax plus tard pour verifier que
des ptits crackeurs n'auraient pas voulus se foutre d'eux(non mais des fois!!)

Donc il faut modifier qqchose pour que eax soit tout le temps  1 avant
que le mov ebx,eax soit execut....bein on quitte softice, et on va
desassembler Bldinfo.dll...

On regarde dans les chaines de caractres et on trouve effectivement
"Cette prev"...donc on double clique dessus et on se retrouve au mmme
endroit que tout  l'heure avec Softice =)....on rentre dans le call qui suit
les 3 mov...

Et pis l on fait les modifications necessaires....tout ce qu'on a  faire
c'est de mettre eax  1 et de faire un ret non?

Bein on modifit les octect suivants avec Fxedit:
********************************
55 8B EC 81 C4 B4 FE FF FF 53 56
********************************
en
************************************************************
B8 01 00 00 00    mov eax,00000001
C3                ret

FE FF FF FF       > ne veut rien dire mais de toute faon ne
53 56             > sera jamais execut =)
************************************************************

Donc tout ce que fera ce call c'est mettre eax  1(ret qui le call)...

On lance et....a marche impec, et a c'est clean les aminches ;)


IV-CONCLUSION

Je ne dirais qu'une chose: professionnel...mon cul!!!

SaTaNiK
<freaking@caramail.com>
http://www.multimania.com/gripsou/
