ú ú - -- A C i D B U R N - P R O D U C T i O N S -- - Ü ú ú ° Ü ° Ü Ü Ü ° Ü° ° Ü Ü ÞÛÜ Ü ° ÜÛÛ²ßßÛÛÛÝܲÛßßßÛÛÛÝÞÛÝÞÛÛÛßßßÛ²ÜÞ²ÛÛßßÛÛÛܰܲÛÝ ßÜ ÞÛÛÛßßÛÛÛÜ°²ÛÛÜ ÞÛ²Ü ÛÛÛÝ °²ÛÛÝÛÛÛ °ßßßß ßßß ÛÛÛ ° ÛÛÛÝÛÛÛ ÞÛÛ²°²ÛÛ ° ÛÛÝÞÛÛÛÝ ÞÛÛ² ÛÛÛßÛÜÛÛÛÝ ²ÛÛßßßÛÛÛÝÛÛÛÝ° °²ÛÝÛÛÛÝÛÛÛ ° ÛÛÛÝÛÛÛßßßÛÛÜÞÛÛÛ ° ÛÛÛÞÛÛÛßß²ÛÛÜ ÛÛÛÝ ßÛÛÛÝ °²ÛÛÝ° ÛÛÛ ²ÛÛÝ° ÛÛÛÝÛÛÛ°²ÛÛ °ÞÛÛÛÝÛÛÛÝ ÜÛÛÛÞÛÛÛÝ°°²ÛÛ°²ÛÛÝ ÞÛÛÛÝÛÛÛÝ° ÛÛÛÜ ÞÛÛÛÝ° ÛÛÛÞÛÛÛÝ° ÛÛÛÞÛÛ²ÞÛÛÛ °ÞÛÛÛ°²ÛÛÝ°ÞÛÛÛÞÛÛÛÝ ÞÛÛÛÝÛÛÛÝ° ÛÛÛÝÛÛÛÝ° ÛÛ²ßÜ ÞÛÛÛÝ° ÛÛÛÞÛÛÛÝ° ÛÛÛÞÛÛ²ÞÛÛÛ °ÞÛÛÛÞÛÛÛ °ÞÛÛÛÞÛÛÛÝ ÞÛÛÛÝÛÛÛÝ°°²ÛÛ ²ÛÛÝ° ÛÛÝ ÞÛÛ² °ÞÛ۲߱ÛÛÜÜÜÛÛÛ±ÛÛ²ÞÛÛÛÜÜÛ۱߲ÛÛÛÜÜÛÛÛÛßÛÛÛÛܲÛÛÛß²Û±Ü ÞÛß °²ÛÛÛ ÞÛß ß ß° ß ß ß ß ß ß ° ß ß ß ú ú - -- A C i D B U R N - P R O D U C T i O N S -- - ú ú SRT - CRO Protection Commerciale: Unpacker un exécutable protegé par Armadillo v1.75a Tutoriel par ACiD BuRN [Immortal Descendants] (05 Novembre 1999) Tout d'abord voici une description d'Armadillo trouvée sur leur site officiel: ------------------------------------------------------------------------------------------- Armadillo is a powerful software protection system. It wraps around your program like an armored shell, defending your work from pirates and program crackers with state-of-the-art encryption, data compression, and other security features. It also allows you to add a complete software protection and registration-key system to your existing programs in five minutes or less, with no changes to your program's code! And it works with any language that produces a 32-bit Windows EXE file. ..... Armadillo modifies your program's EXE file, using a key you select and state-of-the-art compression and encryption tools to foil any attack relying on a decompiler -- all they can decompile is the code for the Armadillo decompressor itself, not your program. Your program is decrypted in memory when it is run, after Armadillo is satisfied that it's safe to do so and that the user has a valid license (more on licenses below). This, along with some advanced snoop-detection functions, prevents most patch/bypass attacks -- it would require far more knowledge (and a great deal more work) to patch your program while it's encrypted. ------------------------------------------------------------------------------------------- ça a l'air cool ;P (du moins ça avait heheheh) 0) Introduction: Bon, en passant sur le site officiel ou on peut downloader la version shareware d'Armadillo, j'ai vu toutes les options possibles de ce petit truc et je me suis dis que j'allais voir ça d'un peu plus près... Donc, après l'avoir installé, j'ai pris calc.exe et je l'ai crypté avec les options par défauts, pour voir un peu la bête ;p 1) Lancer l'exécutable avec Soft-ice chargé: Comme vous pouvez vous en douter, les exécutables protégés disposent d'un anti Soft-ice. Il y a en fait 3 détections : - la première est très connue meltice.(Createfila \\.\SICE, \\.\NTICE and \\.\SIWDEBUG) - la seconde est connue sous le nom de:IsDebuggerPresent. On trouve l'appel à l'API getprocaddress. - et pour finir, c'est un petit int3h :p Comment bypasser toutes ces conneries ?? Il va falloir lancer l'exécutable avec le loader de Soft-ice. Donc chargez le fichier avec le loader, et lancez le calc.exe. Soft-ice doit revenir et vous devez sûrement voir des petits: INVALID A ce moment là, mettez votre BPX Createfilea, pressez F5 3 fois et vous arrivez sur les checks, qui ressemblent à ça: 025F:10003895 FF1520A00010 CALL [KERNEL32!CreateFileA] 025F:1000389B 83F8FF CMP EAX,-01 025F:1000389E 7409 JZ 100038A9 <-- ici changez le en jmp 100038A9 025F:100038A0 50 PUSH EAX 025F:100038A1 FF1538A00010 CALL [KERNEL32!CloseHandle] 025F:100038A7 EB0B JMP 100038B4 025F:100038A9 FF1544A00010 CALL [KERNEL32!GetLastError] 025F:100038AF 83F802 CMP EAX,02 025F:100038B2 7404 JZ 100038B8 025F:100038B4 C645FF01 MOV BYTE PTR [EBP-01],01 025F:100038B8 8B4604 MOV EAX,[ESI+04] Il faut changer le JZ 100038A9 en JMP 100038A9. Pour cela il suffit de se positionner à la ligne du JZ, et ensuite tapez sous Soft-ice: A "presser entrée" JMP 100038A9 "presser entrée" "presser échap" et voilà, la ligne est devenue un jump, maintenant on trace avec F10 et on exécute le CALL [KERNEL32!GetLastError] , après l'avoir passé on voit un CMP EAX,2. En gros il faut que EAX = 2 pour que tout soit OK, sinon c'est pas bon.. Regardez dans EAX, vous verrez EAX = 2 donc c'est bon. Pressez F5, on retrouve la même chose, comparaison EAX, 2, c'est toujours bon donc tous est OK. On presse une dernière fois F5 pour le dernier check, mais cette fois au moment du CMP EAX,2 on voit EAX = 32. Ce n'est donc pas bon, il faut mettre EAX à 2. Pour cela dans Soft-ice, tapes: R EAX 2 et voilà EAX passe à 2, la comparaison EAX à 2 est donc bonne, tout est OK. Une fois ceci fait, on va s'occuper du 2ème check de Soft-ice. Il se sert de GetProcAddress, donc mettez un breakpoint dessus, et pressez F5. Il suffit de presser une fois F12 pour sortir du call, et vous devez rencontrer quelque chose comme ça: 025F:XXXXXXXX XXXXXXXXXXXX CALL [KERNEL32!GetProcAddress] 025F:100038ED 3BC3 CMP EAX,EBX 025F:100038EF 740A JZ 100038FB <--- faites un R FL Z 025F:100038F1 FFD0 CALL EAX 025F:100038F3 85C0 TEST EAX,EAX 025F:100038F5 7404 JZ 100038FB 025F:100038F7 C645FF01 MOV BYTE PTR [EBP-01],01 025F:100038FB 56 PUSH ESI 025F:100038FC FF1548A00010 CALL [KERNEL32!FreeLibrary] Vous voyez sûrement CMP EAX,EBX et le saut conditionnel juste après. Ici il faut inverser le Zero Flag et le programme va pourvoir s'exécuter normalement... Pour inverser le Zero Flag, il suffit de taper: R FL Z sous Soft-ice une fois que vous êtes à la bonne ligne. A partir de maintenant, il suffit de tracer avec F10, comme un fou, et nous allons voir le fameux int3h arriver ;) Mais avant, étant donné que la version que j'ai utilisé de Armadillo n'est pas enregistrée (pas encore ;p ) nous allons voir une messagebox qui nous le rappelle. Donc cliquez sur le bouton OK, et continuez à tracer.. Cette nag screen est très simple à cracker, il suffit de mettre un ret dans le call et c'est fini, mais nous allons virer toute cette merde du fichier exécutable, donc en s'en tape ! Mais, je ne peux m'empêcher de faire une petite remarque: -------Remarque:----------------------------------------------------------------------------- Comme vous l'avez sûrement remarqué, il est possible de protéger l'exe avec un name / serial au démarrage, ce qui peut être assez chiant à virer, car nous voulons exécuter le programme en mémoire... Je vous raconte ça, car le fichier que nous sommes en train d'étudier ne comporte pas de name / serial, j'ai packé le fichier avec les options de bases, mais en voulant cracker le nag screen, je me suis trompé de call, je suis entré dans le mauvais et j'ai mis un RET, sur un push EDI, il me semble, bref la première instruction. Ensuite, je suis sorti automatiquement du call (RET) et j'ai tracé avec F10. Tout à coup, une dialog box est apparue me demandant un name / serial !! What the fuck ? c'est quoi ce bordel, cet Armadillo me semble bizarre, mais vraiment!! Il semblerait que quoi que l'on fasse, l'exe contient la vérification nom et code. Il me semble bizarre, mais j'en conclus que ça doit être hyper simple à virer, juste un call à modifier, pour ne pas afficher ça, et on se retrouverais avec un exe crypté de base... Je n'ai pas eu le temps de bien regarder, mais ça peut être intéressant. Tout me pousse à dire que ces protections dites commerciales sont vraiment stupides... -------Fin des Remarques:--------------------------------------------------------------------- Bref, revenons à nos moutons, hehe On continue donc de tracer avec F10 sans réfléchir, il faut juste contrôler le code, on cherche un "int3". Après avoir tracé, on trouve ceci: 025F:00402241 2401 AND AL,01 025F:00402243 8885B8FEFFFF MOV [EBP-0148],AL 025F:00402249 BA6D447546 MOV EDX,4675446D 025F:0040224E 8995B0FEFFFF MOV [EBP-0150],EDX 025F:00402254 C785C4FEFFFF260C3604MOV DWORD PTR [EBP-013C],04360C26 025F:0040225E 895DFC MOV [EBP-04],EBX 025F:00402261 8B85C4FEFFFF MOV EAX,[EBP-013C] 025F:00402267 3385B0FEFFFF XOR EAX,[EBP-0150] 025F:0040226D 8BE8 MOV EBP,EAX 025F:0040226F B804000000 MOV EAX,00000004 025F:00402274 CC INT 3 <----- le chti 025F:00402275 3115148D4000 XOR [00408D14],EDX 025F:0040227B A180804000 MOV EAX,[00408080] 025F:00402280 310584804000 XOR [00408084],EAX 025F:00402286 834DFCFF OR DWORD PTR [EBP-04],-01 025F:0040228A EB18 JMP 004022A4 La protection est vraiment semblable à la 1.73. Les Gars de chez Armadillo se sont pas trop foulés pour une protection soit disant Très fiable. Bref, vous avez sûrement remarqué le "MOV EAX, 00000004". Pour passer ce contrôle, il suffit de se mettre à la ligne du MOV. Dans Soft-ice , tapez: A "entrée" JMP 0 "entrée" "échap" Voilà, nous venons de remplacer le mov eax,4 en un jmp 0. Ceci va provoquer une exception et le programme va croire que le debugger (Soft-ice) n'est pas chargé, donc ce qui va s'occuper de l'exception et le programme se lance!! Nous avons donc calc.exe chargé, on peut s'en servir normalement. 2) Virer complètement Armadillo de l'exécutable protégé: A) Récupérer et dumper ce dont nous avons besoin: C'est cette partie qui m'a posée le plus de prob, car j'avais une erreur au moment de reconstruire un exécutable valide ;( J'ai recommencé plusieurs fois, et voilà comment je me suis pris. (Ayant demandé de l'aide sur le forum de l'ATP team, j'ai donc lu leur cours, ma méthode semble être celle qu'utilise Alsindor, mais Artex utilise une approche différente, donc je vous recommande de lire leur superbe cours sur MP3Wizard V1.2 par Psyché, Artex et Alsindor... J'ai trouvé mon erreur de toute façon, je n'utilisais pas la bonne taille de section ".text". Leur cours est basé sur Armadillo 1.0 je crois) Donc, vous avez votre programme qui est lancé, si vous regardez dans le répertoire courant (où a été lancé le fichier exe), on trouve un fichier temporaire. Copiez ce fichier, il va nous servir. Ensuite, lancez Procdump et regardez dans la liste des process, vous devez voir le fichier calc.exe, mais aussi le temporaire. Faites un click droit dessus (on veut dumper le fichier TEMP !! pas l'exe) et faites un dump full. Nous avons donc une fichier exécutable sur le disque, c'est le dump, et nous avons encore le fichier temp récupéré dans le répertoire où a été lancé le programme crypté. B) Faire un exécutable qui marche, et qui n'a plus de Armadillo ;) Si vous renommez le fichier temporaire en exécutable et que vous l'exécutez il va crasher! C'est normal car dans la première Section, on se rend compte qu'elle est pleine de "XX" Hmm, si on lance le fichier dumpé, il ne marche pas non plus et crash comme un goret ;) GogogadgetauProcdump lol , vous l'avez compris lancez Procdump et servez vous du PE editor pour éditer le fichier dump, vous devez voir les sections du fichier. Il faut regarder la première ! Pour ma part, j'avais ceci: - pour la section ".text" : Virtual Offset: 00001000 Raw Size: 11A0E Raw Offset: 1000 Ok, gardez ces chiffres en tête nous allons y revenir!! Avec Procdump, click droit sur la section "text" et faites saves to file pour dumper le fichier sur le disque ! (exemple: text.bin). Car cette section est complètement décryptée tandis que le fichier temporaire contient des XX. En effet Armadillo ré-"écrit" la section à la volée .. Une fois le fichier dumpé sur le disque, ouvrez votre fichier exe (le fichier Temp renommé) avec un éditeur hexadécimal, j'utilise Hexworkshop pour cela. Ouvrez également la section que vous avez dumpé. Maintenant dans Hexworkshop, pressez alt+f5, entrez le Raw offset de la section que vous voulez importer. Ici : 1000 et cliquez sur ok. Allez dans le menu Edit, et cliquez sur "select block", entrez la longeur (size) de la section, ici : 11A0E... Regardez le fichier ouvert (text.bin) et pressez 'ctrl+a' pour tout sélectionner.. Copiez tout ça avec 'ctrl+c'. Retournez dans la fenêtre principale de l'exécutable dans Hexworkshop (celui que vous avez renommé l'ex-fichier temporaire donc), et collez ce que vous venez de copier dans le presse papier, faites: 'ctrl+v' ou menu Edit et paste. Enregistrez votre fichier, et vous avez maintenant une section '.text' valable qui ne contient donc plus de "XX" hehe... Lancez votre exécutable et oh !! Miracle cela marche !! Mais pour être sûr que le fichier marche bien, on peut reconstruire le pe avec Procdump, cela ne coûte rien de toutes manière : - Lancez Procdump (Merci G-RoM :) allez dans les Options et sélectionnez: [X]Recompute Object Size [X]Optmize PE Structure [X] Use actual import infos et cliquer sur OK Cliquez sur Rebuild PE, et cherchez notre nouveau fichier (calc_finis.exe pour nous) Procdump nous fait une valide import table et notre exécutable est désormais plus sûr ;o) Voilà !! Le cours est terminé, mais si vous avez une question ou un commentaire mailez moi!! Acid2600@hotmail.com ou ACiD_BuRN@nema.com Tout mes tuts sont ici : http://acidburn2000.cjb.net/ 3) Les mots de la fin: Greetings: group greetings: ID - ECLiPSE - CiA - ODT - EXEC - TiTaNe - PWA - PC - UCF- CORE - CC Also greetingz to: (no specific order) R!SC, ^INFeRNo^, AB4DS, Cyber Blade, Klefz, , Volatility, TORN@DO, T4D Jeff, [Virus], JaNe , Appbusta , Duelist , tKC , BuLLeT , Lucifer48 , MiZ , DnNuke , Bjanes , Skymarshall , afkayas , elmopio , SiFLyiNG , Fire Worx , CrackZ , neural_en , WarezPup , _y , SiONIDE , SKORPIEN Lazarus , Eternal_Bliss , Magic Raphoun , DEZM , Bisoux , Carpathia , K17 , theMc , noos , Xmen , TeeJi , JB007 , Arobas , T0AD ,ytc , Kwai_lo , Killer_3K, TaMaMBoLo , gizmo , Gota , ExtaBrain , Alpine , WarezPup, zoltan , [yAtes], TarGon , Icecream , Punkguy2 , Sortof, TRDdonjuan, Lord Soth, Judged, G-Rom, Quantico, Christal, psike, Leo0n, Albator, +Spath, +Frog's Print, toutim ... et tous ceux que je connais mais dont j'ai oublié les nicks, désolé ;p Copyright (c) ACiD BuRN and the Immortal Descendants. http://www.immortaldescendants.com/