******************************************************************************
{{{{{{{{{{{{{{{{{{{{{{{{{{{{  Reverse Engineering  }}}}}}}}}}}}}}}}}}}}}}}}}}}
******************************************************************************


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.
On prend donc softice et on met un bpx en 00401140.
Puis on fait :


a 00401140
jmp 0040E000
//echap
et vous regardez l'hexa généré. ça me donne :
E9BBCE0000

vous prenez donc votre éditeur hexa et vous foutez ça a l'offset 1140.

Maintenant qu'on a dérivé le prog il faut afficher la MessageBoxA. En premier il faut caser nos chaînes de caractères.
On a prévu tellement de place que je vais prendre énormement 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'affichage de la boite de message se fera comme ceci :
(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!ExitProcess

On tape tout cet hexa sous HexWorkshop en E000 comme ceci :


Et voila, on a une boite de message quand on quitte le NotePad. Héhé
Le programme au final
Voyez c'est franchement pas dur.
TarGeT DeStroYeD
Je dédicace ce tut a tout le groupe Immortal



TiPiaX / French Cracking Force