Il y a quelques temps le défis de la French Cracking Force était 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 après je me suis
dit qu'un petit tut de reverse pour donner ma contribution a ce super zine qu'est
Immortal (héhé, un peu de lèche) ainsi que pour Hccc4 ça pourrait être sympa.
Ces zines étant fait pour les newbies et moi
même en étant 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, héhé.
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 ça, rien de plus simple :
on declare 2 chaines de caractères de cette manière :
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 message
Le seul problème c'est qu'on va pas le compiler (quand meme on est pas des anes) on
va l'intégrer directement en hexa dans le code du Notepad. Donc ça sera plutot de la
forme :
push 0
push 0040155 ;chiffre pris au pif a titre d'exemple
push 0040198 ;idem
push 0
CALL USER32!MessageBoxA
Pourquoi "CALL USER32!MessageBoxA", tout simplement car pour pas se prendre la tête
on fera les changements en mémoire grace a softice et seulement ensuite, si c'est bon
on prendra l'éditeur hexadécimal. (sous softice c'est "a" qui fait ça)
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. héhé, c'est fun.
En fait ce soft change les datas en les déplaçant en fonction de la longueur des textes
ce qui est suiscidaire a faire avec un éditeur hexa simple.
on l'ouvre donc et on va dans menu->1
Voila ce qu'on a l'écran : (double clic sur le "1" pour éditer)
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 "Sélectionner &tout", 7
MENUITEM "Heure/&Date\tF5", 12
MENUITEM SEPARATOR
MENUITEM "&Retour à la ligne automatique", 27
MENUITEM "C&hoisir la police...", 37
}
POPUP "&Recherche"
{
MENUITEM "&Rechercher...", 3
MENUITEM "Rechercher le &suivant\tF3", 8
}
Ici on rajoute un petit menu supplémentaire :
POPUP"&Hccc RuLeZ"
{
MENUITEM "&Reverse By PoSeiDon", 20,GRAYED
}
POPUP "&?"
{
MENUITEM "&Rubriques d'aide", 5
MENUITEM SEPARATOR
MENUITEM "À &propos du Bloc-notes", 11
}
}
les & indiquent juste des raccourcis clavier accesibles pour alt+lettresoulignée.
Arf c'était marrant hein, héhé.
Ajout de la MessageBoxA:
*********************
Tout d'abord il va falloir qu'on trouve de la place pour inscrire notre code.
On ce prend pas la tête, on va créer une nouvelle section dans le programme.
On fait donc péter un outil encore formidable : j'ai nommé 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 caractéristiques 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 éxecutable,lisible et écrivable
on change la Size Of Image de 0000E000 a 0000F000 (car on a ajouté 1000 bytes)
(sous Procdump encore).
Une section de 1000 bytes est maintenant crée, il faut donc désormais ajouter les 1000
bytes au fichier. Pour ça on utilise HexWorkshop.
On va a la fin du fichier, puis bouton droit et on choisit "insert".
Ensuite on écrit 1000 bytes, on clique "hex" puis ok.
Génial, on est prêt a attaquer.
Maintenant on passe aux choses sérieuses. 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 ça c'est hyper simple, on va dans Wdasm, on désassemble 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 changé.
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, esi
Quand Notepad va quitter il fait :
push eax // eax=0
mov esi, eax
CALL ExitProcess
On va pas se faire chier, on va foutre un jump en 00401140 vers notre section .
On a vu avec procdump que les VirtualOffset étaient équivalents au RawOffset donc comme
notre section commence a l'offset E000 son adresse est 0040E000.