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 ;)
|