Transformation du Notepad2 en version de démonstration

 



  • Objectifs :
    on va bloquer l'enregistrement de fichiers et afficher un NAG affin de bien faire chier les utilisateurs...

  • Pré-Requis :
    - un éditeur Hexa
    -le notepad : téléchargeable ici ou sur le site officiel : http://www.flos-freeware.ch/notepad2.html
    -OllyDbg
    -ResHacker (pour éditer le menu) (facultatif)
    -Un éditeur de PE Header pour changer l'Entry Point (ProcDump par exemple)
    -savoir utiliser ces logiciels
    -avoir des bases en Assembleur
    -Une bierre (indispensable)

 





Pour commencer on matte (avec OllyDbg) que le Padding de ce fichier est à partir de l'offset : 000506F0

Le Padding, est un zonne de donnée qui est vide de données utiles

elle est généralement à la fin des sections de notre executable et nous permet d'écrire du code...
Si jamais il n'y pas aucun espace de libre, on peut rajouter une section ou rajouter X Offset dans une section et adapter le PE-Header en fonctions (mais on vera sa plus tard)


On met nos strings avec notre éditeur hexa préféré...


Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F


000506F0 44 65 6D 6F 00 56 65 72 73 69 6F 6E 20 64 65 20 Demo.Version de

00050700 64 E9 6D 6F 6E 73 74 72 61 74 69 6F 6E 2E 00 00 démonstration...


on peut rajouter notre code à la suite : une fonction qui va afficher le Nag :

push 0

push titre

push text

push 0

call MessageBoxA

retn


qui donne :


00450710 . 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL

00450712 . 68 F0064500 PUSH NOTEPAD1.004506F0 ; |Title = "Demo"

00450717 . 68 F5064500 PUSH NOTEPAD1.004506F5 ; |Text = "Version de démonstration."

0045071C . 6A 00 PUSH 0 ; |hOwner = NULL

0045071E . E8 C7FD8F77 CALL USER32.MessageBoxA ; \MessageBoxA

00450723 . C3 RETN



on va maintenant mettre le code qui au démarage va afficher la message box et continuer après sa le code normal

pour sa on va donc rediriger l'EP (Entry Point) vers notre nouveau code

avec ProcDump (par exemple)






Notre nouveau EntryPoint est 00050724

On affiche la message box, et on met un JUMP vers notre ancien EP :


CALL 50710 (Affichage de la MessageBox)

JMP 474E8 (EntryPoint)


cela donne (sous OllyDbg)


00450724 E8 E7FFFFFF CALL NOTEPAD1.00450710

00450729 ^E9 BA6DFFFF JMP NOTEPAD1.<ModuleEntryPoint>



on le change l'EP et on test...

On peut voir le résultat actuel dans Notepad_Nag.exe



Maintenant on va éditer le menu avec ResHacker (on rajoute GRAYED à chaque menu de sauvegarde)
sa nous permet de désactiver le menu d'enregistrement...

Le résultat est dans Nag+Grayed.exe

On lance notre soft, tout se passe bien on a un joli Nag, on ne peux pas sauvegarder, seulement au moment de quitter une fenêtre nous demande si on ne veux pas sauvegarder notre travail quelque part...

Il va falloir trouver et supprimer cette confirmation...

Avec OllyDbg, on recherche le label : DestroyWindow

Après avoir recherché les Imports dans le code on matte 3 références...



Pour faire un choix on peux déjà un peu regarder le code,
sinon pour être sur, on pose un BreakPoint dans ces 3 cas et on regarde lequel stop notre soft dans le cas ou apparaît notre fenêtre, on lance donc notre debugger (OllyDbg)
et on écris un texte bidon dans la fenêtre qui apparaît, pour ensuite la fermer et regarder ou on à attérit...

004118C0 . FF15 C4134500 CALL DWORD PTR DS:[<&USER32.DestroyWindo>; \DestroyWindow


Voilà donc notre référence, il va falloir maintenant trouver le code qui avant de quitter demande confirmation de quitter...


Ici, on matte le code suivant :

004118A0 > 6A 00 PUSH 0 ; Case 10 of switch 0041172D

004118A2 . 6A 00 PUSH 0

004118A4 . 6A 01 PUSH 1

004118A6 . 6A 00 PUSH 0

004118A8 . E8 83C5FFFF CALL Nag+Gray.0040DE30

004118AD . 83C4 10 ADD ESP,10

004118B0 . 85C0 TEST EAX,EAX

004118B2 . 0F84 6E070000 JE Nag+Gray.00412026

004118B8 . 8B8424 8001000>MOV EAX,DWORD PTR SS:[ESP+180]

004118BF . 50 PUSH EAX ; /hWnd

004118C0 . FF15 C4134500 CALL DWORD PTR DS:[<&USER32.DestroyWindo>; \DestroyWindow


On peut teste de mettre un BP sur le Call du haut, et on verra que celui-ci appel l'affichage de la demande de confirmation, on peut donc la Nopé (NOP= No Operation = 90)

Dans notre éditeur hexa, on vire donc les Push, le Call, le ADD, le TEST et le JE
car c'est le JE qui redirige vers la sauvegarde...

(les push servent au Call, on ne va donc pas les empilés)
Ne pas suprimer le ADD peux engendrer une modification anormale de ESP, pour être totalement sur, on le vire...


On a le résultat dans : Nag+Grayed+Quit.exe


Pour finir, on aimerais vraiment faire c**** l'utilisateur en mettant un Nag avant de quitter aussi...
Pour sa, on à la place de rajouter du code, dans ce que l'on vien de Nopé, qui effectue tout sa avant de quitter, c'est donc assez simple :

le nouveau code est :



004118A0 E8 6BEE0300 CALL Nag+Gray.00450710

004118A5 90 NOP

004118A6 90 NOP

004118A7 90 NOP

004118A8 90 NOP

004118A9 90 NOP

004118AA 90 NOP

004118AB 90 NOP

004118AC 90 NOP

004118AD 90 NOP

004118AE 90 NOP

004118AF 90 NOP

004118B0 90 NOP

004118B1 90 NOP

004118B2 90 NOP

004118B3 90 NOP

004118B4 90 NOP

004118B5 90 NOP

004118B6 90 NOP

004118B7 90 NOP

004118B8 . 8B8424 8001000>MOV EAX,DWORD PTR SS:[ESP+180]

004118BF . 50 PUSH EAX ; /hWnd

004118C0 . FF15 C4134500 CALL DWORD PTR DS:[<&USER32.DestroyWindo>; \DestroyWindow



Le résultat est dans le fichier : NOTEPADDemo.exe

Voilà on à fini notre démo ;)