|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ce cours est un reflet fidèle du cours intégré au crack de ma création de CloneCD 5.2.5.1 fr.
w32dasm 8.9 Pour désassembler le progamme (transformation en langage d'assemblage) Pour trouver les string data references nécessaires pour élaborer le crack. WinHex 10.2 PEid 0.93
Offset Déplacement depuis le début de la zone de code d'un programme. EB 90
Détail des modifications CloneCD.exe
CloneCD.exe
Aujourd'hui on s'attaque à un logiciel très connu dans le monde de la copie de CD. Comme d'habitude lorsque l'on commence le craquage d'un programme on commence par le désassembler et ensuite le débugguer pour y repérer les failles qui nous serviront à élaborer par la suite le crack. Le désassembleur / débuggueur que j'ai l'habitude d'utiliser et dont on va se servir c'est w32dasm. Cette introduction faite nous pouvons commencer. On ouvre CloneCD.exe dans le désassembleur w32dasm par la commande Disassembler -> Open File to disassemble -> CloneCD.exe. Après quelques instants le listing de désassemblage s'affiche dans w32dasm. Le programme ne se ferme donc pas pendant le désassemblage comme c'était le cas pour les versions précédentes de CloneCD.exe. Une question se pose alors immédiatement : l'application a-elle été protégée contre de désassemblage et le debugging avec un packer ? Par exemple y a t'il utilisation comme dans les versions précédentes de CloneCD.exe du packer Asprotect 1.2x -1.3 ?
a/ L'application est-elle packée ? Pour répondre à cette question il nous faut un logiciel très bien fait qui s'appelle PEiD (version 0.93). Vous le lancez et cliquez les ...Vous allez chercher CloneCD.exe. Eh là vous voyez apparaître en bas de la fenêtre de PEiD la phrase Borland C++ 1999. Borland qui est-ce ? C'est le nom d'une entreprise très célèbre pour ses compilateur C++. Elle n'a jamais fait de packer pour les applications.On en conclut que l'application n'est pas packée. On va donc pouvoir désassembler CloneCD.exe et faire ce qu'on veut avec sans être ennuyé par un packer.
b/ Localisation de la fonction d'appel des nags-screens Si après le désassemblage de CloneCD.exe dans w32dasm vous regardez les fonctions exportées (commande Functions -> exports de w32dasm) vous voyez une fonction au nom particulièrement significatif _ReminderForm. Reminder pour ceux qui sont allergiques à l'anglais ça veut dire rappel. Rappel de quoi vous me direz ? Eh bien du mode shareware sur lequel a été conçu CloneCD.exe. En d'autres termes comme cela est indiqué quand vous lancez le logiciel au dela de la période d'évaluation qui est de 21 jours vous devez vous enregistrer et tant que cela n'est pas fait le logiciel vous le rappelle systématiquement par des nags-screens (écran de harcèlement) par exemple celui-ci au démarrage de l'application "CloneCD n'est pas gratuit ! Ceci est une version d'évalution d'un logiciel copyrighté. La période d'évaluation de CloneCD a expiré ! Veuillez lire la documentation du logiciel pour plus de détails.". Vous remarquez que si vous ne vous enregistrez pas au dela de la période d'évaluation vous n'avez plus accès aux fonctions Graver une image et Copie de CD de CloneCD.exe. Avant de continuer encore une parenthèse : le mot Form dans _ReminderForm renvoie à la Form telle qu'on la trouve en Visual Basic ou en Delphi c'est à dire un composant qui gère l'affiche des fenêtres. On va donc regarder où le programme iunvoque cette fonction _ReminderForm pour retirer tous les nags-screens du programme. Faîtes CTRL S pour vous placer au début de la zone de code de CloneCD.exe puis Seach -> Find Text -> _ReminderForm et arrêtez vous sur la deuxième occurence de cette fonction.
La fonction _ReminderForm est appelée en 0040359B via l'instruction asm call dword ptr [edx+000000E8] depuis un saut conditionnel en 004035D6 (regardez sous le premier Reference by). Pour vous en convaincre il suffit de mettre un point d'arrêt avec le debugger sur l'adresse 004035D6 (dans w32dasm faîtes CTRL L puis SHIF F12 -> 004035D6 -> OK -> F2) puis de démarrez le debugging de CloneCD.exe avec F9. A ce moment là une fenêtre s'affiche "Debugger detected! For security reasons CloneCD will not run if a debugger is running." s'affiche. Faîtes OK. Vous arrivez alors sur le point d'arrêt 004035D6 (w32dasm vient de breaker sur 004035D6 : vous entendez un bing). Faîtes plusieurs fois F8 (debugging pas à pas sans entrer dans les calls mais en les exécutant quand même). Dès que vous passez sur l'adresse 0040359B le nag suivant apparaît si vous avez dépassé les 21 jours d'utilisation : "CloneCD n'est pas gratuit ! Ceci est une version d'évalution d'un logiciel copyrighté. La période d'évaluation de CloneCD a expiré ! Veuillez lire la documentation du logiciel pour plus de détails.". Pour ne pas afficher le nag il faut donc que l'on empêche le programme de sauter depuis 004035D6 vers 00403592. Comment faire ce tour de passe-passe ? Il suffit que le premier byte de l'adresse 0053BF70 invoquée en 004035CD vale 02 auquel cas en 004035D3 nous avons cmp dl, 02 <=> cmp 02, 02 <=> 02 - 02 = 00. Or un jne (jump if not equal to zero) saute si on n'a pas obtenu 0 dans le dernière instruction. Ici si dl = 02 le cmp donne 00. Donc on ne saute pas arrivé en 004035D6 pour dl = 02.
c/ Annulation des nags-screens. Pour ne pas afficher les nags-screens il faut rechercher l'endroit où le programme met à jour l'adresse 0053BF70 à autre chose que 02. Par exemple recherchons une instruction assembleur du style mov byte ptr [0053BF70], ?? avec ?? = quelque chose différent de 02 (02 = affichage des nags-screens) avec la commande de w32dasm Seach -> Find Text -> mov byte ptr [0053BF70]. Vous touvez un seul endroit dans le code.
Fermez la session de debugging courante avec CTRL T puis relancez une avec CTRL L. Posez un breakpoint sur l'adresse 0043B6B1 avec SHIFT F12 -> 0043B6B1 -> OK -> F2. Démarrez le debugging avec F9. Cliquez sur OK dans la fenêtre qui s'affiche "Debugger detected! For security reasons CloneCD will not run if a debugger is running.". Si vous faîtes ensutie une fois F8 le programme saute depuis 0043B6B1 vers 0043B70F. Nous on veut exécuter l'instruction en 0043B6C7 qui met 02 dans le contenu de l'adresse du premier byte de l'adresse 0053BF70 (c'est le mov byte ptr [0053BF70], 02). Au lieu d'annuler le saut en 0043B6B1 et de forcer celui en 0043B6BC pour arriver en 0043B6C7 je patche directement le saut en 0043B6B1 pour qu'il saute en 0043B6C7 (1 pierre 2 coups).
d/ Retrait de toutes les limitations On va enregistrer notre modification physiquement dans le programme. Ouvrez une copie de CloneCD.exe dans winhex en remplaçant par la commande ALT G -> 3ACB1 (3ACB1 c'est l'offset donné dans w32dasm dans la barre de statut quand vous sélectionnez l'adresse 0043B6B1) le code hexadécimal suivant en rouge :0043B6B1 745C jne 0043B70F Lancer le programme modifié : toutes les limitations ont disparues (time-limit, nags, fonctions désactivées,NON ENREGISTRE). On ne le voit pas dans ce que j'ai écris mais l'exécution de l'instruction a pour effet de retirer le 0 de 21 Jours d'essais restants ! dans Outils- > Registre et le nom NON ENREGISTRE dans Outils- > Registre et Aide -> Informations. Le programme met alors à la place le contenu de la valeur Name présent dans le registre sous la clé HKEY_LOCAL_MACHINE\SOFTWARE\SlySoft\CloneCD\CDKey. Comment ai-je trouvé cette clé du registre ? Eh bien regardez dans le listing de désassemblage. Vous avez au dessus du mot-clef serial en 00408F52 la phrase * Possible StringData Ref from Data Obj ->"Software\SlySoft\CloneCD\CDKey" et en dessous * Possible StringData Ref from Data Obj ->"Name".
e/ Assignation du programme à votre nom Cela est effectué par le crack qui met à jour le contenu de la valeur Name présent sous la clé HKEY_LOCAL_MACHINE\SOFTWARE\SlySoft\CloneCD\CDKey (c'est la commande /nom=pifoman dans la zone de texte du crack).Vous pouvez faire manuellement cette opération (une fois le programme patché) en adaptant ce code qui doit être collé dans un fichier texte nommé enregistrer_clonecd.reg : Windows Registry Editor Version 5.00
Dans ce cours vous avez appris à craquer un logiciel en utilisant ses fonctions exportées dans le listing de désassemblage de w32dasm. Ce cours utilise une autre technique que celle utilisée dans le précédent cours de CloneCD (celui de la version 5.2.0.0). Le programme n'est en effet plus protégé par le packer Asprotect 1.2x -1.3x. Il n'y a plus besoin comme cela était le cas auparavant d'inline patcher CCDDriver.dll pour positionner certains bytes en mémoire au démarrage de l'application. Par ailleurs je n'utilise plus la technique de recherche du mot-clef \key dans les string data reférence de CloneCD désassemblé dans w32dasm pour localiser l'endroit où patcher comme cela était le cas dans le cours de cracking de la version 5.2.0.0 de CloneCD.
Bonne nuit à tous. ![]()
|