/head>

4)Crack de axman v2.21 et 2.02 beta

axman v02-21

outil : w32dasm


On entre son nom, une compagnie et un faut sérial. Le logiciel répond par : invalide registration information.

on va donc rechercher cette chaîne de carractère.

maintenant qu'on la trouvé, on remonte jusqu'à ce qu'on voit par quels sauts on arrive a cette routine.

On remarque qu'il y à pas mal de code entre le message et les reference des sauts. On place un BP sur la ligne :

:0040265E 8B5D08 mov ebx, dword ptr [ebp+08]

(juste en dessous des reférence)


Maintenant, on va lancer le programme.

On fait comme au début (ici je met OphSet en nom, The Dark Project en compagnie et 123456789 en sérial)


Lorsqu'on clique sur Ok, on se retrouve sur le BP qu'on à posé. A partir de maintenant, on trace (4 première cases cocher pour qu'on voit les API et on se sert de AutoStepInto)


Les 1ers API ne sont pas interessante. Elle vérifie le nom de la fenêtre qui est ouverte.

Puis on arrive à une API :

API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=004026B8, API Return Address=004026BD

Arg01 = 0065ce5c ->(LPDWORD)5368704f or (LPSTR)"OphSet"

Arg02 = 0065cec4 ->(LPDWORD)20656854 or (LPSTR)"The Dark Project"

Arg03 = 0065cf2c ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg04 = 0065cf4c ->(LPDWORD)000008c4 or (LPSTR)"Ä"

Arg05 = 00005fbc

Arg06 = 0065cf98 ->(LPDWORD)02020000 or (LPSTR)""

Arg07 = 5368704f ->(LPDWORD)02020000 or (LPSTR)""

Arg08 = bf007465 ->(LPDWORD)02020000 or (LPSTR)""


Celle là semble etre la bonne puisqu'elle reprend les onfo qu'on à rentré et qu'elle se trouve juste au dessus d'une comparaison qui va définir si notre mot de passe est valide ou non. Donc on va dedans (sans regarder le résultat sinon, c'est cuit!!!).


A partir de maintenant, on ne regarde pas le résultat tant que ça ne parait pas important!!!


Les 1er API qu'on va rencontré serve à concaténer notre nom, la compagnie et un mot : SweetHeart


Après avoir passer beaucoup d'API bizarre, notre patiance va être récompensée !!!

On tombe sur une API qui ressemble à peu prés à ça :

API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=0040D052, API Return Address=0040D057

Arg01 = 0065ccd0 ->(LPDWORD)39303834 or (LPSTR)"48097124$—@"

Arg02 = 00000008

Arg03 = 0065ccec ->(LPDWORD)0065cdf8 or (LPSTR)"øÍe"

Arg04 = 0065ca98 ->(LPDWORD)00000000 or (LPSTR)""

Arg05 = 82d5d5a8 ->(LPDWORD)f6451668 or (LPSTR)"hEö¿é!f#="

Arg06 = 82d5d598 ->(LPDWORD)f64db668 or (LPSTR)"h¶Mö¿é1f#="

Arg07 = 0065ce10 ->(LPDWORD)0065ce3c or (LPSTR)"<Îe"

Arg08 = 000008c4


On y voit clairement en argument 1 un numéro qu'on avait jamais vu. Et si c'était le sérial??? Continuons pour vérifier.


API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=00402A9F, API Return Address=00402AA4

Arg01 = 0065cdf8 ->(LPDWORD)39303834 or (LPSTR)"48097124"

Arg02 = 00000030

Arg03 = 00000009

Arg04 = 00000001

Arg05 = 82d5d5a8 ->(LPDWORD)f6451668 or (LPSTR)"hEö¿é!f#="

Arg06 = 82d5d598 ->(LPDWORD)f64db668 or (LPSTR)"h¶Mö¿é1f#="

Arg07 = 5368704f ->(LPDWORD)f64db668 or (LPSTR)""

Arg08 = 68547465 ->(LPDWORD)f64db668 or (LPSTR)""


Tiens revoilà encore ce numéro...


API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=00408FD5, API Return Address=00408FDA

Arg01 = 007804d0 ->(LPDWORD)39303834 or (LPSTR)"480971240"

Arg02 = 0065ce10 ->(LPDWORD)0065ce3c or (LPSTR)"<Îe"

Arg03 = 82d5d5a8 ->(LPDWORD)f6451668 or (LPSTR)"hEö¿é!f#="

Arg04 = 82d5d598 ->(LPDWORD)f64db668 or (LPSTR)"h¶Mö¿é1f#="

Arg05 = 000008c4

Arg06 = 00000008

Arg07 = 00402aa4 ->(LPDWORD)8310758b or (LPSTR)"‹uƒÄEèjPVè*p"

Arg08 = 0065cdf8 ->(LPDWORD)39303834 or (LPSTR)"480971240"


Il devait le trouvé trop court, c'est pour ça qu'il a rajouter un 0. Il va donc certainement diviser sérial en 3...


API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=00402AC4, API Return Address=00402AC9

Arg01 = 0065ce24 ->(LPDWORD)00303834 or (LPSTR)"480"

Arg02 = 00418c5c ->(LPDWORD)0000002d or (LPSTR)"-"

Arg03 = 82d5d5a8 ->(LPDWORD)f6451668 or (LPSTR)"hEö¿é!f#="

Arg04 = 82d5d598 ->(LPDWORD)f64db668 or (LPSTR)"h¶Mö¿é1f#="

Arg05 = 5368704f ->(LPDWORD)f64db668 or (LPSTR)""

Arg06 = 68547465 ->(LPDWORD)f64db668 or (LPSTR)""

Arg07 = 61442065 ->(LPDWORD)f64db668 or (LPSTR)""

Arg08 = 50206b72 ->(LPDWORD)f64db668 or (LPSTR)""


qu'es ce que je disais??

On peut donc déja déduire le sérial valide : 480-971-240. Continuons pour vérifier...


API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=00402AEE, API Return Address=00402AF3

Arg01 = 0065ce24 ->(LPDWORD)2d303834 or (LPSTR)"480-971-"

Arg02 = 0065cdfe ->(LPDWORD)00303432 or (LPSTR)"240"

Arg03 = 00000003

Arg04 = 82d5d5a8 ->(LPDWORD)f6451668 or (LPSTR)"hEö¿é!f#="

Arg05 = 82d5d598 ->(LPDWORD)f64db668 or (LPSTR)"h¶Mö¿é1f#="

Arg06 = 5368704f ->(LPDWORD)f64db668 or (LPSTR)""

Arg07 = 68547465 ->(LPDWORD)f64db668 or (LPSTR)""

Arg08 = 61442065 ->(LPDWORD)f64db668 or (LPSTR)""


Et voilà, mais est ce bien le sérial...


API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)

API Address=00402762, API Return Address=00402767

Arg01 = 0065ce24 ->(LPDWORD)2d303834 or (LPSTR)"480-971-240"

Arg02 = 0065cf2c ->(LPDWORD)34333231 or (LPSTR)"123456789"

Arg03 = 2d303834 ->(LPDWORD)34333231 or (LPSTR)""

Arg04 = 2d313739 ->(LPDWORD)34333231 or (LPSTR)""

Arg05 = 00303432 ->(LPDWORD)00000000 or (LPSTR)""

Arg06 = 0000013f

Arg07 = 0000013f

Arg08 = 0000013f


Cette API confraonte notre sérial et celui générer donc on avait bien le bon sérial!!!


Voilà, l'API suivante est :

API int Arg00 = MessageBoxA(Arg01,Arg02,Arg03,Arg04)

API Address=004026D1, API Return Address=004026D7

Arg01 = (HWND) 000008c4 (Window"Enter registration info")

Arg02 = (LPCTSTR) 00418be0 -> "Invalid registration information!"

Arg03 = (LPCTSTR) 00418c04 -> "AxMan - Error 400"

Arg04 = (UINT) 00000030


Donc les transformation du sérial son fini. Voilà, vous avez maintenant un sérial à votre nom et vous avez garder vos tunes!!!


OphSet

darkp@francemel.com

http://members.xoom.com/ophset


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

Le 13/05/1999

Cours de crack par BgCode

(Axman version 2.02 Beta)

C'est reparti!,Nous voila pour un nouveau cours de crack

Cette fois ci on va s'attaquer à Axman Version Beta

Avant tout un grand salut à Ophset !

Tiens donc dans ce numero j'ai décidé de mettre de la couleur pour égayer le cours

Outils :Softice,Axman(bien entendu),W32dasm,Hex workshop ou tout autre éditeur héxadécimale.

C'est parti !!

1°Chose :On veut s'enregistrer avec n'importe quel numéro,Pas de prblème !!

On dessassemble Axman puis on va dans les strings data !

La tout plein de messages, Quand on s'enregistre dans Axman et qu'on appuie sur Ok,on a

"Invalid registration code"

Alors on va chercher le message et la on clique deux fois ,Et on a

:00402691 8D8518FFFFFF lea eax, dword ptr [ebp+FFFFFF18]

:00402697 50 push eax

:00402698 E886000000 call 00402723

:0040269D 83C40C add esp, 0000000C

:004026A0 85C0 test eax, eax

:004026A2 7D15 jge 004026B9 <C'est là>

:004026A4 6A30 push 00000030

* Possible StringData Ref from Data Obj ->"AxMan"

|

:004026A6 68E0814100 push 004181E0

* Possible StringData Ref from Data Obj ->"Invalid registration information!"

|

:004026AB 68A08B4100 push 00418BA0

:004026B0 53 push ebx

On change donc le Jge en un Jmp pour qu'il ignore la procédure d'enregistrement

Donc on regarde l'offset :On a 00001AA2

On prend son éditeur héxa puis on modifie le 7D15 EN EB15

2°Chose :On voit que si on utilise le logiciel plus de 30 jours on a un petit message disant que la période d'évaluation est finie, Pareil que tout a l'heure,On Dessassemble puis,on cherche le message "This copy of axman has expired" dans les strings data

Et la on atterit sur ça :

:0040165C 8D45FC lea eax, dword ptr [ebp-04]

:0040165F 50 push eax

:00401660 E88C120000 call 004028F1

:00401665 83F802 cmp eax, 00000002

:00401668 59 pop ecx

:00401669 7521 jne 0040168C <Pareil que tout a l'heure,Un saut inconditionnel>

:0040166B 6A30 push 00000030

:0040166D 56 push esi

* Possible StringData Ref from Data Obj ->"This copy of AxMan has expired!"

|

:0040166E 6880844100 push 00418480

:00401673 FF7508 push [ebp+08]

Pareil on change le jne en je (histoire de tromper le logiciel)

Donc on prend son éditeur héxa et on change a l'adresse suivante: 00000A69

On met 75 au lieu du 74

Voila maintenant on peut l'utiliser tant qu'on veut !

3°Chose (Peut-être la chose la plus difficile)

Maintenant que l'on a fait tout ca on va pouvoir exploser le nag-screen qui nous fait vraiment chier!!

Il nous faut l'aide de w32dasm et de softice!

Alors on load axman avec softice puis on fait CRTL-D

On tape TASK

Eton va avoir des trucs du style :

Axman

Kernel32

et d'autre !

Alors la on fait HWND AXMAN

IL va nous filer des trucs du genre :

Window-handle hqueue Sz Qowner Class-name Window-procedure

0908(1) 0F4F 32 AXMAN #32770 (dialog) 1735:001474F

090C (2) 0F4F 32 AXMAN BUTTON 1735:000452D

0910(2) 0F4F 32 AXMAN STATIC 1735:00258E1

Ainsi de suite!

Mais tout ca ,ca veut dire quoi ?!?

Eh bien c'est une boite de dialogue référencé par le handle 0908,Cette boite contient des objets

Static :Zone de texte ,En programmation des labels

Button:Button ok,annuler ou tout autre chose.

C'est bien car c'est cela que l'on cherche!

En fait on veut voir ou on arrive si on clique sur le boutton "I agree"

Alors on va mettre un breakpoint en 090C pour cela on utilisera la fonction Bmsg(Breakpoint on Windows memory) ;Alors on fait Bmsg 090C wm_lbuttonup et on relance avec CTRL-D

On clique sur I agree et Boum on arrive en plein dans Softice !

On arrive dans le kernel ou tout autre machun que ça!

On trace alors avec F12 jusqu'au retour dans le programme Axman

La on deux CALL ->C'est eux qui appellent la procedure de l'affichage du nag-screen

On prends les adresses hexa puis on va dans w32dasm eton recherche ses adresses :

on a le code suivant:

* Reference To: USER32.DialogBoxParamA, Ord:008Eh

|

:0040164C FF15D8244200 Call dword ptr [004224D8] Procedure d'affichage du nag-screen !

:00401652 E88E110000 call 004027E5

:00401657 83F803 cmp eax, 00000003

:0040165A 7530 jne 0040168C

:0040165C 8D45FC lea eax, dword ptr [ebp-04]

:0040165F 50 push eax

:00401660 E88C120000 call 004028F1

:00401665 83F802 cmp eax, 00000002

:00401668 59 pop ecx

:00401669 7421 je 0040168C

:0040166B 6A30 push 00000030

:0040166D 56 push esi

C'est gagné on a plus qu'a regarder l'offset du all dword ptr [004224D8] c'est :00000A4A

On patche avec des Nop (No operations) Code =90

Et on remplace FF15D8244200 par 909090909090

Voila on quitte W32dasm Et on demarre le logiciel,

Voila plus de nag-screen qui prennet la tête !!!

J'espere que vous avez compris le cours

Si probleme,Mailez moi à bgrenard@nordnet.fr

Salut tout le monde !!

Bye BgCode