Allez dans mIRC et dans le menu faites
'Help' puis 'Register'.
Entrez votre nom et un serial comment 123 puis appuyez sur 'ok'.
Et le message : "Sorry, your registration name and numer
don't match! Please..." apparait.
Notez le, il va nous servir pour la suite.
Puis faites une copie de mIRC.exe.
Faites en une seconde copie.
Ensuite desassemblez une copie avec W32dasm
Allez ensuite dans 'String Data References', et dans la liste
des messages cherchez le messages d'erreurs que nous avons noté
précédemment. Cliquez deux fois dessus, W32dasm
nous emmène dans le programme...
* Referenced by a (U)nconditional or
(C)onditional Jump at Address:
:00435D09(C) (nous allons y faire référence un
peu plus bas...)
:00435DAA 6A00 push 00000000
* Reference To: USER32.MessageBeep,
Ord:0000h
:00435DAC E80B1C0900 Call 004C79BC
:00435DB1 68E9AD4C00 push 004CADE9
:00435DB6 6A00 push 00000000
:00435DB8 6A0C push 0000000C
* Possible Ref to Menu: MenuID_0017,
Item: "Search..."
* Possible Reference to Dialog: DialogID_0033,
CONTROL_ID:0083,
:00435DBA 6883000000 push 00000083
:00435DBF 8B5508 mov edx, dword ptr [ebp+08]
:00435DC2 52 push edx
* Reference To: USER32.SendDlgItemMessageA,
Ord:0000h
:00435DC3 E8481C0900 Call 004C7A10
:00435DC8 68EBAD4C00 push 004CADEB
:00435DCD 6A00 push 00000000
:00435DCF 6A0C push 0000000C
* Possible Ref to Menu: MenuID_0017,
Item: "Contents"
* Possible Reference to Dialog: DialogID_0033,
CONTROL_ID:0082, "
:00435DD1 6882000000 push 00000082
:00435DD6 8B4D08 mov ecx, dword ptr [ebp+08]
:00435DD9 51 push ecx....
* Reference To: USER32.SendDlgItemMessageA,
Ord:0000h
:00435DDA E8311C0900 Call 004C7A10
:00435DDF 6A10 push 00000010
:00435DE1 6A00 push 00000000.
* Possible Reference to String Resource
ID=01912: "mIRC Registration!"
:00435DE3 6878070000 push 00000778
:00435DE8 E81348FDFF call 0040A600
:00435DED 50 push eax
:00435DEE 6A00 push 00000000
* Possible Reference to String Resource
ID=01913: "Sorry, your registration name and number don't
match!..Pleas"
(Le programme nous amène ici si le code est mauvais.)
:00435DF0 6879070000 push 00000779
:00435DF5 E80648FDFF call 0040A600
:00435DFA 50 push eax
:00435DFB 8B4508 mov eax, dword ptr [ebp+08]
:00435DFE 50 push eax
* Reference To: USER32.MessageBoxA,
Ord:0000h
Il s'agit donc de savoir quand le programme
décide de nous envoyer ici...
on remonte donc pour chercher un saut conditionnel (Je ou Jne,
Ja....).
Au bout d'un moment on arrive ici : (c'est ce qui avait au tout
debut...)
* Referenced by a (U)nconditional or
(C)onditional Jump at Address:
:00435D09(C)
:00435DAA 6A00 push 00000000
* Reference To: USER32.MessageBeep,
Ord:0000h
:00435DAC E80B1C0900 Call 004C79BC
:00435DB1 68E9AD4C00 push 004CADE9
:00435DB6 6A00 push 00000000
:00435DB8 6A0C push 0000000C
Le (C) indique que c'est un saut conditionnel
On nous indique aussi sa provenance (a gauche du (c)), à
savoir : 00435D09.
Faites 'Goto Code Location' et tapez 00435D09.
W32dasm nous emmène ici :
* Reference To: USER32.SendDlgItemMessageA,
Ord:0000h
:00435CF3 E8181D0900 Call 004C7A10
:00435CF8 68235F4D00 push 004D5F23
:00435CFD 683C5B4D00 push 004D5B3C
:00435D02 E871C50500 call 00492278
:00435D07 85C0 test eax, eax
:00435D09 0F859B000000 jne 00435DAA
(le JNE nous envoie sur "Sorry, your ...." lorsque
le code est faux...)
* Possible StringData Ref from Data
Obj ->"mirc.ini.
:00435D0F 687CCF4C00 push 004CCF7C
* Possible StringData Ref from Data
Obj ->"oryx"
:00435D14 68E3AD4C00 push 004CADE3
* Possible StringData Ref from Data
Obj ->"show"
:00435D19 68DDAD4C00 push 004CADDD
* Possible StringData Ref from Data
Obj ->"about"
:00435D1E 68D6AD4C00 push 004CADD6
:00435D23 E8D8600200 call 0045BE00
:00435D28 BE105E4E00 mov esi, 004E5E10
:00435D2D BF3C5B4D00 mov edi, 004D5B3C
:00435D32 33C0 xor eax, eax
:00435D34 83C9FF or ecx, FFFFFFFF
:00435D37 F2 repnz
:00435D38 AE scasb
:00435D39 F7D1 not ecx
:00435D3B 2BF9 sub edi, ecx
:00435D3D 87F7 xchg edi, esi
:00435D3F 8BC7 mov eax, edi
:00435D41 8BD1 mov edx, ecx
:00435D43 C1E902 shr ecx, 02
:00435D46 F3 repz
:00435D47 A5 movsd
:00435D48 8BCA mov ecx, edx
:00435D4A 83E103 and ecx, 00000003
:00435D4D F3 repz
:00435D4E A4 movsb
:00435D4F 68235F4D00 push 004D5F23
:00435D54 683C5B4D00 push 004D5B3C
:00435D59 E8F6C70500 call 00492554
:00435D5E 6A00 push 00000000
* Possible Ref to Menu: MenuID_0017,
Item: "Register..."
* Possible Reference to Dialog: DialogID_0033,
CONTROL_ID:0085, ""
:00435D60 6885000000 push 00000085
:00435D65 A1C0204E00 mov eax, dword ptr [004E20C0]
:00435D6A 50 push eax
* Reference To: USER32.DeleteMenu, Ord:0000h
(ici il appelle la fonction qui efface 'Register' du menu)
:00435D6B E8541A0900 Call 004C77C4
:00435D70 6A01 push 00000001
:00435D72 8B5508 mov edx, dword ptr [ebp+08]
:00435D75 52 push edx
* Reference To: USER32.EndDialog, Ord:0000h
:00435D76 E89D1A0900 Call 004C7818
* Possible Reference to Dialog: DialogID_0040
:00435D7B 6A40 push 00000040
:00435D7D 6A00 push 00000000
* Possible Reference to String Resource
ID=01912: "mIRC Registration!"
:00435D7F 6878070000 push 00000778
:00435D84 E87748FDFF call 0040A600
:00435D89 50 push eax
:00435D8A 6A00 push 00000000
* Possible Reference to String Resource
ID=01911:
"Your registration has been entered successfully...Thanks
for."
:00435D8C 6877070000 push 00000777
:00435D91 E86A48FDFF call 0040A600
:00435D96 50 push eax
:00435D97 8B4D08 mov ecx, dword ptr [ebp+08]
:00435D9A 51 push ecx
Donc si on change le 'jne 00435DAA'
en 'je 00435DAA' le programme ira sur "Your registration
has been entered successfully..." uniquement quand le code
sera faux.
Il faut donc changer 'jne 00435DAA' en 'je 00435DAA' donc 0F859B000000
devient 0F849B000000
(OF85xxxxxx devient OF84xxxxxx, et inversemment...cf MemenTo
1)
On clique sur la ligne 00435D09 pour savoir quel offset modifier.
(en effet dans la barre du bas, W32dasm nous indique l'offset
ou on se trouve. cf MemenTo 1...).
Ensuite prenez un éditeur héxadécimal,
allez à l'offset et modifier autre copie de Mirc comme
indiqué précedemment.
Sauvegardez, et relancer le programme et essayez de vous enregistrez,
rentrez votre nom et un serial comment 123.
Bravo, mIRC et enregistré on constate également
que 'Register' ne figure plus dans le menu 'Help'
En plus, votre nom apparait dans 'About' !!
Quittez mIRC et relancez le programme et là....oh surprise,
le programme n'est plus enregistré :(
Et oui...comme la plupart des programmes mIRC effectue une vérification
du nom/serial au démarrage.
On réfléchit et on se
souvient que lorsque on c'est enregistré le menu 'Register'
avait disparut.
On cherche alors dans 'Ref Menu' la reference 'Register' et on
le trouve !
On sait également que pour supprimer un menu le programme
doit faire appel à la fonction USER.DELETEMENU. On recherche
donc un endroit ou on trouve une référence au menu
'Register' et à la commande User.deletemenu. Cliquez donc
plusieurs fois sur 'Register' jusqu'à ce que vous trouviez
'Register' et un peu plus haut la commande qui permet de supprimer
le menu. On la trouve, et cela nous donne cela :
:004923EA 681F024D00 push 004D021F
:004923EF 8B4C240C mov ecx, dword ptr [esp+0C]
:004923F3 51 push ecx
* Reference To: ADVAPI32.RegQueryValueA,
Ord:0000h
:004923F4 E8CB4E0300 Call 004C72C4
:004923F9 85C0 test eax, eax
:004923FB 7565 jne 00492462
:004923FD 6A02 push 00000002
:004923FF 68235F4D00 push 004D5F23
:00492404 E867B1FAFF call 0043D570
:00492409 68235F4D00 push 004D5F23
:0049240E 55 push ebp
:0049240F E864FEFFFF call 00492278
:00492414 85C0 test eax, eax
:00492416 754A jne 00492462 (voilà quelque chose qui nous
intéresse...)
(détermine si le menu est affiché ou non)
:00492418 8B0424 mov eax, dword ptr [esp]
:0049241B 50 push eax
* Reference To: ADVAPI32.RegCloseKey,
Ord:0000h
:0049241C E88B4E0300 Call 004C72AC
:00492421 6A00 push 00000000
* Possible Ref to Menu: MenuID_0017,
Item: "Register..."
(Voilà la référence qui nous intéresse...)
* Possible Reference to Dialog: DialogID_0033,
CONTROL_ID:0085, ""
:00492423 6885000000 push 00000085
:00492428 8B15C0204E00 mov edx, dword ptr [004E20C0]
:0049242E 52 push edx
* Reference To: USER32.DeleteMenu, Ord:0000h
(Et la commande permettant de supprimer le menu 'Register...').
La comme avant, il suffit de changer
un je en jne donc jne 00492462 devient je 00492462 en héxadécimal
744A devient 754A
Voilà, comme avant notez l'offset
à modifier et allez les changez avec l'éditeur
héxadécimale, sauvegardez, relancez le mIRC. Puis
rentrez votre nom et un serial comment 123, comme avant le programme
vous dis "Thank...", quitter mIRC, relancez le et là
bravo, mIRC et complètement cracké, en effet notre
nom et dans 'About' et 'Register' n'est plus la. |