Revelateur de mot de passe (enlève les astérisques)

Soyez le premier à donner votre avis sur cette source.

Vue 31 466 fois - Téléchargée 2 011 fois

Description

C'est ma 1ere source en ASM sur ce site. Elle n'as pas de grande prétention, juste montrer 2 méthodes différentes de révéler un mot de passe cacher sous des astérisques. (Supprime les astérisque et affiche un MessageBox avec le texte)

Il suffit de démarrer l'application, positionner le pointeur de sa souris sur la zone de texte où se trouve le mot de passe et attendre 5 seconde.

On peut voir comment créer un timer, recuperer la position du pointeur, récupere le handle d'une fenêtre, ....

Source / Exemple :


.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

.DATA   

ClassName     db "PasswordReveler",0   
AppName       db "PasswordReveler",0    
NullString    db 0
Titre         db "Mot de passe",0

.DATA?
wc            WNDCLASSEX <>
msg           MSG <>
hInstance     HINSTANCE ?   
Password      db 256 dup(?)
Cursor        POINT <>

.CODE   
start:
invoke GetModuleHandle, NULL                                                                  
mov hInstance,eax

; Crée une fenêtre afin de pouvoir créer un Timer

mov  wc.cbSize,SIZEOF WNDCLASSEX
mov  wc.style, CS_HREDRAW or CS_VREDRAW
mov  wc.lpfnWndProc, OFFSET WndProc
mov  wc.cbClsExtra,NULL
mov  wc.cbWndExtra,NULL
push    hInstance
pop  wc.hInstance
mov  wc.hbrBackground,COLOR_WINDOW+1
mov  wc.lpszMenuName,NULL
mov  wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov  wc.hIcon,eax
mov  wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov  wc.hCursor,eax
invoke RegisterClassEx, addr wc         
invoke CreateWindowEx,NULL, ADDR ClassName, ADDR AppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL

.WHILE TRUE         
            invoke GetMessage, ADDR msg,NULL,0,0    
            .BREAK .IF (!eax)
            invoke TranslateMessage, ADDR msg
            invoke DispatchMessage, ADDR msg
 .ENDW
mov  eax,msg.wParam     
invoke ExitProcess, eax                 
    

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

    .if uMsg == WM_CREATE
        Invoke SetTimer,hWnd,0,5000, 0                                 ;Crée un timer de 5 secondes
    .elseif uMsg == WM_TIMER
        invoke KillTimer, hWnd, 0                                      ;Detruit le timer

        invoke GetCursorPos, ADDR Cursor                               ;Récupère la position du pointeur
        invoke WindowFromPoint, Cursor.x,Cursor.y                      ;Récupère la fenêtre sous le pointeur
        mov ebx,eax

        ;1ere Méthode
    
        invoke SendMessageA, ebx, 204, 0, ADDR NullString               ;Supprime les *
        invoke RedrawWindow, ebx, 0, 0, 1                           ;Rafraichi la fenêtre

        ;2eme Méthode
    
        invoke GetWindowTextA, ebx, ADDR Password, 255                 ;Récupère le texte dans la fenêtre
        mov [Password+eax], 0                                          ;Tronque le texte (GetWindowText retourne la longueur de la chaine)
        invoke MessageBox, hWnd, ADDR Password, ADDR Titre, 1000h      ;Affiche le texte (1000h = MB_SYSTEMMODAL)

    
        invoke MessageBeep, -1                                         ;Emet un bip

        invoke ExitProcess,0                                           ;Kill le process    
    .endif

    invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    
ret

WndProc endp

end start

Conclusion :


Le gros avantage est que vous pouvez utiliser un programme écrit en asm sur n'importe quelle machine sans devoir installer des run-times.

J'attend vos commentaires...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
Salut,

le point d'entree du prog est a 'start:', normal en asm.
A quoi donc te sert le bloc 'WinMain proc' a part empiler 4 params inutilement ?
WinMain est le point d'entree en C, totalement inutile en asm.
sibi12
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006
-
C'est du au fait que ça vient d'un autre code source. J'ai juste garder la base. Je m'étai fais la même reflexion au départ. je change ça tt de suite.
cs_LordBob
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
8 -
j'ai l'impression qu'il ne marche pas sous XP, a confirmer...
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
Je n'ai pas essaye et ce n'est pas le principal, ici on s'occupe code en priorite.
mov handle,eax
ensiuite 3 fois invoke avec handle en param.
Non et non, ecris en C sur VS 2003, tu auras un code 10 fois meilleur. On utilise les registres et non relire 3 fois de suite la meme adresse memoire.
sibi12
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006
-
Sous XP certaines application sont protégé contre ce genre code. Tu peux esayer sur une appli VB ça marche nickel par contre.

bien vu BruNews. j'avais eu quelque problème avec mes invoke au départ après mainte modification j'ai essayer en en mettant pas de registre. j'ai oublier de le remettre par la suite.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.