Le Reverse EngineeringIl y a quelques temps le defi de la French Cracking Force etait de reverser le notepad de windows . A cette date je n'avais pas de temps a moi et je n'ai donc pas pu faire grand chose. Cependant quelques semaines apres je me suis dit qu'un petit tut de reverse pourrait etre sympa. Ce zine etant fait pour les newbies et moi meme en etant un, je vais vous proposer de changer les menus et de rajouter simplement une boite de message lorsqu'on quitte Notepad . Comme un petit nagscreen, koi, mais quand on quitte pour changer . En plus j'ai jamais fait de tuts sur le reverse donc je commence tout simple, hehe. Les Tools : ******** Borland Resource Workshop 4.x procdump 1.6.2 Softice 4.x Hex Workshop 3.00 (Bientot le TiPiaX editor,lol) comme d'hab koi... Go For It : ******** Tout d'abord il faut savoir afficher une boite de message. Pour faire ca, rien de plus simple : on declare 2 chaines de caracteres de cette maniere : message db "Da TiPiaX NotePad\nCopyright French Cracking Force\n2000-2001",0 titre db "Go Get Fucked",0 push 0 ;type de messageboxa push offset titre ;le titre push offset message ;le message push 0 ;le handle call MessageBoxA ;API qui affiche la boite de messageLe seul probleme c'est qu'on va pas le compiler (quand meme on est pas des anes) on va l'integrer directement en hexa dans le code du Notepad. Donc ca sera plutot de la forme : push 0 push 0040155 ;chiffre pris au pif a titre d'exemple push 0040198 ;idem push 0 CALL USER32!MessageBoxAPourquoi "CALL USER32!MessageBoxA", tout simplement car pour pas se prendre la tete on fera les changements en memoire grace a softice et seulement ensuite, si c'est bon on prendra l'editeur hexadecimal. (sous softice c'est "a" qui fait ca) Allez on passe a l'attaque : ********************* On commence par la partie cool et hyper facile, on prend Borland Resource Workshop 4.x et on change tous les textes du notepad a notre guise. hehe, c'est fun. En fait ce soft change les datas en les deplacant en fonction de la longueur des textes ce qui est suiscidaire a faire avec un editeur hexa simple. on l'ouvre donc et on va dans menu->1 Voila ce qu'on a l'ecran : (double clic sur le "1" pour editer) 1 MENU { POPUP "&Fichier" { MENUITEM "&Nouveau", 9 MENUITEM "&Ouvrir...", 10 MENUITEM "&Enregistrer", 1 MENUITEM "En®istrer sous...", 2 MENUITEM SEPARATOR MENUITEM "Mise en &page...", 32 MENUITEM "&Imprimer", 14 MENUITEM SEPARATOR MENUITEM "&Quitter", 28 } POPUP "&Edition" { MENUITEM "&Annuler\tCtrl+Z", 25 MENUITEM SEPARATOR MENUITEM "&Couper\tCtrl+X", 768, GRAYED MENUITEM "Co&pier\tCtrl+C", 769, GRAYED MENUITEM "C&oller\tCtrl+V", 770, GRAYED MENUITEM "S&upprimer\tSuppr", 771, GRAYED MENUITEM SEPARATOR MENUITEM "Selectionner &tout", 7 MENUITEM "Heure/&Date\tF5", 12 MENUITEM SEPARATOR MENUITEM "&Retour a la ligne automatique", 27 MENUITEM "C&hoisir la police...", 37 } POPUP "&Recherche" { MENUITEM "&Rechercher...", 3 MENUITEM "Rechercher le &suivant\tF3", 8 }POPUP "&?" { MENUITEM "&Rubriques d'aide", 5 MENUITEM SEPARATOR MENUITEM "A &propos du Bloc-notes", 11 } } les & indiquent juste des raccourcis clavier accessibles pour alt+lettresoulignee.Ici on rajoute un petit menu supplementaire : POPUP"&Hccc RuLeZ" { MENUITEM "&Reverse By PoSeiDon", 20,GRAYED } Arf c'etait marrant hein, hehe. Ajout de la MessageBoxA: ********************* Tout d'abord il va falloir qu'on trouve de la place pour inscrire notre code. On se prend pas la tete, on va creer une nouvelle section dans le programme. On fait donc peter un outil encore formidable : j'ai nomme procdump (personne s'y attendait nonnnnn...) On lance donc procdump, on va sur PE Editor et on ouvre notre notepad. On clique sur sections, on ce place sur la derniere (.rsrc) puis on clique sur le bouton droit et on fait : "add section". Il nous demande le nom de notre section, on met ".TiPiaX" puis Ok. Ensuite on change les caracteristiques grace a "edit section" (toujours grace au bouton droit) pour obtenir cela : Name .TiPiaX VirtualSize 00001000 VirtualOffset 0000E000 RawSize 00001000 RawOffset 0000E000 Characteristics E0000020 //ça correspond a un code executable,lisible et ecrivableon change la Size Of Image de 0000E000 a 0000F000 (car on a ajoute 1000 bytes) (sous Procdump encore). Une section de 1000 bytes est maintenant cree, il faut donc desormais ajouter les 1000 bytes au fichier. Pour ca on utilise HexWorkshop. On va a la fin du fichier, puis bouton droit et on choisit "insert". Ensuite on ecrit 1000 bytes, on clique "hex" puis ok. Genial, on est pret a attaquer. Maintenant on passe aux choses serieuses. On va faire en sorte que notre boite de message s'affiche lorsqu'on quitte le programme. Il faut donc trouver ou est l'appel a l'API ExitProcess. Alors ca c'est hyper simple, on va dans Wdasm, on desassemble et on va dans fonctions->imports puis on choisit ExitProcess voila ce qu'on trouve : * Possible Ref to Menu: MenuID_0001, Item: "Ouvrir..." | * Possible Reference to String Resource ID=00010: "Le texte dans le fichier %% a change. Voulez-vous enregistr" | :00401123 B80A000000 mov eax, 0000000A :00401128 7404 je 0040112E :0040112A 0FB745EC movzx eax, word ptr [ebp-14] * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00401128(C) | :0040112E 50 push eax :0040112F 56 push esi :00401130 6A00 push 00000000 :00401132 6A00 push 00000000 * Reference To: KERNEL32.GetModuleHandleA, Ord:0114h | :00401134 FF1594634000 Call dword ptr [00406394] :0040113A 50 push eax :0040113B E8730F0000 call 004020B3 :00401140 50 push eax //ces lignes nous interressent :00401141 8BF0 mov esi, eax // // * Reference To: KERNEL32.ExitProcess, Ord:007Fh // | :00401143 FF1598634000 Call dword ptr [00406398] :00401149 8BC6 mov eax, esiQuand Notepad va quitter il fait : push eax // eax=0 mov esi, eax CALL ExitProcessOn va pas se faire chier, on va foutre un jump en 00401140 vers notre section . On a vu avec procdump que les VirtualOffset etaient equivalents au RawOffset donc comme notre section commence a l'offset E000 son adresse est 0040E000. On prend donc softice et on met un bpx en 00401140. Puis on fait : a 00401140 jmp 0040E000 //echapet vous regardez l'hexa genere. ca me donne : E9BBCE0000 vous prenez donc votre editeur hexa et vous foutez ca a l'offset 1140. Maintenant qu'on a derive le prog il faut afficher la MessageBoxA. En premier il faut caser nos chaines de caracteres. On a prevu tellement de place que je vais prendre enormement d'espace, d'abord je fais ce que je veux, c'est moi qui fait le tut ! Bon, on place la premiere en E060 et la deuxieme en E0C4 : il suffit de mettre le bit 00 pour arreter la chaine. Pour allez a la ligne c'est 0A. Comme sur la photo : (l'hexa est obtenu par la fonction "a" de softice) 6A00 push 00 68C4E04000 push 0040E0C4 6860E04000 push 0040E060 6A00 push 00 E81B61B4BF Call USER32!MessageBoxA ;puis on quitte le prog : 50 push eax 8BF0 mov esi,eax FF1598634000 Call USER32!ExitProcessOn tape tout cet hexa sous HexWorkshop en E000 comme ceci : Le programme au final Voyez c'est franchement pas dur. TarGeT DeStroYeD TiPiaX |