You are on page 1of 56
Haar ae Ree Ne eT ea Pert FEVEFSING ctows si atinite Serials, checksums, PE Header, dumpers, packers, ELC ey Ee Cty TT ety WTC UCM MULTE IDA/OllyDBG/WDasm Quelle influence sur la secu informatique ? Hackademy Hors série n°2 Dans ce numéro nous traitons du Cracking et du Reversing. Pourquoi ? Quel est lintérét de savoir cracker et mieux, savoir reverser ? Si vous savez ce quiest le Cracking (en gros modifier un programme afin de ne pas avoir 3 le payer pour utiliser), savez vous vraiment ce quiest le Reversing ? Si le Cracking - qui n'est qu'un sous-domaine minime du Reversing - n'apporte pas grand chose du point de vue de la comprehension de votre OS, le Reversing consiste 4 « retourner » un programme afin de analyser. Cela peut ren- dre de multiples besoins : on peut modifier les fonctionnali- tés d'un programme, on peut analyser le fonctionnement d'un programme dont on n'a pas les sources et surtout. le Reversing permet une meilleur compréhension de votre sys- teme d'exploitation. En faisant du reversing vous compren- drez mieux le fonctionnement d'un exécutable, les relations qui existent entre cet exécutable, les DLL et Windows (le reversing peut aussi s'appliquer & Linux) En poursuivant cette logique, on arrive a des points trés importants : le Reversing permet d'analyser le fonctionne- ment de programmes propriétaires, d'analyser un pro- gramme suspect et donc (le rapport est implicite) de pouvoir appréhender des points stratégiques de la sécurité informati- que comme l'njection de processus, le détournement d'API (API Hooking) la création de RootKit et beaucoup autre domaines trés important pour la sécurité. Imaginez en effet les dommages causés 4 votre firewall si f'on change des régles essentielles la sécurité de votre réseau ou si 'on fait disparaitre les alertes de votre antivirus Ceci dit pour arriver un niveau correct, voire bon en Reversing, commencer par le Cracking est approche la plus commune et a plus pédagogique du point de vue de lévolu- tion des connaissances La plupart des groupes qui font du Reversing ont commencé en faisant du Cracking Et cola en partie parce qu'étre membre dune équipe permet de partager ses connaissances, chacun alors béné- ficie de fapport des un et des autres. aspect illegal de ces acti- vités n'est somme toute trés secondaire pour ces personnes. Nous vous rappelons que cracker un logiciel est illé- gal en France et dans la plupart des pays, méme si on ne s'en sert pas, Si c'est pour s'en servir sans payer, c'est encore pire : utilisez des logiciels libres, plutét | Demandez les codes source complets sur he RM eagle http://forum.thehackademy.net Partie 1 : Introduction Apprendre assembleur Pa La hablesse des protections par s ps Liens utiles p.13Cracker les protections par checksum pd PE Header, incontournable en cracking Windows plz Dumper un exe avec SoftICE pg Partie 2 : Reversing Programmer un packer p22 Patcher un programme sans les sources pt Déjouer IDA/OlyDBG/WDasm p34 Injex : Larme absolue du reverser pag Partie 3 : Au dela du reversing Llesentiel de I'API Hooking p52 Analyser un virus Windows sur Linux P56 eae or Tae a ee Ya Cs Rédaction : Silkscalp Cone ne tor oor erect Pe eae Directeur de publication : Olivier Spinelli Imprimé en France par roto champagne Tg PSS eel jous les constructeurs de matérie! fournissent en abondance une documentation gratuite et détaillée sur le fonctionne- ment de leurs composants et leurs vecteurs de pro- grammation. Il est dans Tin- | térét des fabricants que tout individu ou société puisse librement et indépendam- ment de toute contrainte développer des applications et des supports logiciels (érivers) pour un produie particulier. Le matériel se vend trés souvent grace aux logiciels qui suivent der- rire, on avait bien compris depuis les années 80 (voir le film Pirates de la Silicon Valley).Ainsi Windows rest- il quun produit spécifique aux processeurs Intel, ce qui nest pas sans conséquences sur les ventes de ce dernier. Grice aux efforts du géant américain — et nous devons le reconnaitre. - ces livres sone un must-have. Ils sont bien structurés et chairs pour des personnes de niveau moyen, ce. qui est rare pour des. documenta: tions s'adressant & des Ingé- nieurs. ‘Auparavant envoyés gratui- tement par la’ poste, les documents sont. aud= jourd'nui disponibles sur’ le site officiel du constructeur a Tadresse heep://www.intel.com/des~ ign/pentium4/menualslindex _newhtm. Des documenta- Tons spéciiques aux aucres familles de processeurs que NA-32 constituent. égale- ment dés ouvrages particu: liers | Mais ‘ce volume ne: déctie Il existe de nombreux ouvrages numériques et papier sur le langage assembleur, mais il en est que vous vous devez absolument constructeur Intel de connaitre. Il s‘'agit des livres du Cet article reprend des aspects capitaux de la programmation en langage assembleur. LDS/LESILFSILGSILSS—Load Far Pointer Traraction Los rien te-16 Los ra2at6-22 LSS niga 616 Ls cam 1632 Les 164616 Les ze 1632 OF 841 LFS 160 1646 OF 84 ir Urs 2m 1632 Los 6a s646 OF 85 193 13201632 Description Deseription aad 5:16 a2 tar pointer tom memory. Lead 05:22 wth tar pointer tom memory. Lead 58:16 wan tr pointer tom memory. sad 85:42 wah far poieter fom memory. Lead 5:16 wih fr poitar tom memory. Lead £5102 with fr pointer tom memory. Lead F516 wih tr pointer fom memory. Lead F582 wi fr pointer fom memory. Load GS:716 wth far pointer fom memory Lead 05:02 with far poitee tom memory. LLonds- far pointer (segment selector and offset from the second operand (source operand) into Erat: description dune instruction danse Vol 2A del. = Le volume un de Ia collec- tion « 1A-32 Intel Architecture Software Developer's Manual > siintitule Basic ‘Architecture. Cet ouvrage st essentiel. Il aborde tou- tes, les) caractéristiques. du fonctionnementidu' proces- seur lorsque cAlukci doit ‘exéeuter un programme. On Yaborde le fonctioniement ‘des registres, de la stack (Pile), des formats de don- fiées, des instructions, tc, pas les instructions du pro- esse il ne fat que les pré- senter + Le deux volumes suivants (Vol. 2A, et Vol2B) sont. tes, ouvrages décrivant exhaus- tivement fensemble des ins- tructions qulexécite le pro- cesseur, Le volume). 2A écrit toutes les® instruc- tions de A 4M, et le volume | processeurs d'intel, il existe 2B les instructions de Na Z. | des livres sur la programma = Le dernier volume, System | tion assembleur qui sont Programming Guide décrit | spécifiques aux systémes environnement d'exécution | d'exploitation. ll existe de des systémes d'exploitation, | bons recueils sur la pro- la fagon. de programmer | grammation en assembleur avec les registres spécifiques | pour Windows, en voici un du processeur et s'adresse | pour démarrer : aux développeurs OS. | = Assembleur x86 par Kip faut déja savoir programmer | Irvine aux _éditions ‘en assembleur pour se pen- | CampusPress (en francais). ‘cher sur ce dernier ouvrage. ‘Crest écrit en anglais, heu- | Vous vous demandez si la eusement non liteéraire, | lecture de ces ouvrages (au juste technique (tentez de | moins du premier) suffic & lire V'encadré exemple pour permettre de se mettre vous faire une idée). immédiatement a V'assem- bleur ? Malheureusement, Yous voulez savoir sil est | non. On ne vous Favait pas possible d'en apprendre | dit, personne ne vous Tavait autant avec de la documen- | dit, mais connaitre le langage tation sur Internet ou dans | assembleur ne suffit pas Ia liteérature francophone ?/| pour programmer en Non, mais en dehors des | assembleur. ‘ouvrages spécifiques sur les fae Linitiation En assembleur, evaluation de conditions ne se fait pas de la méme facon que'dans les autres langages a aide de mots clés tels “if. else.” ces mots-clefs n'étant leurs qu'une représentation simplifige de ce qui se passe en assembleur. Ce que l'on évalue, ce sont les registres, On effectue une comparai son entre deux valeurs (en registre ou en mémoire, mais jamais de mémoire a mémoire) et du résultat de cette comparaison va dépendre la suite de rexécu- tion du programme. Comparer deux registres, cest les soustraire Tun a autre et analyser le résul- tat. Par exemple si 'on come pare EAX avec une donnée en mémoire, alors on regar- dera si le résultat est infé- rieur, €gal, ou supérieur a zéro. Prenez le registre EFLAGS. Les bits qui le composent : représente état du CPU (ou du processus actuelle- ment exécuté). L'un deux ; (ZF) sercd indiquer si le résultat du dernier calcul est 4 Les sauts conditionnels sont la base de tout algorithme bas niveau. Cette courte introduction sur leur utilisa- tion en assembleur est nécessaire pour la suite. égal ow’ non a 2éro, Crest notamment sur ce flag (et également SF) que s'ap- puient les instructions de gestion des conditions CMP est la principale ins- truction permettant de faire des comparaisons, et Ten semble des instructions de saut dites “Jcc” sont celles permettant a la fois d'éva- luer le résultat de la compa- raison et de rediriger 'exé- ution du programme a un ‘endroit voulu."Jcc” n'est pas lune instruction en soi comme le serait JMP.c'est un diminutif-désignant-fensem- ble des instructions de sauts conditionnels ("jump if Condition is Met”) Un exemple Les instructions de saues conditionnels sont’ nom- brouses. Avant d'en aborder les principales, un’ exemple de code exploitant une ins- truction de saut condition- nel devrait vous éclairer sur la facon de les utiliser 31 30 20 28 27 26 25 24 23 22 21 20 10 18 17 16 ofo}a} tyr viv alv|R plele|M|E : 1914131211109 876543210 1 Nn] © Jojoji}t|s|z] jal iP} 4tc lr) e lFlelelelejel°je (QF | ye t Eras aE ENSUE RRR eee eee Pour bien réaliser un saut conditionnel on doit effec ‘tuer une. comparaison: et, immédiatement aprés, réali- ser le saut : Dans cet exemple,la compa- raison de EAX avec 7778 par CMP impose au proces# seur le calcul : EAX=97778. Le résultat étant,inférieur'a 0, cela signifierquie EAX est inférieur, 7778 (eviden- ment nous avons) mis. la valeur 7777 © dedans). instruction JB sert jaste- ment & évaluer le résultat, JB Gump if Below) fait bou- cler lé programme & Finfini fen sautant 4 Iendroit spéci- {ié par “boucle”, Dans le cas. présent, le programme fait tune bouele infinie parce que 7771 est inférieve & 7778, Si Fon avait mis une valeur supérieure 7778 dans le registre EAX, exécution se serait’ poursuivie aprés JB sansiréalisation de saut. Attention 3 la symtaxe eri. ‘ture avec CMP ! CMP soustrat (en symtaxe Intel) le second ‘opérande du premier. Notez également quion ne peut met- ‘tre une valeur immédiate (7778 dans le cas présent) quien seconde opérande (4 droite) Des erreurs peuvent survenir lorsquion ne prend pas en compte ces deux points Les principales instructions de saut Jee Voici les principales instrue- tions de saut sur conditions - JA :Jump if Above (saut si supérieur), - JNA : Jump if Not Above (saut si non supérieur), = JAE : Jump if Above or Equal (Saut_si supérieur ou égal), + JB: Jump if Below(saut si inférieur), = JNB jump if Not Below Gaur simon inférieur): + JBE : Jump if Below or Equal (saut si inférieur ou “egal. SJE: Jump if Equal (saut 51 egal), = JNE : Jump if Not Equal (saur si non égal). W existe plus d'une cinquan- ‘taine do variétés de saut, fmais leurs fonctions se recoupent. Faire un saut INAE (ump if Not Above or Equal -" saut si non supé- ricur ou égal 3”) revient faire un saut JB ump if Below -"'saucst inférieur 2"), strlen() est une fonetion de la librairie C qui prend en argument adresse d'une chaine de caractéres et retourne sa taille. A quoi bon utiliser la fonction strlen( si vous pouvez reco- der vous-méme cette fonc~ tion en assembleur ;-) ? En réalité est un exercice ins- tructif que de recoder des fonctions de ce type. La mesure de fa longueur lune chaine de caractéres est une procedure simple. Sachant que toute chaine de caractéres est terminée par tun octet nul (un octet égal a zéro), il suffit de la parcourir ‘octet par octet et de comp- ter le nombre doctets par- courus jusqu'a octet nul terminant la chai Nessayez pas de réécrire ce code directement :il sage dune fonction din programme et ron un programme eomplet, Syntaxe ATRTSyntaxe NasmSyntaxe Masmmy_strien: See Sane (bePeauy, beso) a Soh Les chaines de caractéres interviennent dans pratique- ment tous les éléments visibles d'une interface graphi- que ou non. Cet article montre comment on les mani- pule en assembleur. | pore aston eas Se oy Say Da oop ep La premiére partie du code (en bleu) sert 4 initialiser les,| données -nécessaires. a lz procédure de’ comprage. ‘Aprés ile prologue "mov | 8(éebp), esi" récupére adresse de la \chaine de caractéres dans le registre ESI. Ensuite le registre ECX | (le compteur) est mis a zéro. | Les deux premigres instruc | tions de fa boucle (violet) | récupérent le premier octet | de la chaine (notez qu'on ne récupére quun seul octet) | et le comparent & 0. Si'oc- | tet est nul, alors on saute & fa fin de la fonction, autre- ‘ment on incrémente ECX (le compteur) puis ESI (contenant adresse de la chaine, on va done un octet plus loin dans la chaine), Aprés quoi, on revient au début de la bout. Alafin de la boucle, le résul- tat dans ECX est transféré vers EAX puis on effectue Vépilogue et on retourne. L'amélioration du co Le code présenté jusque fa est assez fruste Il est possible dalléger sa taille et salisibilicé moyennant quelques techni ques de programmation et de nouvelles instructions. Par exemple, pourquol utliser Un prologue et un épilogue alors. que nous ne touchons pas @ la pile autrement que pour récupérer un argument 2 Crest certes une bonne hhabitude, mais on peut occa- sionnellement s'en passer. De méme, si on modifie quelques instructions, on pourrait alléger la taille du code compilé et sa vitesse 'exécution (quia son impor- tance lorsque le code fait des boucles). Cest le cas ici des | initialisation des compteurs ‘et de leur utilisation :"add $1, ‘%ecx", par exemple, est long a crire et prend plus de place une fois compile. ‘Cest_ également occasion de découvrir une instruc: tion complexe : LODSB. ‘Syntaxe AT&TSyntaxe NasmSyntaxe Masmmy strlen Dee ees ee cut a4 | "simples" (processeurs RISC), Les processeurs Intel Le code initial (en bleu) | ont un jeu dinstructions a la allégé de son prologue récu- | fois simples (MOV, PUSH, | pére adresse passée en | POR, etc.) et complexes | argument par ESP en la | (LODSB et LOOP en sont | stockant dans ESI. Pour opti- | deux exemples). misation, on initialise le | compteur ECX a zéro (taille | Voici un rappel utile sur initiale de la chaine) a laide | LODSB et ses dérivés dune soustraction. | = LODSB : charge un octet La boucle (en violet) com- | pointé par ESI, ajoute | a mence par linstruction spé- | ESI, stocke le résultat dans ale LODSB, LODSB (B pour | AL. Byte) prend un seul octet a | - LODSW : charge deux adresse enregistrée dans ESI | octets pointés par ESI, cet met le résultat dans lapar- | ajoute 2 a ESI, stocke le | | tie adéquate du registre EAX | résultat dans AX. :ALAprés quoi. ESI est incré- | - LODSD : charge quatre menté dun octet. octets pointés par ESI, LODSB nécessite doncquiun | ajoute 4 4 ESI, stocke le registre soit initialsé correc- | résultat dans EAX. tement (ESI) et effectue deux | Grice 4 ces instructions, on actions :la récupération dun | peut non seulement parcourir octet, linerémentation dun | des chaines mais également registre. Comme vous le | des tableaux de nombres. constater, dans la bouele, in- | crémentation manuelle que | LOOP nous falsions précédemment | LOOR contrairement 4 | | a disparue. Ine nous reste | LODSB,prend un paramécre. alors qu’a incrémenter le | Il sagit dune adresse (repré- compteur ECX avec INC | sentée dans votre code par (code optimise) tin label). LOOP fonctionne La comparaison de valeur | done en visuel comme JMPet (deAL avec zéro) n'a,elle,pas | fait sauter Texécution sur changé.La boucle se termine | ladresse spécfée. toujours de fagon similire & | Mais LOOR,contrairement a précédemment (en rouge). | JMRest conditionnel il vérifie | 3 ECK em gala Dice ai oud, Lamélioration —_| du co | La famille LODS | nieffectue pas le saut. Sinon, i décrémente le registre ECX de | et fait sauter lexécution | a Tendroit spéciié. ECX ne Il existe différents types de | prend pas son nom de comp- processeurs dont les jeux | teur pour rien.. | instructions peuvent étre | On utiisera LOOP pour sim- tres changeants, On distin- | plifler la programmation et la gue notamment parmis les | lecture du code. C'est une instructions celles dias | ‘Retraction’ dei lorseufon "complexes" (processeurs | souhalte efectuer un nombre CISC) et les instructions | prédéfini d'actions. a Cee Cee oe eae 1) Introduction Définition : un keygen, ou keygenerator, est un petit programme qui utilise la routine de génération de serial du programme, afin de générer le serial correspon- dant 8 un nom d'utlisateur. Un keygen est donc spécif- que 4 un programme. Nous allons voir comment tun cracker peut réaliser un KeyGen, afin de comprendre comment s'en_ protéger. Pour cela, nous prendrons un exemple simple mais coneret : un crackme. Dans une premigre parte, nous ferons analyse du crackme, et en particulier de fa routine de génération du sri Pais, dans une deuxiéme par- tie, rice & cette analyse, nous allons coder un KeyGen. Outils: Un desassembleurs (option- nel): wdasm 8.93 (et ses patchs) ou bien IDA PRO, qui est beaucoup plus puls- sant selon moi, caril permet de renommer toutes les fonctions et les variables dans le programme. désas- semble (ce qui permet une tmeilleure comprehension, et méme de“ s'approprier le programme ”). Ces possi tés ne sont pas présentes dans Wdasm (Ref Misc. 14, article sur IDA), Un debogueur > jutiliserais OlyDbg I-10 avec des plugins afin de tracer fa routine de _genération du serial Le cracking est un excellent moyen d'aborder par la pratique les outils de deboguage et le langage assembleur. Dans cet article, nous nous intéressons a un exemple simple de protection par numéro de série, et montrons com- ment en dériver un keygen. faire des dump et de recher- cher si le programme est protégé par une compres- sionlcryptage. 2) Analyse générale | du erackme | Pour commencer lanalyse, | nous allons lancer la cible |e indiaon portant es qu'il fat metre a ons 5 caraines dans Ienom. | &€ Oter toutes les indica~ tions potentielles que nous Visual Basic (ou tout langage | prise d'informations préala- | apercevons lors des tests que vous maftrisez afin de | ble.Je consellerai StudPE ou | mettre un serial sans nom, créer le crackme). J'ai choisi | LordPe (mais d'autres sont | mettre un nom d'un carac- VB car il permet de déve- | trés performants). | tere, ne pas mettre de lopper trés rapidement lin- | Actuellemeng, ls sont parmi serial, etc. Ce, pour voir si terface graphique et le code | les meilleurs, car ils permet- | une MessageBoxA apparait est simple & éerire. tent avoir accés 4 toutes | et donne quelques indica- Un éditeur de PE pour la | les information du PE, de | tions ‘> Headers |= Sections Functions | “BP Signatire|/"# Pros | @ «| » Imported Functions ——— s Expatted Functions @ Found No Exports! +a Hoe + 10) GetDigitemTestA ord-258 va; 0000200C + 100: GetDoltem orc 255 var 00002010 +0) SetFoous ord:S55.rve: 00002014 100 EndDislog ord'164 rv: 00002018 EO oer ‘ho Serdiecsago’ 528 rv: DOD ‘® KERNELI2Gt © Chaectoisios © Fit Thunk Test | Rivac=>Raw| Fie Compare} ar ae foci igre: : CaDlgeneth a Mesa, a premade Ural, ainsi qu TsitP cess de Kernel. Hackademy Hors Nous vérifierons aussi que le programme n'est pas pro- ‘t8g6 par un cryptage ou une compression a aide de ; StudPE (onglet signature) Celui-ci nous indique que le programme a été fait avec MASM/TASM, done écrit en asm pur, et n'a pas été pro- ‘tg particuliérement. Puis, grice a cet excellent pro- ‘gramme, nous pouvons voir toutes les fonctions impor- tées depuis des'DLL 3) Recherche de Ia routine de généra- ‘tion du serial Nous allons utiliser OlyDbg pour tracer le crackme et trouver la routine qui gindre le serial. A partie de maintenant, nous appelle- rons cette roiitine " Gen ”. Elle génére un serial valide en fonction du nom et le compare avec notre serial, Cette comparaison se faisant caractére par caractére. Pour trouver cette routine, ‘on lance OllyDbg puis on charge le crackme (2D_Cw82 exe, disponible sur le site du Journal) Ensuite, on va chercher dans les string data reference ” s'il nly a pas une indication qui pourrait nous aider situer Gen. Pour cela, on fait tn clic droit dans la fenétre principale et un" Search for", puis, dans le menu, on choi- sit " All Referenced Text String” (Cest. equivalent des" string data reference ” de Weasm). Et en effet, on trouve une référence“ Yeah you did it !" (qui signfie que Tron a réussi). En double-i- ‘quantjon se trouve directement dans le code du programme, NEjent tive ehacvcters lnat™ ee ee gis sais" (OlyDbg recherche dea sting reference“ Yea You did it” sur la ligne correspondante. | OllyDbg : Control Id (ici | entré. On peut le voir grice | eau al Races (On auraie aussi pu poser un | BBB ou 3000 en décimal). au Control Id donné qui est break point sur | - Le nombre de caractéres | le suivant de celui de saisie GetDigitemTextA, car | de notre nom est comparé | du nom (ici BB9 ou 300), SuidPE nous a indiqué que | avec ;une niessaceBoxa | = Une versa ingi- cette API était utiisée par le | apparaft sila taille est incor- quant la réussite. programme, et tracer le | recte, = Un ExitProcess manuel qui programme la recherche est exécuté quel que soit le de la routine de génération | - Une boucle commencant _ résulat du serial. Cette méthode est | en 0401154 et finissant plus efficace, mais lorsqu'on | en 004015, qui est le clur | Voici toute cette portion de trouve une chine decaractéres | de notre routine Gen: code commentée afin de disancYeah You did ft” dans | - Un autre ape! & | frite/comprendre au micux un crackme, on peut Iégiti- | Gettiigitemtext a, quiljfee. qui-“pourrait “encore mement supposer que - lui récupére notre\jserial | paraitre obscur & certains, chaine sera affichée en cas de réussite Si un message indique que Fon a réussi, logiquement, Gen se trouve peu avant. | Done on va remonter un peu dans le code et regarder | tes API appelées. Dans ordre d'apparition (ordre linéaire par rapport au code) : Gah OY4 Dry = lly aun GewDighemTeca Qui récupére notre nom a | partir du contréle de zone | #8 de texce et stocke notre | nom dans une adresse | mémoire. On peut voir le numéro de ce contréle grace au numéro donné par Ss Si on regarde quels sont les | +Sync,on s‘apersoit que: | zone mémoire ot sera | correspond au nombre de arguments que lon passe 4 | - le PUSH OBB8 correspond | stocké notre nom. | caractéres maximum traité cette fonction dans fa docu- | au numéro du control traité | - SS:EBP+8 contient logique- | par la fonction. mentation de Microsoft, ou | par la fonction. | ment le handle de fafenétre. | — (Il foudra en tenir compte méme APICRACK.hip de “ | - 00403080 correspond ala | - Et surtout 14 (20d), qui ‘dans notre keygen.) ote nom fait x deh eam beUs BSH. le cles} .G ence ré 4évei Upper whic ded ovate, au ex a SnpaLG WAM, DL, BYTE PER DS? TEAK a apt supa. ' sate le Bice pre x \ 5 MUN UBRORT aD_cH#2.0040 20 VANS, aka a3 ae Re f 22 Pa ‘\HooE DSO 42.0040 = On, DaSeaPpar\ tes waar en tBYivent un e {inom wa Sats bey Maser heh bana BUSA 20: 56 igahabna,& Ypres 004 1 r mi s G8 ATOM. Sk PBBNVAD De 004 ext 1 Io. OF RHEE VOWORD ASR 3 8 iif elect Bon, hy CAL econ RANS ER eBox on, pSPhpasee. wees "0 on seria 2, a0. aie) Breskpoiat un pea avant Yeah You Did kt” Nous pourrions analyser Gen en regardant le code ‘ASM, mais le débogage du programme nous permet de mieux comprendre_com- ment la routine de généra- tion du serial fonctionne Cette routine est tres courte : sept lignes. Elle geénére, grace 4 une boucle, chaque caractére du serial ‘en fonction des caractéres du nom. Je vais expliquer comment le serial est généré a partir des quelques premiers caractéres du nom, sachant que le proces- sus est le méme pour les caractéres suivants. 4) Explication de fa routine génération du serial Considérons que nous avons passé la verification de la taille de notre nom et donc qui ‘ait au moins cing caractares. Je prendrais comme nom “ silkscalp ” et comme serial “ 123456 ” Jutiise OllDbg qui trVa permis de poser un point darrét a adresse mémoire (00401 154, un peu avant te “ Yeah You Did It". Grace au débogueur, nous allons rapidement analyser le code et surtout, nous ver- rons ce que contiennent ces variables (en fait, nous confirmerons analyse du code qui a été grandement faciitée par Pusage des API fet notre connaissance de leur prototype). Déja, les trois lignes précé- dant mon break-point met- tent (voir illustration): Le nom dans EAX. En effet, dans la partie des registres, fon voit marqué 00403080 (adresse mémoire) “* silks- al”. Le serial dans EBX (123456). Pareil, mais adresse est 00403280. Le nombre de caractéres de notre nom dans ECX (Gilkscalp = 9 caractéres). Maintenant, on se trouve sur la ligne of j'ai mis_mon break-point. Vu qu’ECX sert de compteur, la boucle va slarréter au dernier carac- tere de notre nom, ou lors d'un saut sil y a une erreur dans le serial. Le compteur décrémente de | par tour de boucle jusqu’a arriver & zéro. Done, ECX va partir de 9 et diminuer de | par tour de boucle (c'est réqui- valent d'une boucle for(i=9 3P0s--)” 00401 154 :met la value ascii du ler caractére de mon nom dans DL. la partie basse EDX (cela sufit & traiter lun caractére sur & bits, comme le s de’ silkscalp ” - 73 en asci)." BYTE " sert a indiquer qu'on ne copie que les 8 premiers bits d'EAX dans DL. 00401156 : on soustrait de DL la valeur du compteur (9 au premier tour de boucle,8 au deuxiéme, puis 7...). DL contient donc maintenant 6A (73-964). 00401158 = le programme compare DL (6A) avec la valeur numérique du. pre- mier caractére du_ serial contenu dans EBX. Soit 31 pour le | de“ 123456". | OO40115A : si le résultat rest | pas ézal,on est éjecté du pro- | | gramme, sinon,on continue. Les trois lignes suivantes Yont incrémenter EAX et | = PROX ne. looppsTERIoG:te_APPLIOAL EBX de | pour passer aux caractéres suivants. Puis ECX va diminuer de | avant de boucler pour revenir a (00401154. ‘On peut done dis mainte- nant en déduire un petit algorithme retracant la rou- tine telle quelle se déroule ci-dessus. Je prends comme nom’ SILKSCALP ". seal EDX G61 40503 EBX 00403280 ASCIT "123456" ESP co1arcos EBP G01 2FCDS. EIP 00491164 AO_chia2.09901154 (Contena des repistres au débat de Gen (EAX=nom, EBX=serial). RO DEBUT ere Rona? Coheat cde iaesee e sit aig & Oe alae, daract tres De se Oy" Br. Gp ai Baha Mpa rdésae- carer ates, Catdomi gare! CndanotelcatacLerey Alene Gaus Oot Compee: fueande //Vongieut COnbeslwrivatee) a= 9 ean: Pi vie: sudesea up 2d ae pedcac nN EERE REEEREEEEEReneeeeeeEeeeeeeeeeenmeeetameeemeeeneeee a Pour concrétiser un peu cet algo, on va prendre un jeu d'es- sai comme TOTO4S, Le nom fait six lettres,;donc remplit le critére de longueur minimum. On va voir €@ que donne comme résultat algo éérit ciedessus, appliqué au nom TOTO4S LettrecompteurCompreurinverseCodage de la lettreSerial Conelusion WW sagissait ici dun exemple simple, un cas d'école, facilé & reverser. Le principe de la réalisation dun Keygen est cepen- dant toujours le méme,a cela prés que les diferentes étapes peuvent étre rendues plus difciles (voir encadré pour quel- Véditeur de distribuer des licences, mais par li méme une protection facile abu- ser pour n'importe qui. ques méthodes qui rendent la vie plus dure au cracker) Ce quil faut comprendre, est que comme Falgorithme est présent, d'une maniére ou dune autre, dans le pro- ‘gramme, on peut le récupé- rer et le détourner. On peut pallier & ce probleme en uti- lisant des fonctions irréversi- bles ou des algorithmes cryptographiques. asymétri- ques (la clé publique étant dans le programme, et la pri- vée cher éditeur) CCependant on pourra dificil: ment empécher les. gens de stéchanger des couples rnom/serial valides. Cest li tout le probleme des protections par numéro de série : cest lun moyen bon marché pour Greetz to the french crackers et tous ceux qui écrivent des tuto- riaux dans le but de transmettre leur connaissance... : la schmeitcorp, FFF... et tous les autres groupes que je nai pas Ia place de citer mais qui font vivre la scéne francaise par leur présence. By SILKSCALP PTT OTM Ca ee ed De tea ce ee re complus, plus la tche du cracker sera ardue. Je vous cnseille dong, pou les programmes que vous voulez potiger, de fie ds ago de Pe pi nereete teen oset tt Cer TS re ere eer ct ee Errore er re acne one HY an ee eo eae oa er ee cre ty cng (parfois intégrée dons les pocker/cryper) est inéressante si un Pe ea a ee Mee Pe ere ry code deviencompliqu (a moins ariver repérer a routine dans un code desassombl et de irs bien comprendre assembler) Se eee ee OES eo ae ec eed en ere ee eee erect ct tes ee ce en race Po eee ee eRe me aes er ec ce eed (cing 0 la bouceifinie nous impose un reboot de ordi car on ne Se a a Sa eter eon OO en ere re CCR tts nee eae ae te tn 6) On peut mame viliserV obfuscation, mas stun suet es com pliqué qui est @ traiter séparément et mérite largement un ou plu: preter Dee EES ut aw - fra Blears pages of ors na Pere | Reve Enpncetng Common @) Pete secon bom yous wth xg Newbie Coding Startup Gulden ‘es me Newbie ACE Surup Guten anv | ancien) prea} ‘Aout dais Ae. penwaiag (© Mets We nom raed emo yt mie en HH np at bund wa (@ meses aout env an pe wich epson sche yelper tins NORE Gea ic tpg ow a yo LES BONNES ADRESSES ‘Software reverse enhvecring and web sorvival arguments Po ree DL eas Atty 9 We ahi ay in ste can oy Magsabk tess pee pe at Da eer tae siemens tales CO en ‘oobearemora btnand wepitertrppiogcent-Sikrtottand nt Netcwpe serpin wea ok retire reer engineerin: arene: er waikn ‘mtetoncorpoie mrt cnbter maser homepages cerned : ‘oro rach choker conenercl ue tesbasing Jaa pple a remind monteringseeneegrosisiwed epobyat eerie mates | I a i’ drucrip tad poten ad depot tchnue, ral pert reversing Lend Reverse-Engineering-Community | [anal Sotwae Priton + Prveres Engrg Py sca. Ce rumoeret i eeroape Zeger Erm Gag wcteckyou sat meesogee tog n sess @HHW=ZHAZ orsquion 2 compris le fonctionnement d'un programme (ou d'une partie qui nous intéressait), fon peut aussi étre tenté d'en modifier le comportement. Les crackers, surtout, vou- dront supprimer les appels aux routines de protections. Diautres voudront plutot ajouter des options a un programme closed-source, par besoin, par défi ou pour ‘richer & un jeu vidéo. Dans certains cas, il est_méme nécessaire de modifier le programme pour facliter fa phase d'analyse (enlever les piéges anti-debugger, par exemple). Nous allons pour finstant nous intéresser au premier 2s, parce quill est plus sim- ple 4 illustrer. Nous allons donc nous mettre dans la peau du cracker qui veut supprimer une vérification de numéro de série. Dans les cas les plus’ courants, cette supression se résume ‘inverser un saut condition- nel, ce qui aura. pour effet daccepter tous les serials (cau ceux qui sont valides). La tiche est moins trivile si on a affaire a une deuxiéme protection, qui, a Taide d'un checksum, tente d'empécher cette inversion (et tout autre modification du code machine), Iya deux types de vérifica- tion pour lintégrité des données. Les checksums (sommes de contréle) et les signatures. Les premiers sont utilsés pour détecter les erreurs (de transmission, “ “ Cet article rappéle le mécanisme de base des protec- tions par checksum et montre différentes techniques pour passer ces protections sur Windows. permet de révisier l'utilisation de base d’un désassembleur, d’un débugger et d'un éditeur hexadé al, qui sont les outils de base nécessaire a l’examen et la modification d'un programme binaire. par exemple), les secondes ees FATAL ERROR! tion (voir la rubrique Linux, sur. Tincégrité. des fichiers) Malheureusement, les déve- loppeurs de protections ne fone pas toujours la difé- rence et utiisent souvent des checksums (CRC16/32, XOR, ou d'autres versions personnelles) la oi ils devraient utiliser une signa- ture (MDS, ou d'autres algo | rithmes difficiles & tromper). Dans cet article, je vais considérer le cas,assez cou- | détourner un checksum. Si rant hélas, de la somme de | la somme d'un checksum contréle calculée en faisant | vest pas valable (=ne cor- Ia somme des opcodes des | respond pas a la valeur du Instructions. checksum de l'exe initial) il Par exemple un Checksum | peut se passer plusieurs fait sur ces instructions : | résultats lors du lancement o1oue 23RR Si on fai un checksum sur) du programme ces 2 instructions, on a |.Soitil affiche carrément un comme résultat OxIFA\( =", texte du style « fichier 83+F8+05+75+05), Si on\| modifié » ou « fichier infecté remplace le JNE par un. JN.) par un virus » . fon aura une autre somme : | 2Soit il afiche une erreur Oxi F9 ( =83+F8+05#74405). | au lancement (généralement I faut voir aussi qulavec une'| c'est une MessageBox qui somme, un modification | indique erreur). peut en. compenser une | 3Soit le programme ne se autre ;nous y reviendrons. | lance pas sans rien indiquer. Reconnaitre une protection | Les 2 et 3 ne sont pas des par checksum Indication fable a 100% de la ILy a plusieurs maniére de | présence d'une protection Ahhh! Tu n‘as pas reussi ! par checksum. Dans tous les ‘cas, le prog finira forcément par Ia fonction ExitProcess. Pratique Prenons Texemple suivant un crackme de Static REvenge’s de la mythique Shmeit Corp (grace leur soit loué, car Cest par leurs célé- bres mémentos que jai appris le cracking et priez pour quils n'arrétent pas car ils sont vraiment bon et for- iment avec d'autres les fonde- ments de la scéne francaise). Je vous présente le code désassemblé d'une partie d'un crackme de Static Revenge’s puis je l'explique- rai Je vous préviens tout de suite, il n'y a pas de check= sum dans ce crackme, mais, ner ce qui se passerait sil y en avait un pour nous compliquer la vie. sss sees ade Voici l'amnalyse que l'on peut en faire 1 le prog lance une | MessageBox de bienvenue 2: le prog compare le contenu de EAX avec la valeur 07 (cette compat son est inutile car elle ese suivi d'un JUMP, c’est-d-dire lun saut inconditionnel). Cette instruction nous ser- 3 :un JUMP nous envoi vers la troisiéme MessageBox ("Rate") 4: Le jump saute par dessus la partie qui annonce que le crackme a été réussi. C'est aussi ici que le Call hypothé- | tique du checksum véerifie- rait Fintégrité des données. Sile code a &é modifié, on ferait un appel a ExitProcess, | sinon on continuerait. Je placerait ici le teste de checksum, aprés la premigre protection (inutile de don- ner prématurément des indices). 4 + le prog lance la 3eme MessageBoxA — déclarant quion a pas réussiavcracker | ce crackmey i 5 : TAP ExitProcess quite | le programme | Pour réussir ce erackme, i suffi. de -modifier Te. jmp 00401032, par exemple par Imp 00401018 (EBIA > B00), Mais cette modifica tion, serait. détecté par la ‘vérfieation de checksum (il yeaurait une difference. de 26, soir 1A en hexadécimal). Noyons comment faire pour eviver ca Premicre méthode (classi- que) Lorsquiun message s'afiche indiquane que le fichier a eve modifié oul“ yérolé, un TARR | crackers imagine immédia- tement siquilla a faire: il va cracker le checksum de la méme maniére quiil a cracké la premiére protection, en cherchant de quel endroit est ouverte cette fenétre. Ensuite, i n'a plus qu’a inver- ser le saut conditionnel sul- vant la comparaison de la valeur du checksum du pro- gramme initial avec la valeur du checksum du programme modifié. Par exemple : avec un désassembleur en recherchant le message qui sSaffiche dans les string data reference. Ou avec un débo- gueur, en plagant un break- point sur MessageBoxA. Méme si aucun message nest affiché, il va forcément avoir un appel la fonction ExitProcess pour quitter le programme. On va done pouvoir de toute facon dé cher Tendroit du pro- gramme qui_compare. les checksums, En, posane un breakpoint (bp). sur ExitProcess, on va pouvoir tris facilement remonter le flot dexecution. Ensuite, on peut. désactiver {a protection de différentes Tnaniéres, par exemple : en supprimant le call appé- lant lav fonction. de check- sum. “en inversant le saut conditionnel suivant Ja comparaison. en remplacant la. valeur comparée par la nouvelle valeur de checksum (que le programme aura. calculé Pour nous, et qui se trou ‘vera dans le registre qui fait objet de la comparaison) ‘Avec ollydbg cela donneraic : CRACKING yyaususcesuse! ‘On peut poser un breakpoint avec la touche F2, directement sur la ligne qui nous intéresse. (eketieun ia Dans le menu plugin, foption Command-line permee aussi de metzre des bp sur des/APL Dans notre cas; on fera «bp. ExitProcess ». Comme ca ds que ExitProcess est appelé “on tombe sur la bonne ligne dans le code, juste aprés le JUMP(lignegrisée). Ona plus qu'a poser un. break- point avant ExitProcess avec F2:sur le call checksum puis leoduzeze SF 26 26 20 20 53 Gb GD 55 69 74 20 43 GF 72 20) jenduzei0l 26 20 2u 26 SF BF CF AY BA BO AP BO BA AY GP BP faire un'‘trace into! pour arri- | ver a la routine du checksum (en 401018). Je rappelle que dans la capture’ infest pas present, mais Cest le proces- sus théorique qui compre: Deuxidme méthode Une deuxieme méthode un peu plus raffinge serai de faire en sorte que la valeur du checksum reste la meme. Puisqu'on a modifié fe saut [PUSH Cracknes 09482270 PUSH Gracknes 60482000 iH ‘ALL, Camp_ausEnz2.tessageBoxt> Title Text = Ne hovnei saageoxh \ | Scie = HG_OKIRG LeOn@e TENS) PUSH Grachwet .eo4s2280 |frsere 3 PUSH Grachnet-OB462i15 Text’ ~ “PAaB¥iieitationst Ta ish 8 |] hdres “FRILL eA ‘bg ar ae en he 20] (en remplagant EBIA par | se‘fait pas forcement sur tout B00), on a 1A en moins | le programme.Sile checksum dans la valeur du Checksum. | se fat depuis TEneryPoine du I faut done que dans les | prog (00401000) jusqu’au ‘opcode on rajoute un total | JUMP 1A compris de IA Eccestla quelacom- | (00401016), on ne peut paraison située avant le | modifier un opcode de la JUMP va nous servir. On va | 3eme MessageBox. Dans ce remplacer CMP 07 par CMP | cas, il est judicieux de modi- 21(21= 07 + 1A), comme ga | fier lopcode de la comparai- valeur du checksum reste | son (adresse 00401013) identique. On aurais pu | située juste avant le JUMP, rajouter ailleurs 1A mais cet | On peut faire cette modifi- fendroit est pratique car le cation directement avec résultatde la comparaison | l'éditeur hexadécimal de ‘estipas prisen compte. | Ollydbg. On voit dans cette Wfauc faine'preuve d'astuce | derniére capture que 07 a Pouir que les modifications | été remplace par 21 ‘que\l'on réalige polr.com- | Aprés nous étre familiarise Penser nevmodifient pas,le | avec les checksums, nous ‘comportement | du pro- | verrons dans article suivant gramme, De plus ine fautpas| des techniques plus avan- ‘ublier. que le checksurn nig | cées pour les contourner. Ae ere Botik rackm seis ‘eo 2 08 G0 60 68 C0 00 0 60 00 88 88 G0 88 8 00 G0 G0 05 oo 00 09 00 09 28 8 G8 88 8 80 G9 20 08 00 90 O9 B0 98 188 08 G8 88 Go GO Bo G0 U9 Go UO G3 8 Oo 28 8 G0 88 G0 00 99 G0 o8 oo OO BB BB oo 28 8 60 98 8 89 G9 G0 08 05 90 09 60 oo 2 ©8 G0 88 G0 00 G9 G0 08 Oo 00 6A G0 Es 68 08 20 49 08 cf 09 EB 39 09 0 Oo AR 68 49 68 Oc 22 40 06 8 Ie 21 40 22 24 88 88 80 8 00 E329 80 09 Go Se Bpnaess5}98’22 48 88 68 CB 21 40 68 6A OB EB G7 60 boon 9 Es 06 98 90 o0 FF 25 re 30 40 oo Fr Bonoaess| 38 48 0 FF 25 80 39 40 08 Fr 2s 84 90 40 Soa0de5s| 25 88 99 49 88 Go 88 6 68 ve ba Go oo OB Ghnca?=| 40 9A 80 Aa Aa BA oA BA BA ae BA BA Ea BA 1m tconsan tn. Tits 9 SpeRalr ERIOR tS S ene RRR ear ETNA es eS Soneenne | SrepPeoo Fapuiced Greet'z to my friendses crackeurs et les teams qui font vivre la sc8n francaise de cracking : Teiteam qui rest plus (au derniéres nou- veles, désolés les gars mais on se recroisera sur le net), N-Gen; toute la Shineit Corp, hristal, TeeJi, Tamambolo, Litin noir ef les autres. Sons ‘oublier Capashen, CrashFr, Jek et JiTi pour ce quil inigpprend 3 jours par sera nes, eta tout les autres que Je ria’ pas la place de citer. OlyDbe Entrainez-vous sur un autre crackme : demander sur htp:forumthehackadernynet ‘ou cherches. sur Google By : Silkscalp S88R8S8SSSS8S88) BERISSSSNSS: n bonne connaissance du format PE peut per~ | mettre aux reversers | modification d'un gramme. Que ce soit pour faire des patch en mémoire, analyser les sections comme celle contenant la table dimport (les fonetions importées depuis des DLL) ou encore modifier des sec- tions d'un programme. Nous allons dans cet article essayer de comprendre ce qu’est le PE, quelles sont les informations quil fournit et en quoi ces informations peuvent @tre utiles 4 un cracker, Le sigle PE signfie Portable | Exécurable, C'est une en- | téte reconnue par toute les | | | | plateformes Windows. Le PE est obligatoire pour le bon fonctionnement de tout exe | sur Windows : il permet de | savoir de quel type de pro- ‘gramme il s'agit et comment le faire fonctionner. Crest lui, : par exemple, qui nous sore Ia célebre phrase : « This program cannot be run in DOS mode ». Mais quel est le fonctionne- ? ment d'un exécutable sous Windows ? Le PE header est crée par le compilateur du langage utilisé. Le PE loader va lire le PE, puis il va map- per le programme en mémoire vive en fonction des informations données, avant que le début du code soit exécuté. CChaque PE header contient un grand nombre d'informa- tions sur le programme quill | 2s Ji 2 ui is ”, D 0 s r, il - 7 ; SS Ssnsssonssesenseneennsnnene Hackademy Hors série n°2 Fatigué d'inverser des sauts conditionnels ? En route pour des techniques de cracking plus avancées, faisant intervenir le coeur des fichiers exécutables Windows : décrit, dont je vais, dans cette introduction, parler du principal. Pour vous montrer a mesure des informations contenues par le PE header, sachez que toutes les infor | mations données par LordPE ou StudPE (voir prise d'écran | et 2) pro- Viennent du PE. En fait ces logiciels décorti- ‘quent le PE pour nous don- ner les information quil | contient, et d'alleurs per- mettent souvent de savoir par quel programme le logi- | Giel étudié a été packé. En effet. beaucoup de logiciels | uitilisent comme protection | le packinglcryptage de leur | code. Or les informations | un éditeur de PE peuvent. servir & passer ces mesures préliminaires de protéction, soit a la main, soit par des moyens automatiques. Les éditeur de PE élaboré vont trouver pour nous lalgo- rithme de packing utilisé (st est connu) et proposer de décompresser le gramme, Je vais vous montrer’ avec quelques prises d'écrans les informations que peut don- nner un éditeur de PE. pro- | Les séctions Dans cette prise d’écraniles cchoses sont simplés/Les informations données sont: -Le nom des'sections -Leur offset Virwuel (Vofiset) ct leur Offser Réel (Rofiset) | -Lour ‘alle vireuelle (YSize) et leur taille réelle (Rsize), “Et aussi, ce qui est tres | important, leur-earactéristi- | ‘ques ; ‘readable’, ‘writtable’, | et‘contain initialized data’. Diabordil faut savoir qu'un executable est séparé en dit- | ferences Sections, Les princi. pales sections sont: CODE | (ou .TEXT), qui contient le | } ‘code méme du programme, a section (DATA qui comtient Jes donnée ou variable utilisées par le pro- gramme, la. section IDATA daller trés loin dans la | le PE Header. Quelques pistes, et surtout un guide pra- pro- | tique sur I'utilisation des éditeurs PE, et autres unpackers. {qui contient les informations sur les fonetions et les DLL utilisées. par le programme. Crest a section dimport. lly a encore la section EDATA qui contient les fonction Exportées par le pro- gramme 5a section .rsre qui Contient les ressources util- sées par le programme (ico- fies, chaines traduisibles, ‘etc,)-Toutes les informations Sur la separation des section etvleurs taille est contenu dans le PE header. Sachant que dans fa plupart des cas,la taille réservée est plus grande que [2 aaille réelle (la taille réservée est arrondie a 256 prés),il resce presque toujours de la place la fin des section pour au'un crackeur puisse faire des chose pas trés catholi- que. Nous verrons ces pos- | sibilieés, en détail, dans “un prochain. Manuel, mais sachez déja que cela peut permettre de passer la pro- tection par checksum de larticle précédant. Vous yous rappelez sans doute que nous cherchions un endroit modifier pour compenser les différences de la somme de contréle. Les fins de section sont tou- tes trouvées. Clest égale- @ EP Un endroit commode pour. rajouter une petite portion du code (pour modifier le programme lors de son exécution, par exer ple), sur lequel on peut se rancher depuis ineérieur du programme Informations générales La deuxiéme prise d'écran présente ce qu'un éditeur de PE classique montre en premier, clest-i-dire des infos comme image base, VEntryPoint, la size of image, le header size (qui en géné- ral est toujours de 400h). ci fon peut relever des informa- tion comme le RVA (valeur 1000, en rouge) qui signifie Relative Virtual Adresse , imageBase 'entryPoint, le nombre de section (5) et dautre informations. Pour yous donner un exemple : pourquoi la majorité des programme non packé com- ‘mence en 401000 (ou du moins leur code, data com: prises) quand on les désas- semble? En faitcela vient du PE hea der. Le PE loader charge lexe fen mémoire grace au infos données parle PE et ici le PE indique que la plage mémoire réservée au programme | commence en 400000 ("image base comme par hasard) , addition. a UEntryPoine (1000) : 400000 + 1000 = 401000. soie | adresse du début du pro- ‘gramme quand on le désas- | semble. Ce n'ai pas un hasard_| et ces valeurs sont tres AL importantes pour arriver a tune bonne décompression | dun programme compressé. Eee (etic zene esac | Sonatas |" Pos | « » Qui Edt 'om —— ae | HEADERS (Dos+Coff+Optional) DATA DIRECTORY Unpackers | ttre édeur de PE). Cest Icion voit que Féditeur de PE | aussilecas de ProcDump, gi peut détecter le type de | permet également dajouter compression utilisé pour | de nouveaux format de com- proteger le programme | pression. grace 3 un langage (Garmi un grand nombre d'l- | de script. En effet. lors qu'un gorithmes), présentement | nouvelle technique est ren- FSGI.2 par dulekixt. Pe-scan | contrée, le cracker doit ou StudPE en sont capable | décompresser le programme (méme si pe-scan donne | a la main (avec un débugger pour les plus simples). Le lan- juste la compression sans | ‘Alloy 1x2000-> Prakash Gautam ‘APatch GUI 1.x > Joetgen ibsen ‘Aumadilo 1.603°> Sifcon Realms Tooworke ‘Amadilo 1.71 > Siicon leaks Tookiorks: | | “Text | vacerRaw) Fs Compa co | re Resaes ® Sonaure | ® Poss | + | [00007000 SES Seow [TO entypoine (raw) mba Tbk [ome0s000 ae a [ROmO00O” Imagedase Expo Table 00000000 [60000000 z |, ['o0006000" size of mage more: {IMAGE_DIR_ENTRY RESOURCE ~] FCeRGTOOD” Secon Arment pom poo | QOOOTAOO' Fle Akgrment gage de script permet dau tomatiser le processus, au cas olf cette technique est 4 nouveau rencontrée. Nous niavons fait que survo- ler les possibltés offertes par la manipulation du PE header. A vous de les expérimenter. By : silkscalp | vaavese nny Prog eas | auth: [SnakertQwe | date : [1570672003 Database actions jous allons apprendre & décompresser un pro- Jgramme qui est passé au compresseur et ce, a la main (avec un débogueur) pour pouvoir désassembler le code, le lire et tenter de récupérer les SDR. Ce nest pas gagné pour les SDR, mais vous obtiendrez un lis- ting décompacté, donc i ble. Vous allez voir que dans le cas d'une simple compres- sion, c'est facile, Ce n'est pas le cas lorsque le programme 1 6té packé, car il comporte des protections supplémen- ‘Au programme : 1) Rappel rapide du principe de fonctionnement des pro- grammes _compressés/com- pactés, 2) La décompression pro- prement dite : manuelle- ment avec un débogueur. Les outils :un éditeur de PE et un débogueur (celui de votre choix), Avant de yous atteler a la the qui consiste & dumper un programme manuelle- ment, il yous faut quelques indications. Les informations importan- tes sont [Entry Poin Vimage Base, ainsi que les caractéristiques des sec- tions. Renee CaS aie) Vous étes déja tombés sur un programme qui ne se dés- assemble pas ? Ou bien alors sans aucune "String Data Référence" (SDR) ? Eh bien c’est le signe que le pro- gramme est compressé, chiffré ou compacté ! Voici comment s'en sortir dans un cas simple, en utilisant un vieux debogueur : Softice. (IA [scouting...D:\Cracking\CRACK\CRACKME\CRAKME\T0_e_soliDUMPerack le 0 Fle Header emyPone (RDO acve pe (HE “image Base: [BOADEOOT | Nunber ot Sections: [007 ae Se fparosets— a a = | Tie Date Same: | pase ofGede fo006s000 | | Portero Symbol Table: 00000000 erectDate — OOEECEO Number Symbol. foveeeeee leer [G0007000~ | | Sie of Opbonal Header: [O00 | | Charactetistics: fete | Size cf Headers. [00001000 1. Plitor: ous dono len pint Comme indiqué par un édi- ) exécuter, lire/ou écrire sur | Maintenant, notre pro teur de PE, chaque section posséde ses propres carac- téristiques. Ce qui nous intéresse, outre Image base et Entry point (cf. prise écran |), cest la caractéristi- que de la section (cf. prise écran 2) oi! se trouve Entry point. Les caractéristiques servent a dire si l'on peut cchague section, d'oi leur importance, Une section dont la caractéristique est 4 50000040 ne peut pas ere désassemblée, Il faut la met- ‘tre & £0000020 sinon votre débogueur risque de ne pas breaker sur Entry Point. | Remettez, la section 3 | 0000020 si Besoin est. gramme pourra étre désas- semble. Sauf quill n'y a pas les SDR et que le code est compressé, donc illsible, (Cest maintenant que Yon va S‘occuper de dumper notre Cible afin de retrouver un ls ting lisible au désassemblage et, si possible, les SDR. Nous savons que Procdump

You might also like