/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