******************************************************************************
{{{{{{{{{{{{{{{{{{{{{  Self-Keygen de FTP Xpert 1.30  }}}}}}}}}}}}}}}}}}}}}}}}
******************************************************************************

Ftp Expert est un bon client FTP qui peut servir très souvent. Il serait donc bon de le cracker.
On va voir une façon peu fréquente de cracker un soft, il va s'auto keygener !
Bon tout d'abord on se démerde pour avoir un nom ainsi q'un sérial valide. C'est ce qu'on appelle le sérial fishing (bah oui, c'est la pêche au sérial :)

On va donc dans :
aide->à propos->enregistrer
et un joile boite d'enregistrement s'affiche demandant le nom et le sérial. Arrivé ici on essaie les bpx habituels (GetDlgItemTextA et GetWindowTextA) mais ça marche pas. On passe donc à la manière brute, on remplie les champs de cette manière:
nom: TiPiaX
sérial : 1911
j'ai comme l'impression que je met la même chose à chaque fois ;)
et on fait un:
bpx hmemcpy
Puis on fait ok. Le prog va breaker 4 fois (le bpx hmemcpy est le bpx sur le load des chaines en mémoire). on refait la démarche mais quand ça va breaker on va passer les 3 premiers avec F5 puis on va matter le code. (faites bc* pour effacer vos bpx). Il faut faire 7 fois F12 pour revenir car pour l'instant nous sommes dans les APIs de windows.

On trace avec F10 et on voit beaucoup de ret (retour d'un call) on revient donc de loin :). On trace jusqu'à arriver en 004BA126:
:004BA120 8B55EC                  mov edx, dword ptr [ebp-14]
:004BA123 8B45FC                  mov eax, dword ptr [ebp-04]
:004BA126 E80DA0F4FF              call 00404138
:004BA12B 0F8580000000            jne 004BA1B1
:004BA131 A128484F00              mov eax, dword ptr [004F4828]
Le call va tester qqchose puis le jne va sauter selon la condition reçue. Regardez par vous même, un simple R FL Z pour changer les conditions de saut lorsque vous vous trouvez sur le jne et le prog nous dit merci de nous être enregistré. Heureusement pour nous il n'est pas enregistré (sinon pour le keygener on est mal, lol).

on va rentrer dans le call en faisant un F8 quand on est dessus et on matte encore. On voit pas mal de cmp ?,? . (les ? étant des valeurs de registres, lol) on fait des bouton droit->display sur les registres testés et on trouve une valeur bizarre dans esi:
3434YP-8BV5V7-C1Y48P-4HABLM
Avant de tester voir si c'est le sérial on sauvegarde les fichiers user.dat et system.dat qui sont dans c:\windows\ (ce sont les fichiers de la base de registres) comme ça avec un peu de chance on pourra se désenregistrer.
On essaie donc et boudiou c'est le bon sérial ! (on s'en doutait pas un peu, lol)
Mais putain il doit s'en passer des trucs pour faire un sérial comme ça. J'ai la flemme de le keygener moi. On va donc se démerder pour que le prog se keygen tout seul. (la hantise d'un programme, s'autohacker). Quand le sérial est faux un boite de message s'affiche. On va se débrouiller pour que celle ci balance le sérial valide.
Le probleme c'est de se désenregistrer. On replace les fichiers copiés de la base de registre, rien n'y fait. Le prog s'enregistre d'une autre manière. On le réinstalle, idem, ARGGG.
on trifouille quand même avec regedit et on trouve en:
HKEY_CURRENT_USER\Software\Visicom Media\FTPExpert\Enregistrement
une clé name et sérial. Ya plus qu'a les effacer :). On m'aurait donc menti system.dat et user.dat c'est pas tout le reg. (si quelqu'un sait quels sont les fichiers à sauvegarder ça m'aiderait.)

Bon retournons à nos moutons :). On sait que le registre ESI pointait sur notre sérial. La valeur de ESI était 011CF78. J'ai fait beaucoup d'essai ensuite, mais la meilleure pour éviter les plantages est d'appeler un boite de message et de quitter tout de suite après.

Vous vous souvenez de notre call en 004BA126, eh bien on va l'écraser et mettre tout notre code à la suite. (c'est pas très subtil mais efficace) Voici la procédure avant: (offset B9526h donné par Wdasm :)
:004BA126 E80DA0F4FF              call 00404138
:004BA12B 0F8580000000            jne 004BA1B1
:004BA131 A128484F00              mov eax, dword ptr [004F4828]
:004BA136 8B00                    mov eax, dword ptr [eax]
:004BA138 C6806007000000          mov byte ptr [eax+00000760], 00
:004BA13F 8D55E8                  lea edx, dword ptr [ebp-18]
:004BA142 8B83D8020000            mov eax, dword ptr [ebx+000002D8]
:004BA148 E8DB51F8FF              call 0043F328
avant même que ESI ait le serial EAX l'a. On utilise donc EAX.
après:
:004BA126 6A00                    push 00000000
:004BA128 50                      push eax
:004BA129 50                      push eax
:004BA12A 6A00                    push 00000000
:004BA12C E8FD9FA9BF              call BFF5412E  //call MessageBoxA
:004BA131 6A00                    push 00000000
:004BA133 E89233ADBF              call BFF8D4CA  //call ExitProcess
Ce code est obtenu par la commande "a 004BA126" de Softice. Tapez cette commande puis écrivez le code puis faites echap. Petit rappel sur les messagebox, les paramètres 2 et 3 sont le titre et le texte ici remplacés par le bon numéro de série :) (pointé par eax). On relance et ça marche ! youpi. Je pense que le prog sera joint au mag pour vous éviter toute cette foutue manip, mais désormais il sert de keygen, l'utiliser pas pour faire du ftp car vous pourrez pas l'enregistrer :)

Dernier petit truc, j'ai envie de mettre un petit message: "Cracked by TiPiaX - Hccc", pas de problème. On place ça qq lignes après notre code, en B9550h par exemple. (soit dans la mémoire:004BA150) et on réécrit le code:
:004BA126 6A00                    push 00000000

* Possible StringData Ref from Code Obj ->"Cracked By TiPiaX - Hccc!"
                                  |
:004BA128 6850A14B00              push 004BA150
:004BA12D 50                      push eax
:004BA12E 6A00                    push 00000000
:004BA130 E8F99FA9BF              call BFF5412E
:004BA135 6A00                    push 00000000
:004BA137 E88E33ADBF              call BFF8D4CA
Le tout bien sûr grace à la commande "a" de softice qui convertit votre code asm en hexa. Voila c'est fini, si vous avez des questions, vous savez où me joindre :)

TiPiaX/VDS