|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ce cours est un reflet fidèle du cours intégré au crack de ma création de CloneDVD 2.8.4.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 CloneDVD.exe
CloneDVD.exe
Aujourd'hui on s'attaque à un logiciel très connu dans le monde de la copie de DVD. 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 CloneDVD.exe dans le désassembleur w32dasm par la commande Disassembler -> Open File to disassemble -> CloneDVD.exe. Après quelques minutes 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 CloneDVD.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 CloneDVD.exe du packer Asprotect 1.2x -1.3 ? 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 CloneDVD.exe. Et là vous voyez apparaître en bas de la fenêtre de PEiD la phrase Microsoft Visual C++ 7.0. Qu'est ce que c'est Microsoft Visual C++ ? C'est le nom d'un compilateur très utilisé dans le monde de la programmation système et applicative. De plus vous le savez très bien que l'entreprise Mircrosoft est très connue pour ses systèmes d'exploitation et ses logiciels grand public. Elle n'a jamais fait en outre de packer pour les applications. On en conclut que l'application n'est pas packée. On va donc pouvoir désassembler CloneDVD.exe et faire ce qu'on veut avec sans être ennuyé par un packer.
1/ Méthode de cracking n°1
Elle consiste à enlever les limitations à la main sans chercher à s'enregistrer. a/ Etude des string data références et des fonctions exportées dans w32dasm. Si vous avancez d'un an la pendule de windows en bas à droite de votre écran et que vous lancez CloneDVD.exe vous avez une jolie voie féminine qui vous dit OH NO à la suite de laquelle s'affiche le message suivant "Votre période d'évaluation de CloneDVD2 a expiré". Traduisons en anglais cette phrase. Cela donne "Your evaluation period of CloneDVD2 has expired!". Après le désassemblage de CloneDVD.exe dans w32dasm regardons les string data references (clic sur le bouton Strn Ref) pour voir si cette phrase est trouvée par le désassembleur. Pas de chance les string data references sont presques vides. Il n'y a rien d'exploitable dedans (comme par exemple des mots-clefs comme trial ou expired). C'est pareil pour les fonctions exportées par CloneDVD.exe (aucune fonction exportée car le bouton Exp Fn est grisé dans la barre d'outils de w32dasm).
b/ Conversion d'un offset dans winhex en adresse dans w32dasm à l'aide des sections. Je vais sortir ma botte secrète : celle qui marche à tous les coups ! Ca consiste à chercher une chaîne dans l'éditeur hexadécimal winhex puis de relever l'offset du premier caractère de la chaîne trouvée et de le convertir ensuite en adresse dans w32dasm. Ensuite il nous suffira de chercher dans w32dasm où est appelée cette adresse. Cela revient à trouver l'endroit où le message est appelé par CloneDVD.exe. On ouvre donc CloneDVD.exe dans winhex. On fait ensuite Recherche -> Chercher texte -> Your evaluation period. Your evaluation period c'est le début de la chaîne "Your evaluation period of CloneDVD2 has expired!".Vous trouvez alors 1 seule occurence. Dans la barre de statut en bas de winhex vous pouvez lire Offset: 2F29E0. On revient à CloneDVD.exe désassemblé dans w32dasm. On va calculer l'adresse à laquelle correspond l'offset 2F29E0 dans CloneDVD.exe désassemblé. Pour cela regardons les sections de CloneDVD.exe en haut du listing de désassemblage de CloneDVD.exe dans w32dasm.
Disassembly of File: C:\Program Files\Elaborate Bytes\CloneDVD2\CloneDVD2.exe Number of Objects = 0007 (dec), Imagebase = 00400000h Object01: .text RVA: 00001000 Offset: 00001000 Size: 002D1000 Flags: 60000020
L'offset 2F29E0 est compris entre l'offset de début de section 002D3000 et l'offset de début de section 0041B000. Pour calculer l'adresse correspondant à l'offset 2F29E0 on utilise la formule suivante : Prenons la calculatrice de windows dans Démarrer -> exécuter -> calc.exe en mode hexadécimal (bouton hex) Conclusion : l'adresse dans CloneDVD.exe correspondant à l'offset 2F29E0 est 6F29E0.
c/ Localisation d'un message d'erreur dans w32dasm. Maintenant que nous avons l'adresse du premier byte du message "Your evaluation period of CloneDVD2 has expired!" qui est 6F29E0 faisons une recherche de l'endroit où cette adresse est appelée par le programme. Dans w32dasm faîtes Search -> Find Text -> 6F29E0. On arrive ici.
Notre message est donc appelé à l'adresse 0040E4BF. En 0040E4A7 on charge le mot Exit. Allez à l'offset suivant dans winhex : 006F2B10 - 00400000 - 002D3000 + 002D3000 = 2F2B10 pour vous en convaincre : c'est le calcul inverse de celui mené dans le paragraphe précédent : on part de l'adresse dans w32dasm et on veut arriver à l'offset dans winhex. Ce mot Exit sera affiché dans le nag-screen au démarrage de CloneDVD.exe sous la forme du bouton Quitter (car la période d'évaluation de 21 jours est dépassée). En 0040E4FF le nag-screen au démarrage de CloneDVD.exe s'affiche. Pour vous en convaincre chargez le debugger de w32dasm avec CTRL L puis posez un breakpoint sur l'adresse 0040E4FF avec SHIFT F12 -> 0040E4FF -> OK -> F2. Ensuite démarrez l'application avec F9. Le débugger de w32dasm s'arrête sur le point d'arrêt qu'on vient de poser en 0040E4FF (vous entendez un bing). Un simple F8 ensuite (débugging en mode pas à pas) affiche le nag.
d/ Retrait du time-limit et des nags-screens au démarrage. Au dessus de ces ligne de code vous remarquez en 0040E47D un saut conditionnel (jne 0040E774). Si on force ce saut on evite le nag-screen "Your evaluation period of CloneDVD2 has expired!" en 0040E4FF. Seulement voila arrivé en 0040E884 CloneDVD.exe nous affiche encore un nag-screen "CloneDVD2 n'est pas enregistré, vous avez utilisé 0 des 0 jours d'évaluation de CloneDVD2." avec un bouton continuer qui bizarrement ne lance pas l'application. Pour vous en convaincre fermez la session de debugging courante par CTRL T (T pour Terminate). Chargez le debugger de w32dasm avec CTRL L puis posez un breakpoint sur l'adresse 0040E47D avec SHIFT F12 -> 0040E47D -> OK -> F2. Ensuite démarrez l'application avec F9. Le débugger de w32dasm s'arrête sur le point d'arrêt qu'on vient de poser en 0040E47D (vous entendez un bing). Ensuite inversons le saut en 0040E47D pour sauter en 0040E774. Cliquez dans la grande fenêtre du debugger (celle qui s'était ouverte quand vous aviez fait CTRL L) sur le bouton Modify Data puis sur le 1 en dessous la lettre Z en haut de la fenêtre qui apparaît. Faîtes ensuite Modify puis Close. Ensuite avec F8 vous sautez en 0040E774. Arrivé avec F8 ensuite sur l'adresse 0040E77A vous constatez que le programme ne saute pas avec l'instruction je 0040E9B8 (vous avez 0 sous la lettre Z dans la grande fenêetre du debugger) sous les lettres O D I T S Z A P C. Si vous regardez bien le listing de désassemblage dans le praragraphe précédent vous voyez que le texte du bouton continuer est chargé en 0040E784 (006F296C = adresse du 1ier byte du texte du bouton Continue). Dans winhex allez voir à l'offset 2F296C). Pour supprimer les nags-screens et le time-limit au démarrage de CloneDVD.exe il suffit de sauter depuis l'adresse 0040E47D vers l'adresse 0040E9B8 (c'est un raccourci du forçage des 2 sauts en 0040E47D et 0040E77A). C'est ce qu'on appelle faire d'une pierre 2 coups.
e/ Appliquer physiquement les modifications. On va enregistrer notre modification physiquement dans le programme. Ouvrez une copie de CloneDVD.exe dans winhex en remplaçant par la commande ALT G -> E47D (E47D c'est l'offset donné dans w32dasm dans la barre de statut quand vous sélectionnez l'adresse 0040E47D) le code hexadécimal suivant en rouge :
:0040E47D 0F85F1020000 jne 0040E774
Voici comment j'ai trouvé le codé hexadécimal en rouge. Fermez la session de debugging courante par CTRL T (T pour Terminate). Chargez le debugger de w32dasm avec CTRL L puis posez un breakpoint sur l'adresse 0040E47D avec SHIFT F12 -> 0040E47D -> OK -> F2. Ensuite démarrez l'application avec F9. Le débugger de w32dasm s'arrête sur le point d'arrêt qu'on vient de poser en 0040E47D (vous entendez un bing). Ensuite cliquez sur le bouton Patch Code dans la petite fenêtre du debugger qui s'est ouverte quand vous aviez fait CTRL L. Tapez ensuite chacune des 2 lignes de code (le jmp 0040E9B8 et le nop) avec un entrée à la fin de chacune des lignes. Vous voyez ensuite le code hexadécimal apparaître en dessous. A quoi sert le nop (nop = No OPeration = instruction qui fait rien) ? Il sert à équilibrer le code hexadécimal. 0F 85 F1 02 00 00 fait 6 octets tandis que E9 36 05 00 00 n'en fait que 5. L'octet manquant on l'ajoute en ajoutant un nop.
f/ Retrait du message d'évaluation dans le "A propos". Je suppose ici que les modifications du paragraphe précédent ont été faîtes et que le pendule de windows a été avancée de 1 an. Quand vous démarrez CloneDVD.exe et que vous cliquez sur le bouton A propos vous voyez apparaître 2 messages "Version d'évaluation non enregistrée" et "Vous avez utilisé 0 des 0 jours d'évaluation de CloneDVD2.". Traduisons en anglais le premier message. Cela devient "Unregistered evaluation version!". On trouve comme précédemment le début de ce message dans CloneDVD.exe ouvert dans winhex à l'offset 2F84D8. 2F84D8 se traduit en adresse dans w32dasm par 6F84D8 (voir le paragraphe sur les sections de CloneDVD.exe plus haut). En cherchant l'endroit où est appelée cette adresse vous tombez ici.
"Unregistered evaluation version!" est appelé en 00457D50 avec un push 006F84D8. Si vous remontez dans le code vous voyez que l'on peut éviter ce message en annulant le saut en 00457CD0 (regardez en dessous de Reference by l'adresse 00457CD0 écrite en vert par w32dasm ; c'est l'adresse qui a demandé l'affichage du message). Ce que nous allons faire c'est donc annuler ce saut. Pour cela on ouvre la copie de CloneDVD.exe dans winhex que l'on a patché dans le paragraphe e/ et on remplace par la commande ALT G -> 57CD0 (57CD0 c'est l'offset donné dans w32dasm dans la barre de statut quand vous sélectionnez l'adresse 00457CD0) le code hexadécimal suivant en rouge :
:00457CD0 757A jne 00457D4C Enregistrez la modification et lancer la copie de CloneDVD.exe. Les messages d'évaluation dans le "A propos" ont disparus et sont remplacés maintenant par des 3 points consécutifs (...). Voila le programme est complètement craqué.
2/ Méthode de cracking n°2
Elle consiste à s'enregister pour enlever toutes les limitations. a/ Etude du code binaire de CloneDVD.exe Comme on sait déja que les string data reference de CloneDVD.exe sont casiment vides (cf méthode de cracking n°1) on va chercher directement des mot-clefs dans le code binaire de CloneDVD.exe. Pour cela on ouvre CloneDVD.exe avec winhex et on fait des recherches de chaînes qui nous parle d'enregistrement. Voici ce qu'on trouve : Offset : 3C23D4 -> Serial En utilisant les sections données dans le paragraphe 1-b on en déduit les adresses correspondantes dans w32dasm. Adresse : 007C23D4 -> Serial Ensuite on cherche avec la commande Search -> Find Text de w32dasm l'endroit où sont appelées ces 3 adresses. :005DBC46 68D4237C00 push 007C23D4 -> Appel de la chaîne Serial
b/ Localisation et debugging autour de la routine de vérification du serial. On va étudier ce qui se passe au démarrage de l'application avec ces 3 chaînes Serial, Company et Software\%s\%s\CDKey. Pour cela commence par charger en mémoire le debugger de w32dasm avec CTRL L puis on pose un breakpoint sur les 3 adresses 005DBC46 , 005DBE9E et 005DC539 (pour la première il faut faire dans w32dasm SHIFT F12 -> 005DBC46 -> OK -> F2). On lance le débugging avec F9.
Le debugger break en premier sur cette adresse 005DC539 (Software\%s\%s\CDKey). Faisons ensuite des F8 succcessifs pour voir ce qui se passe.
Arrivé en 005DC53F une fenêtre W32dasm API Details s'ouvre. En cliquant sur le bouton Get API Result vous voyez apparaître ce résultat : RESULT for API wsprintfA On en deduit que dans Software\%s\%s\CDKey le premier %s de c'était Elaborate Bytes et le deuxième CloneDVD2.
c/ Routine de lecture du serial dans la base de registre. Entrons dans le call 005DBC10 en 005DC54F (faîtes F7 arrivé en 005DC54F).
Avec la fenêtre intitulée W32dasm API Details qui s'ouvre sucessivement sur les calls du listing ci-dessus on a le détail de ce qui se passe. Utilisez systématiquement le bouton bouton Get API Result de la fenêtre W32dasm API Details. 005DBC1E -> on met le registre esi à 00000000.
d/ Serial valide ? Une fois sorti avec des F8 successifs de la routine de lecture du serial vous arrivez en 005DC56B
En 005DC56B le programme fait un test de validité du serial lu en base de registre.Comment est ce que je sais ça ? Eh bien le call 005DBE10 en 005DC57C appelle la chaîne Company (faîtes dans w32dasm SHIFT F12 -> 005DC57C -> OK -> flèche droite du clavier pour descendre dans ce call) mais en faisant ensuite des F8 successifs vous voyez que le programme en 005DC575 saute vers 005DC59F. On en déduit que si le programme ne prend pas la peine de lire la valeur Company dans le registre c'est qu'il sait déja si le serial trouvé en base de registre est faux. Il suffit alors d'annuler le saut en 005DC575 pour que le programme croit que le serial entré dans la base de registre est bon. Pour annuler le saut en 005DC575 cliquez quand vous êtes arrivé sur l'adresse 005DC575 (par des F8 successifs) sur le bouton Modify Data dans la grande fenêtre du debugger de w32dasm puis sur le 1 en dessous la lettre Z en haut de la fenêtre qui apparaît. Faîtes ensuite Modify puis Close. Si vous descendez avec F7 dans le call 005DBE10 vous voyez que le programme appelle une chaîne nommée Name avant Company dans la même clé que précédemment HKEY_LOCAL_MACHINE\Software\Elaborates bytes\CloneDVD2\CDKey : c'est là qu'il faut mettre votre nom qui sera le nom d'enregistrement.
e/ Enregistrement des modifications -> Dans le code du programme Ce que nous allons faire c'est annuler physiquement ce saut en 005DC575. Pour cela on ouvre une copie vierge de CloneDVD.exe dans winhex et on remplace par la commande ALT G -> 1DC575 (1DC575 c'est l'offset donné dans w32dasm dans la barre de statut quand vous sélectionnez l'adresse 005DC575) le code hexadécimal suivant en rouge :
:005DC575 7428 je 005DC59F
-> Dans le registre de windows Cela est effectué par le crack qui met à jour le contenu de la valeur Name présente sous la clé HKEY_LOCAL_MACHINE\Software\Elaborates bytes\CloneDVD2\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_clonedvd.reg : REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Elaborate Bytes\CloneDVD2\CDKey]
Dans ce cours vous avez appris à craquer un logiciel en utilisant 2 méthodes. La première consiste à effectuer manuellement l'annulation du time-limit, des nags-screens et des messages d'évaluation par une étude des messages affichés dans l'application pendant son exécution. Elle fait appel aux sections du programme pour convertir un offset dans winhex en adresse dans w32dasm.Cette méthode patche au total 6 octets et n'intervient pas sur le registre de Window. La seconde méthode quant à elle consiste via le registre à atteindre le statut d'utilisateur enregistré pour lever toutes les limitations du logiciel. Elle est plus efficace que la première en patchant 1 seul octet mais demande plus d'affinité avec le débugging et nécessite un minimum de connaissances pour savoir manipuler le registre de windows (API ADVAPI32.RegOpenKeyExA et ADVAPI32.RegQueryValueExA).
Bonne nuit à tous. ![]()
|