|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ce cours est un reflet fidèle du cours intégré au crack de ma création de CloneDVD 2.5.4.3 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 ProcDump32 PEid 0.92 Stripper v2.11 rc2
Offset Déplacement depuis le début de la zone de code d'un programme. EB 90
Détail des modifications CloneDVD2.exe
CloneDVD2.exe
Aujourd'hui on s'attaque à un logiciel très connu dans le monde de 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ébugger 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 donc le logiciel CloneDVD2.exe dans le désassembleur w32dasm par la commande ommande Disassembler -> Open File to disassemble -> CloneDVD2.exe. On s'attend comme d'habitude à trouver un listing de désassemblage avec un suite de lignes de code en assembleur. Seulement avec ce programme rien n'apparaît ni dans le listing de désassemblage, ni dans les string data référence qui nous servent d'ordinaire à repérer où se trouve la protection (on accède aux string data référence par le bouton nommé Strn Ref dans la barre de bouton de w32dasm).
1 ière analyse Premier réflexe face à ce type de situation (qui arrive systématiquement chez les logiciels distribués par slysoft) c'est de se dire que l'on est présence d'un packer. Un packer c'est quoi et ça sert à quoi vous me direz ? Eh bien c'est un programme qui recode un exécutable en compressant et cryptant certaines parties de cet exécutable (la section de code notamment).Cela a pour conséquence de réduire en taille l'exécutable ainsi généré mais surtout de le protéger contre tout désassemblage et tout déboguage que nous cracker nous menons systématiquement pour retirer les protections incluses dans le logiciel. Ce type de protection est aussi bien adapté aux versions de type shareware puisque un packer gère en général la durée maximum d'utilisation du logiciel (time-limit). En regardant les quelques lignes d'informations qui précèdent le listing de désassemblage vierge que l'on a obtenu dans w32dasm on peut détecter la présence du packer en particulier si on regarde les lignes marquées object01, object02 ... Vous voyez en effet que tous les objets (9 au total) ont tous leur flags (en français caractéristique) à C00000040. Cette suite de bytes nous empêche de désassembler CloneDVD2.exe et d'avoir les string data références. Pour pouvoir désassembler et obtenir les strings data référence il suffit que chacun des objets (on parle encore de sections) ait comme caractéristique E00000020 c'est à dire que chacune des sections soit readable writable et exécutable. Comment fait-on ce changement ? On utilise un éditeur de sections comme ProcDump32 (la version finale c'est la version 1.6.2). On ouvre une copie de CloneDVD2.exe dans ProcDump32 en cliquant sur le bouton PEeditor de ProcDump32 puis sur le bouton Sections.Sur chacune des sections dans la colonne Name faites un clic droit -> Edit section -> section characteristics : E00000020. Validez par OK puis OK. Les sections sont maintenant modifiées. Ouvrons l'exécutable copie de CloneDVD2.exe ainsi modifié dans w32dasm. Le logiciel maintenant se désassemble mais nos string data référence ne sont toujours pas plus bavardes. De plus si vous débugguez copie de CloneDVD2.exe en faisant CTRL L suivi de F9 dans w32dasm vous avez le droit à un message d'erreur du packer qui nous dit "File corrupted ! Please run a virus check,then reinstall the application". Bref on va choisir un meilleure solution que celle qu'on a choisi. On va chercher la signature du packer utilisé pui on va unpacker le programme pour ensuite pouvoir le désassembler avec de vrais string data références.
2 ième analyse a/ Trouver le packer utilisé Pour cela il nous faut un logiciel très bien fait qui s'appelle PEiD (version 0.92). Vous le lancez et cliquez les ...Vous allez chercher CloneDVD2.exe. Eh là vous voyez apparaître le nom du packer utilisé suivi du nom de son créateur "ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov". b/ Présentation du packer Asprotect 1.23 RC4 Asprotect est une version améliorée d'un packer existant (du même auteur) s'appelant Aspack. Il est écrit en delphi et s'adapte à n'importe quel type d'exécutable. Il protége le logiciel d'origine sur plusieurs niveaux : -> Il compresse et encrypte le programme original.
-> IAT signifie Import Address Table : c'est une table qui contient les adresses des références aux fonctions utilisées par le programme. Ces fonctions sont encodées dans des fichiers dll par exemple la fonction MessageBoxA de la dll user32.dll. -> Pour une présentation plus poussée du packer je vous invite à aller à cette adresse :
c/ Unpacking L'unpacking c'est l'art de décompresser un programme qui a été au préalable packé par un soft. Dans notre cas on va chercher à unpacker CloneDVD2.exe qui a été packé avec Asprotect 1.23 RC4. Deux approches sont possibles pour réaliser cet exercice : -> le manual unpacking avec le debugger ollydbg : on fait l'unpacking à la main. En cherchant sur le net vous trouverez un unpacker pour Asprotect 1.23 RC4. C'est Stripper v2.11 rc2 crée par syd. Il est téléchargeable sur son site à l'adresse http://syd.nightmail.ru Si vous voulez vous initier et développer vos connaissances en unpacking je vous conseille le site de la FFF (team française très connue dans le monde du cracking) : http://unpacking.free.fr
d/ Unpacker CloneDVD avec Stripper Rien de compliqué. Tout est automatique. Veillez à mettre Engine.sys dans le même répertoire que Stripper avant de commencer. Ensuite vous cliquez sur le bouton Open de Stripper et choisissez CloneDVD2.exe et vous cliquez sur Unpack. Vous voyez apparaître l'IAT dont je parlais tout à l'heure dans une nouvelle fenêtre. Faites Save. Le processus de décompression et de réallocation des adresses de l ' IAT s'est bien passé. Le logiciel malgré une Unrecognized function at address: 00fb3861 affiche done ....Stripper a généré dans le même répertoire que CloneDVD2.exe le fichier _CloneDVD2.exe. _CloneDVD2.exe c'est la version unpackée de CloneDVD2.exe. Au passage on note que l'exécutable est passé de 1.80 Mo à 4.35 Mo. Cliquez sur Exit pour terminer l'unpacking.
e/ Craquage de la version unpackée de CloneDVD2 On va travailler maintenant uniquement sur la version unpackée de CloneDVD. On l'ouvre dans le désassembleur w32dasm par la commande ommande Disassembler -> Open File to disassemble -> _CloneDVD2.exe. Là on voit que le programme se désassemble avec de vrai string data référence. Certains flag C0000040 caractériques du packer ont disparu en particulier la section .text qui a maintenant comme caractéristique E00000020. La section .text est la section la plus importante des programmes type PE (PE = portable executable) : elle contient le point d'entrée du programme (en anglais l'entry point). e-1/ Retrait du time-limit Deuxième étape : l'étude des string data références (accès par le bouton nommé Strn Ref dans la barre de bouton de w32dasm). On fait Copy All dans la fenêtre qui s'affiche et on colle le tout dans notepad.exe. On fait une recherche dans notepad d'une chaîne qui nous parle d'évaluation. On trouve "Unregistered evaluation version!" et "Your evaluation period of %1 has ". Revenons à w32dasm et faisons CTRL S pour aller au début du code du programme et ensuite dans la fenêtre des string data reference de w32dasm cliquons sur "Your evaluation period of %1 has ". Il n'y a qu'une seule occurence.
Je crois que c'est clair. J'explique quand même. En 0040E077 vous avez un saut qui vous permet de passer par dessus le Exit et le "Your evaluation period of %1 has expired!" et d'arriver sur "continue". Eh bien pour qu'on puisse utiliser le logiciel au dela de 21 jours il n'y a qu'à forcer le saut en 0040E077. On récupère l'offset correspondant à l'adresse 0040E077.C'est écrit en bas dans la barre de statut de w32dasm quand vous sélectionnez dans w32dasm la ligne d'adresse 0040E077.En effet en bas vous voyez marqué @offset 0000D677h : l'offset c'est D677. Vous ouvrez une copie de _CloneDVD2.exe dans winhex puis faites ALT G -> D677 et vous remplacer le code hexadécimal en rouge par sa nouvelle valeur :0040E077 0F85D5000000 jne 0040E152 Vous enregistrez et avancez la pendule de windows d'un an et vous lancez le programme modifié. Le programme est évaluable ad vitam aeternam.
e-2/ Retrait du nag-screen On prend la version originale du programme unpacké. On la désassemble dans w32dasm et on va la débugger en utilisant ce que l'on a fait. Le nag-screen en question qui s'affiche nous dit que "CloneDVD 2 n'est pas enregistré, vous avez utilisé 12 jours des 21 jours d'évaluation de cloneDVD2". On charge _CloneDVD2.exe en mémoire par CTRL L dans w32dasm puis on pose un bp (breakpoint ou point d'arrêt) en sélectionnant la ligne d'adresse 0040E077 suivi de F2. On met un bp sur 0040E077 car le programme au démarrage va passer sur cette adresse pour voir s'il doit continuer ou s'arrêter (relisez le paragraphe e-1) ie il va se poser la question s'il doit continuer l'évaluation ou l'arrêter ? Ensuite on fait F9. w32dasm break (s'arrête) sur 0040E077.Comme il nous reste 12 jours pour évaluer CloneDVD si vous faites F8 (exécution pas à pas sans entrer dans les calls mais en les exécutant quand même) sur 0040E077 il saute vers 0040E152 et arrive sur continue (logique !) (relisez le paragraphe e-1 si vous n'avez pas compris). Si vous faites F8 plusieurs fois vous passez sur * Possible StringData Ref from Data Obj ->"%1 is not registered, you have " Vous arrivez en continuant les F8 sur :0040E262 E8A672FFFF call 0040550D Là le nag se lance si vous faites 1 fois F8. Vous terminez la session de debugging par CTRL T et vous en relancez un nouvelle session de debugging de _CloneDVD2.exe avec CTRL L et vous mettez avec F2 un bp sur la ligne d'adresse 0040E262.Vous lancez le programme dans le debugger avec F9.w32dasm break sur 0040E262.Vous faites F7 pour descendre dans le call et voir ce qu'il y a dedans.
A la vue du code on ne peut pas mettre un ret en 0040550D pour terminer l'exécution du call amorcé en 0040E262 et empêcher l'appel au nag. En effet si vous allez voir aux adresses 0040DE62 , :0040DFD0 , :0040E262 , :0044E905 , :004503E3 vous avez à chaque fois le chargement d'un message affiché par l'application par exemple à l'adresse 0040DE62 vous avez un peu plus haut "To use %1, you need to exchange your serial code with an online key.".Si on met un ret en 0040550D 4 messages de l'application d'origine auront disparus. Ce n'est pas ce qu'on veut nous on veut juste annuler le nag d'ouverture. Conclusion : comme je n'ai pas les moyens de tester plus en détail le logiciel (je n'ai pas de graveur de DVD ni de DVD) je suggère de nopper le call en 0040E262 ie :0040E262 E8A672FFFF call 0040550D L'offset correspondant à l'adresse 0040E262 et donné par w32dasm est D862.On charge dans winhex la copie de _CloneDVD2.exe et on fait ALT G -> D862. On écrit 9090909090. On teste et le nag a disparu.
e-3/ Retrait du "Version d'évaluation non enregistrée" dans le menu A propos Dans les string data reference on voit la chaîne "Unregistered evaluation version!". Si on clique dessus on arrive à un seul endroit dans le code :
On voit en 0045763A un saut conditionnel vers "Unregistered evaluation version!" suivi d'un passage sur "You have %1 of %2 days left to evaluate %3" et en 004576B1 un saut par dessus ces 2 messages.C'est ce qu'on veut non ? On annule le saut en 0045763A comme ça en 004576B1 on évite les 2 messages. On remplace dans copie de _CloneDVD2.exe ouvert dans winhex le code hexédécimal en rouge à l'offset 56C3A (faites dans winhex ALT G ->56C3A) :0045763A 757A jne 004576B6 On enregistre et on lance copie de _CloneDVD2.exe on.plus de version d'évaluation ni de décompte des jours restants pour l'évaluation dans le menu A propos.
e-4/ Retrait du "unregistred" Si on continue la fouille dans les string data references on voit la chaîne "unregistred"
Terminons dans w32dasm la session courante de debugging avec CTRL T et réouvrons en une nouvelle avec la commande CTRL L ( _CloneDVD2.exe au prélable désassemblé dans w32dasm). Si un pose un bp sur la ligne d'adresse 0040C485 suivi d'un F9 pour démarrer _CloneDVD2.exe on voit que cette ligne n'est pas utlisée au lancement de _CloneDVD2.exe. En effet malgré le bp posé w32dasm ne s'arrête pas dessus au moment où le programme s'exécute. Par mesure de sécurité on va quand même chercher à éviter le unregistered en forçant le saut de 0040C485 vers 0040C4AD Pour cela dans on va dans winhex et on ouvre copie de _CloneDVD2.exe et on se positionne par ALT G-> BA85 à l'offset BA85 et on remplace le code en rouge suivant : :0040C485 7426 je 0040C4AD On enregistre ensuite la modification par CTRL S dans winhex.
e-5/ Bonus : retrait du message "Veuillez ne pas utiliser ce logiciel pour effectuer des copie illégales ..." Quand on va dans la le menu A propos on a un message nous disant "Veuillez ne pas utiliser ce logiciel pour effectuer des copies illégales de DVD protégés par les droits d'auteurs". Comme ces derniers temps c'est une phrase qui revient un peu trop souvent à mon goût dans les médias avec la croisade menée par les maisons du film contre les téléchargements pirates on va s'occuper de la supprimer. Pourquoi suppprimer cette phrase? Parceque si on fait les modifications énoncées dans le paragraphe e-3 sur la chaîne "Unregistered evaluation version!" cette phrase sur les copie illégales de DVD reste toujours dans le logiciel dans le menu A propos. Dans le code désassemblé de _CloneDVD2.exe si vous faites une recherche vous trouvez cette phrase sous la traduction "Please do not use this software to make illegal copies of copyrighted DVDs.".Voici l'adresse (en bleu) où le message est appelé par le programme :
Le message à supprimer se trouve à l'adresse 006F9D50. Comment est ce que je sais ça ? Eh bien dans w32dasm si je fais CTRL T (au cas où une session de debbuging est en cours) et si je relance une nouvelle session de debugging par CTRL L de _CloneDVD2.exe (au prélable désassemblé dans w32dasm) et que je met un bp sur la ligne d'adresse 00463F60 (selectionnez la ligne puis F2 dessus) suivi d'un F9 (pour lancer le debugging) j'observe que w32dasm break (vous entendez un bing). Il est arrêté sur la ligne d'adresse 00463F60 que le programme _CloneDVD2.exe a cherché à exécuter. On va alors dans la grande fenêtre du debugger (celle qui s'était ouverte quand on avait fait CTRL L). On tape en dessous de User Addr 1 l'adresse 006F9D50 et on voit le contenu de cette adresse au centre de la grande fenêtre du debugger en cliquant sur le bouton UA1 (juste à droite de User Addr 1). Voici une partie de ce que l'on y voit : [006F9D50] - 61656c50 Plea C'est bien le message à supprimer.Pour faire diparaître le message il n' y donc juste besoin de mettre une fausse adresse à la place de 006F9D50. Par exemple on peut faire le changement suivant. On va mettre "enregistré à" la place de "Veuillez ne pas utiliser ce logiciel pour effectuer des copies illégales de DVD protégés par les droits d'auteurs". Le "enregistré à" ça correspond au "registered to". Il suffit donc de remplacer l'adresse 006F9D50 pas l'adresse 006F9D9C.
On fait donc dans winhex par la commande ALT G -> 63560 le changement suivant (on a d'abord ouvert dans winhex copie de _CloneDVD2.exe et on ne change que le code hexadécimal en rouge) :00463F60 68509D6F00 push 006F9D50 On enregistre et on relance copie de _CloneDVD2.exe. On est bien enregistré dans le menu A propos ... Encore un dernier point si vous voulez mettre votre nom par exemple "Enregistré à Pifoman". Vous retourner dans winhex et faites une recherche dans copie de _CloneDVD2.exe sur l'expression "registered to" par CTRL F (ne cochez pas l'option jeu de caractères unicode). Vous arrivez à l'offset 2F779C.Vous écrivez "Enregistré à " à la place de "Registered to:" suivi de votre nom lettre par lettre dans la 3 ième colonne et vous terminez par le code 00 dans la 2 ième colonne de winhex. (Le 00 est interprété comme une fin de chaîne par les programmes).
On a patché notre programme à 5 endroits en s'appuyant sur les string data references. Notre exécutable décompressé fait 4.35 Mo. Il est trop gros pour être distribué comme ça on va le compresser avec un autre packer d'exécutable très connu UPX (Universal Packer for eXecutables). On va sur http://www.exetools.com/compressors.htm et on prend la dernière version du packer la version 0.20 au 18/12/2004 pour windows (118 Ko). On met Copie de _CloneDVD2.exe et upx.exe sur le bureau et on crée sur le bureau un fichier nommé compresser.bat contenant la ligne de commande suivante : upx -9 --force -oCloneDVD2.exe "copie de _CloneDVD2.exe" On double clique sur compresser.bat et on attend un peu et on obtient CloneDVD2.exe en sortie qui est compressé (il ne fait que 1.91 Mo). On a utilisé l'option force car UPX a détecté des traces de l'ancien packer Asprotect.
Dans ce cours vous avez appris à craquer un logiciel protégé par un packer.Ce cours a été également l'occasion de découvrir de nouveaux logiciels comme PEiD, ProcDump et Stripper et d'utiliser un packer : UPX pour compresser et distribuer plus facilement notre exécutable final sur internet. La réelle difficulté pour craquer CloneDVD2 est de trouver l'unpacker qui décompresse l'exécutable CLONEDVD2.exe qui est packé avec le logiciel Asprotect 1.23 RC4. L'unpacking ici nous a été simplifiée grâce à Stripper qui a fait le travail pour nous. Le craquage de CloneDVD quant à lui ne présente pas beaucoup de difficultés. Avec un peu d'expérience en moins de 10 minutes vous avez retiré toutes les protections. On comprend mieux pourquoi ils ont choisi de packer leur programme chez slysoft ...
Bonne nuit à tous. ![]()
|