Vous êtes sur la page 1sur 25

Gnralit. 2 Que sont les API ?. 2 Applications : 3 Les bibliothques d'API les plus courantes.

3 Les diffrentes API et leur fonction. 4 A/ Lecture criture de fichier : 4 ReadFile. 4 WriteFile. 4 _lread. 4 _lwrite. 5 B/ Plus orient sur la localisation de fichier : 5 SetFilePointer 5 GetSystemDirectory(A) 5 GetPrivateProfileString(A) 6 GetPrivateProfileInt(A) 6 WritePrivateProfileString (A) 6 WritePrivateProfileInt(A) 7 C/ Base de registres Windows : 7 RegCreateKey(A) 7 RegDeleteKey(A) 8 RegQueryValueExA.. 8 RegCloseKey(A) 9 RegOpenKey(A) 9 D/ Bote de dialogue : 9 GetWindowText(A) 9 GetDlgItemText(A) 9 GetDlgItemInt 10

Hmemcpy. 10 MessageBox(A) 11 MessageBoxExA.. 12 MessageBeep. 12 ShowWindow.. 13 SendMessage. 13 WSPRINTF. 13 E/ Date et heure : 14 GetSystemTime. 14 GetLocalTime. 14 SystemTimeToFileTime. 14 SetTimer 14 F/ Gnration dune fentre : 15 CreateWindow.. 15 CreateWindowExA.. 15 Bitblt (similaire hmemcpy) 15 G/ Appel au CD-ROM... 16 GetDriveType(A) 16 GetLogicalDrives(A) 16 GetLogicalDriveStrings(A) 16 GetWindowWord. 17 GetWindowLong. 17 H/ Messages : 17 BMSG xxxx WM_GETTEXT. 17 BMSG xxxx WM_COMMAND.. 18

Gnralit
Que sont les API ?
API est l'abrviation de "Application Programming Interface" soit en franais "Interfaces de Programmation d'applications". En fait ce sont des procdures stockes dans des bibliothque (DLL : "Dynamic-Link Library" = en franais "Bibliothques de liaisons dynamiques" : librairie contenant des procdures appelable depuis plusieurs programmes) et que l'ont peut appeler depuis plusieurs programmes. L'interface de programmation Win32 (Win32 API) est commune aux systmes d'exploitation Windows 95 et Windows NT. Les API Windows offrent aux programmeurs la possibilit d'interagir avec le systme d'exploitation. Elles offrent des possibilits presque infinies, et dpassent de trs loin les possibilits apportes par les environnement de dveloppement (Visual Basic, Windev, ...). Par exemple, elles vous permettront de contrler une application, d'accder la base de registres, de jouer des sons, etc ... Les API ne sont en fait que des fonctions semblables celle que vous pouvez crer dans votre environnement de dveloppement : en rgle gnrale, on leur fournit un certain nombre de paramtres, et elles renvoient quelque chose, ou ralisent une action prcise. Ces fonctions sont contenues dans des fichiers dll, tels "user32.dll", "kernel32.dll", ou bien d'autres encore. Les fonctions les plus couramment utilises sont celles qui constituent Microsoft Windows lui-mme. Ces procdures sont toutefois crites en langage C, et doivent donc tre dclares avant de pouvoir les utilises avec d'autres langages. Les API Windows sont plutt faciles utiliser, une fois que l'on connat leur dclaration et leurs paramtres. Leurs difficults sont autres : les problmes se posent gnralement lorsqu'on cherche l'API qui nous rendrait service, puisqu'on se trouve alors confront des milliers de fonctions aux noms pas toujours trs explicites. Lorsque enfin on a trouv celle qui convient, on dcouvre qu'on est incapable de l'utiliser, car on ne connat ni sa dclaration, ni ses paramtres, ni son utilisation ! Pour rsoudre ce problme, il n'y a pas cinquante solutions : la premire est de chercher des exemples utilisant cette API, la deuxime est d'acqurir un livre spcialis sur les API (il n'en existe que quelques uns en franais) ; leur prix avoisine gnralement les 400 F (le livre de Richard Simon et al. de chez S&SM Ressources D'EXPERTS : Programmation des API WIN32, est trs bien). Cela dit, elle peut souvent se montrer utile, ne serait-ce que pour savoir quelle API peut nous servir. Enfin, dernires ressources possibles, trs intressantes, mais malheureusement en C++ : la documentation de Visual C++, qui propose une liste de toutes les API, ou, si vous n'avez pas Visual C++, le MSDN Online sur le site de Microsoft (qui contient entre autres cette documentation), ou encore le fichier d'aide win32.hlp (Win32 programmers Reference), diponible en tlchargement gratuitement (attention, le zip avoisinne les 6-7 Mo ...). Ce fichier d'aide contient une description trs complte des APIs de Widows, des structures utiliser, etc, mais l encore, en C++...

Applications :
Utiliser des fonctions multimdia. Attaquer des fonctions du noyaux Windows (mmoire, processus, etc...). Travailler dans la base de registres. etc ...

Les bibliothques d'API les plus courantes


Fichier Advapi32.dll Description Bibliothque de services API avancs grant de nombreuses API, y compris de nombreux appels de scurit et de registre

Comdlg32.dll Bibliothque d'API de bote de dialogue commune Gdi32.dll Bibliothque d'API pour priphrique interface graphique

Kernel32.dll Support d'API de base pour les noyaux Windows 32 bits Lz32.dll Mpr.dll Routines de compression 32 bits Bibliothque de routeurs fournisseurs multiples

Netapi32.dll Bibliothque d'API rseau 32 bits Shell32.dll User32.dll Version.dll Winmm.dll Winspool.drv Bibliothque d'API Shell 32 bits Bibliothque pour routines d'interfaces utilisateur Bibliothque de versions Bibliothque multimdia Windows Interface de spouleur d'impression contenant des appels API de spouleur d'impression

Les diffrentes API et leur fonction


A/ Lecture criture de fichier :
Appel gnrique sur la lecture et lcriture dun fichier, habituellement de nature binaire :

ReadFile
Lit les donnes d'un fichier.
BOOL ReadFile( HANDLE hFile, // handle du fichier lire LPVOID lpBuffer, // pointeur vers le tampon charg de rcuprer les donnes lu dans le fichier. DWORD nNumberOfBytesToRead, // nombre d'octets lire dans le fichier LPDWORD lpNumberOfBytesRead, // pointeur vers une variable charge de recueillir le nombre d'octets lus. LPOVERLAPPED lpOverlapped // pointeur vers une structure OVERLAPPED. Cette structure est ncessaire si le fichier est cr avec l'attribut FILE_FLAG_OVERLAPPED. );

Code de retour : TRUE si la fonction a t excute avec succs, FALSE dans le cas contraire.

WriteFile
Ecrit des donnes dans un fichier.
BOOL WriteFile( HANDLE hFile, // handle du fichier l'intrieur duquel la fonction doit crire. LPCVOID lpBuffer, // pointeur vers le tampon contenant les donnes crire. DWORD nNumberOfBytesToWrite, // nombre d'octets crire dans le fichier. LPDWORD lpNumberOfBytesWritten, // pointeur vers une variable charge de recueillir le nombre d'octet effectivement crits par la fonction. LPOVERLAPPED lpOverlapped // pointeur vers une structure OVERLAPPED. Cette structure est ncessaire si le fichier est cr avec l'attribut FILE_FLAG_OVERLAPPED. );

Code de retour : TRUE si la fonction a t excute avec succs, FALSE dans le cas contraire.

_lread
La fonction _lread lit les donnes dun fichier spcifi. Cette fonction est prvue pour les applications 16 bits. Les applications bases sur 32 bits devront utiliser la fonction ReadFile.

UINT _lread( HFILE hFile, // handle du fichier lire. LPVOID lpBuffer, // pointeur vers le tampon charg de rcuprer les donnes lu dans le fichier. UINT uBytes // longueur, en octet, du buffer de donnes. );

Code de retour : La valeur retourne indique le nombre doctets actuellement lu dans le fichier. Si le nombre doctets lu est moins important que uBytes, la fonction a atteint la fin du fichier (EOF) avant de lire le nombre doctets spcifi. Si la fonction choue, la valeur de retour est HFILE_ERROR.

_lwrite
La fonction _lwrite crit des donnes dans un fichier spcifi. Elle est utilise dans des applications 16 bits (WriteFile sera utilise pou les appli 32 bits)
UINT _lwrite( HFILE hFile, LPCSTR lpBuffer, contenant les donnes crire. UINT uBytes ); // handle du fichier crire. // pointeur vers le tampon // nombre doctets crire.

Code de retour : En cas de succs, la valeur retourne indiquera le nombre doctets actuellement crit dans le fichier. Si la fonction choue, la valeur de retour est HFILE_ERROR.

B/ Plus orient sur la localisation de fichier :


SetFilePointer
Dplace le pointeur d'un fichier ouvert. DWORD SetFilePointer ( HANDLE hFile, // handle du fichier dont le pointeur doit tre modifi LONG lDistanceToMove, // distance sur laquelle le pointeur doit tre modifi PLONG lpDistanceToMoveHigh, // pointeur vers les 32 bits de poids fort reprsentant la distance sur laquelle le pointeur doit tre dplac. lpDistanceToMoveHigh est galement charg de rcuprer la nouvelle valeur du mot de poids fort de la position du pointeur.

DWORD dwMoveMethod // Position de dpart du pointeur


) ;

FILE_BEGIN = 0 FILE_CURRENT = 1 FILE_END = 2

La position de dpart correspond au dbut du fichier. La position actuelle du curseur reprsente le point de dpart. La position de dpart est gale la fin du fichier.

Code de retour : Si la fonction a t excute avec succs, elle retourne les 32 bits de poids faible reprsenatnt la nouvelle position du curseur. Si la fonction choue, le code de retour est 0xFFFFFFFF.

GetSystemDirectory(A)
Permet de connatre le nom du rpertoire Windows\System (pour la premire fonction) et le nom du rpertoire Windows pour la seconde. UINT GetSystemDirectory( LPTSTR lpBuffer, // Chane qui recevra en retour le nom du rpertoire UINT uSize // Taille de la chane qui recoit le rsultat ); Renvoie la longueur du rsultat donn si la fonction a russi, sinon 0. Si l'erreur vient du fait que la taille de la chane n'est pas assez importante, le rsultat retourn est la longueur prvoir pour rcuprer le rsultat.

Appel la lecture et criture de fichier de type *.INI :

GetPrivateProfileString(A)
La fonction GetPrivateProfileString rcupre une chane de caractres dune section spcifie dans un fichier dinitialisation. Cette fonction est prvue pour une compatibilit avec les applications 16 bits. Les applications 32 bits devront stocker leur information dinitialisation dans la base de registre.
DWORD GetPrivateProfileString( LPCTSTR lpAppName, la section. LPCTSTR lpKeyName, la cl. LPCTSTR lpDefault, chane de caractres par dfaut // pointe vers le nom de // pointe vers le nom de // pointe vers la

LPTSTR lpReturnedString pointe vers le buffer de destination DWORD nSize, de destination LPCTSTR lpFileName fichier dinitialisation );

// // taille du buffer // pointe vers le

Code de retour : Si la fonction a t excute avec succs, la valeur de retour est le nombre de caractres copis dans le buffer, en excluant le caractre de terminaison NULL. Si ni lpAppName ni lpKeyName sont NULL et le buffer de destination est trop petit pour recevoir la chane de caracatres demande, la chane est tronque et suivie par un caractre null, et la valeur retourne est gal nSize moins un. Si lpAppName ou lpKeyName sont NULL et le buffer de destination est trop petit pour recevoir toutes les chanes de caracatres, la dernire chane est tronque et suivie par deux caractres null. Dans ce cas, la valeur retourne est gal nSize moins deux.

GetPrivateProfileInt(A)
La fonction GetPrivateProfileInt rcupre un entier associ avec une cl dune section spcifie dun fichier dinitialisation donn. Cette fonction est prvue pour une compatibilit avec les applications 16 bits. Les applications 32 bits devront stocker leur information dinitialisation dans la base de registre.
UINT GetPrivateProfileInt( LPCTSTR lpAppName, la section. LPCTSTR lpKeyName, la cl. INT nDefault, retour si la cl na pas t trouve LPCTSTR lpFileName dinitialisation ); // pointe vers le nom de // pointe vers le nom de // valeur de // pointe vers le fichier

Code de retour : Si la fonction a t excute avec succs, la valeur retourne est un entier quivalent la chane succdant le nom de cl dans le fichier dinitialisation spcifi. Si cette cl nest pas trouve, la valeur retourne sera gale la valeur spcifie par dfaut. Si la valeur de la cl est plus petite que zro, la valeur retourne sera gale zro.

WritePrivateProfileString (A)
La fonction WritePrivateProfileString copie une chane de caractres dans une section dun fichier dinitialisation spcifi.

Cette fonction est prvue pour une compatibilit avec les applications 16 bits. Les

applications 32 bits devront stocker leur information dinitialisation dans la base de registre.

BOOL WritePrivateProfileString( LPCTSTR lpszSection, section. LPCTSTR lpszKey, cl. LPCTSTR lpszString, caractres ajouter LPCTSTR lpszFile dinitialisation );

// pointe vers le nom de la // pointe vers le nom de la // pointe vers la chane de // pointe vers le fichier

Code de retour : Si la fonction copie avec succs la chane de caractres vers le fichier dinitialisation, la valeur retourne est TRUE. Si la fonction choue, la valeur retourne est FALSE.

WritePrivateProfileInt(A)
Au niveau des interruptions : Bpint 21 if (ah==3d) Bpint 2f if (ah==01)

C/ Base de registres Windows :


Cration ou suppression dune cl dans la base de registres :

RegCreateKey(A)
Cre ou ouvre une sous-cl de la cl spcifi. LONG RegCreateKeyEx( HKEY hKey, // handle d'une cl ouverte sous laquelle il faut crer la nouvelle cl, ou tout autre handle de cl prdfini (cf tableau ci-dessous) LPCTSTR lpszSubKey, // pointeur vers une chaine de caractres contenant le nom de la nouvelle sous-cl. Si la sous-cl existe dj, elle est ouverte. DWORD dwReserved, // dfinir cette valeur sur NULL.

LPTSTR lpszClass, // pointeur vers une chaine de caractres contenant le nom de classe de la cl. Si la cl existe dj, on ignore ce paramtre. DWORD dwOptions, // options de stockage spcial associes la cl REGSAM samDesired, // options d'accs aux cls LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointeur vers une structure SECURITY_ATTRIBUTES qui spcifie les attributs de scurit par dfaut. PHKEY phkResult, // pointeur vers l'emplacement recevant l'handle de la nouvelle souscl. LPDWORD lpdwDisposition // pointeur vers une valeur de disposition indiquant si la souscl a t cre (REG_CREATED_NEW_KEY = &H1) ou si une sous-cl existante a t ouverte (REG_OPENED_EXISTING_KEY = &H2)
) ;

HKEY_CLASSES_ROOT &H8000000 0 HKEY_CURRENT_USE &H8000000 R 1 HKEY_LOCAL_MACHI &H8000000 NE 2 HKEY_USERS &H8000000 3

Code de retour : ERROR_SUCCESS est retourn en cas de succs ; dans le cas contraire, la fonction transmet un code d'erreur.

RegDeleteKey(A)
Supprime une sous-cl d'une cl donne. LONG RegDeleteKey ( HKEY hKey, // handle d'une cl ouverte ou tout autre handle de cl prdfini LPCTSTR lpszSubKey // pointeur vers une chaine de caractres contenant le nom de la sous-cl supprimer. La cl spcifie ne doit pas possder de sous-cl
) ;

Code de retour : ERROR_SUCCESS est retourn en cas de succs ; dans le cas contraire,

la fonction transmet un code d'erreur.

Lecture dune valeur dune cl dans la base de registres :

RegQueryValueExA
Cette fonction est utiliser pour rcuperer la valeur d'une cl que l'on aura ouvert ou cre au pralable. hKey est le handle retourn par la fonction d'ouverture ou de cration. lpValueName est le nom de la valeur que l'on veut rcuperer. Pour les valeurs "(Dfaut)" il faut donner une chane vide en paramtre. lpReserved, rserv, mettre 0. lpType stocke le type de donne qui sera rcupr. Les valeurs possibles sont donnes dans le tableau ci-dessous. lpData est la variable dans laquelle sera retourne la valeur lue. lpcbData est la longueur du buffer lpData. Aprs execution de la fonction elle retourne la longueur relle de la variable lpData. Constante
Const REG_NONE = 0 Const REG_SZ = 1 Const REG_BINARY = 3 Const REG_DWORD = 4 Const REG_DWORD_BIG_ENDIAN = 5 Const REG_LINK = 6 Const REG_MULTI_SZ = 7

Dfinition Non dfini. Chane termin par un caractre nul. Valeur binaire. Mot sur 4 octets. Mot sur 4 octets dont le poids fort est l'adresse infrieure. Dfinition d'un lien. Ensemble de chanes termines par un caractre nul. La fin est signale par deux caractres nul.

Communique une valeur nomme de sous-cl. LONG RegQueryValueEx ( HKEY hKey, // handle de la sous-cl consulter ou tout autre handle de cl prdfini LPCTSTR lpszSubKey, // pointeur vers une chaine de caractres contenant le nom de la cl dont la valeur est demande LPTSTR lpszValueName, // pointeur vers une chaine de caractre contenant le nom de la valeur lire LPDWORD lpdwReserved, // rserv. Dfini sur NULL

LPDWORD lpdwType, // type de donnes stockes dans la valeur LPBYTE lpData, // pointeur vers le tampon recevant les donnes stockes dans la valeur LPDWORD lpdwcData // pointeur vers un DWORD contenant le nombre d'octets disponibles dans le tempon lpData. Aprs l'appel, le systme dfinit le contenu sur le nombre d'octets vritablement copis
) ;

Code de retour : ERROR_SUCCESS est retourn en cas de succs ; dans le cas contraire, la fonction transmet un code d'erreur.

Ouverture ou fermeture dune cl :

RegCloseKey(A)
Ferme l'handle d'une cl ouverte. LONG RegCloseKey ( HKEY hKey // handle de la cl fermer ); Code de retour : ERROR_SUCCESS est retourn en cas de succs ; dans le cas contraire, la fonction transmet un code d'erreur.

RegOpenKey(A)
Ouvre une sous-cl de registre. LONG RegOpenKeyEx ( HKEY hKey, // handle de la cl qui est la touche parent de la sous-cl ouvrir LPCTSTR lpszSubKey, // pointeur vers une chaine de caractres contenant le nom de la sous-cl ouvrir DWORD dwReserved; // rserv. Dfini sur zro REGSAM samDesired, // masque de scurit PHKEY phkResult // pointeur d'un emplacement o l'handle de la cl est stock
) ;

Code de retour : ERROR_SUCCESS est retourn en cas de succs ; dans le cas contraire, la fonction transmet un code d'erreur.

D/ Bote de dialogue :
Saisie de donnes alphanumriques depuis une bote de dialogue

GetWindowText(A)
Rcupre le titre d'une fentre, d'un contrle ou d'une zone de saisie. INT GetWindowText ( HWND hwnd, // handle de la fentre ou du contrle contenant le texte LPTSTR lpsz, // pointeur vers un tampon qui recevra le texte int nChars // nombre maximum de caractres copier dans le tampon. Les caractres dpassant la limite seront tronqus ); Code de retour : Si la fonction est excute avec succs, la valeur retourne est le nombre de caractres copis dans le tampon

GetDlgItemText(A)
La fonction GetDlgItemText rcupre le titre ou le texte associ avec une bote de dialogue.
UINT GetDlgItemText( HWND hDlg, int nIDDlgItem, dialogue LPTSTR lpString, texte int nMaxCount ); // handle de la bote de dialogue // identifiant de la bote de // pointe vers le buffer pour le // taille maximum de la chane

Code de retour : Si la fonction est excute avec succs, la valaur de retour spcifie le nombre de caractres copis dans le buffer, en excluant le caractre de terminaison null. Si la fonction choue, la valeur retourne est zro.

GetDlgItemInt
La fonction GetDlgItemInt convertie le texte dune bote de dialogue spcifie en une valeur entire. The GetDlgItemInt function translates the text of a specified control in a dialog box into an integer value.
UINT GetDlgItemInt( HWND hDlg, // handle de la bote int nIDDlgItem, // identifiant de la dialogue BOOL* lpTranslated, // pointe vers une variable lindicateur de rception (succs/echec) BOOL bSigned // spcifie si la valeur non ); de dialogue bote de pour recevoir est signe ou

Code de retour : Si la fonction est excute avec succs, la variable pointe par lpTranslated est mise TRUE, et la valeur retourne est la valeur convertie du texte. Si la fonction choue, la variable pointe par lpTranslated est mise FALSE, et la valeur retourne est zro. Si lpTranslated est NULL, la fonction retournera aucune information sur son succs ou son chec. Si le paramtre bSigned est TRUE, spcifiant que la valeur extraire est un nombre entier signer, la valeur retourne sera alors de type INT.

Hmemcpy
Hmemcpy est utilise pour la saisie des chanes de caractres au clavier (comme le nom et le numro de srie) afin de permettre leur manipulation, leur comparaison... Vous pouvez posez un point d'arrt qui se dclenchera ds son l'utilisation: bpx hmemcpy, et partir ensuite la pche du bon srial. Pour cela, commencez par renseigner les champs de la bote d'enregistrement, puis faites CTRL-D pour pouvoir entrer le breakpoint sur la ligne de commande de SoftIce, puis quittez le dbuggueur (F5), et validez vos entres en cliquant sur le bouton [OK], (ou Register...). Si cette fonction est sollicite (ce qui est majoritairement le cas), SoftIce apparatra immdiatement. Vous serez dans des routines du genre USER (0A) qui ne vous apporteront rien. Pour en sortir vous devrez tapez sur [F12] (Return After Call) pour revenir au listing de votre programme / cible, dont vous verrez le nom apparatre sur la ligne qui spare la fentre des

codes de celle des commande de SoftIce. Bien souvent, l'application qui vous intresse sera trouve aprs un KERNEL32! _FREQASM, et dans certains cas c'est un call GetDlgItemtextA, ou un call GetWindowTextA qui l'aura appel. Pour chacun des champs qu'aura pu contenir la boite de dialogue que vous aurez remplie, vous aurez un break sur Hmemcpy. Suivant les cas, la sortie des kernels se fera soit sur le mme call d'appel (dans l'application), soit des calls differents: Call Nom Call Company Call Serial C'est principalement le call li la saisie de votre numro de srie qui prsentera de l'intrt, et c'est partir de ce dernier qu'il va falloir tre vigilant, et partir la recherche de tests, de comparaisons, ou de branchements (JNE, JNZ, JE, JZ...). CALL 0041EF84
MOV EAX EAX,[EBP-14] < votre srial stock dans

MOV EDX,[004738D4] < le bon srial stock dans EDX CALL 00403D8C < call de la routine de comparaison des 2 srials JNZ 00466E39 < jump registered si OK (not zro) MOV EAX,00466F34 -----------. CALL 0043C650 | JMP 00466EA2 |-- si pas OK, met zro, MOV EAX,004738D4 | et va en unregistered. MOV EDX,00466F7C | CALL 00403A54 -----------' Pour connatre le contenu des registres, dans SoftIce, entrez "d edx" (sans les guillemets), et vous verrez le contenu de ce registre (forme ASCII) s'afficher dans la fentre des Datas (WD nb de lignes -> WD 8). Si vous tapez "? edx", vous obtiendrez la valeur hexadcimale de EDX (parfois utile quand le srial n'est pas gr au format ASCII). Vous n'aurez pas toujours la chance de trouver le bon srial pouss dans un registre, mais vous pourrez peut tre en trouver l'cho en utilisant l'ascenseur de la fentre de Datas pour regarder plus ou moins 80 lignes au dessus et en dessous de l'adresse o se sera affich le numro de srie que vous avez entr. Une autre routine trs commune peut tre trouve sous cette forme: PUSH EAX < pousse une valeur sur la pile

CALL 004067CC < compare cette valeur avec une autre ADD ESP,04 TEST EAX,EAX < test si le rsultat de la comparaison est satisfaisante JNZ 00402B68 < jump en registered si <> de zro PUSH 0040B61B < hmm....et c'est quoi a? PUSH 64 PUSH EBX
CALL Code Invalide 00402133 < affichage de l'cran

Dans cette exemple, le bon srial est pouss sur le dessus de la pile (Push eax) pour tre trait dans le call suivant. Interrogez le registre EAX (d eax) pour en connatre le contenu. A la sortie du Call, EAX a chang de valeur, et si EAX est diffrent de 0, vous sauterez la routine Code valide. (Il est bon de prciser qu'il est prfrable de trouver OU eax peut prendre la valeur 0 ou 1 dans le call 004067CC, plutt que de se contenter d'inverser le branchement JNZ 00402B68). Le Push 00402B61B, lui, va pousser sur la pile le contenu de l'adresse mmoire 0040B61B, qui aura la forme, cet endroit, du message "Code Invalide".

Ouverture dune bote dans laquelle nous avons frquemment le message Invalid registration :

MessageBox(A)
Cration, affichage et toute opration sur les botes de bialogue. La bote de dialogue (ou message) contient un message et un titre bien dfinie, ainsi que les infos sur les icnes et boutons.
INT MessageBox( HWND hWnd, propritaire LPCTSTR lpText, dans la bote LPCTSTR lpCaption, UINT uType icne, ) ); // handle de la fentre du // pointe vers le texte contenu // pointe vers le titre de la bote // style de la bote (bouton,

Code de retour : La valeur retourne est zro i il ny a pas assez de mmoire pour crer la bote de message. Si la fonction est excut avec succs, la valeur retourne est lune des suivantes :

IDABORT, IDCANCEL, IDIGNORE, IDNO, IDOK, IDRETRY, IDYES Si une bote de message possde un bouton Cancel, la fonction retourne la valeur IDCANCEL si les boutons ESC ou CANCEL sont slectionns. Si la bote de message ne possde pas de bouton CANCEL, la touche ESC naura aucun effet.

MessageBoxExA
Cration, affichage et toute opration sur les botes de bialogue. La bote de dialogue (ou message) contient un message et un titre bien dfinie, ainsi que les infos sur les icnes et boutons. Le paramtre wLanguageId spcifie quel langage est utilis dans la dfinition des boutons par exemple.
INT MessageBoxEx( HWND hWnd, // handle de la fentre du propritaire LPCTSTR lpText, // pointe vers le texte contenu dans la bote LPCTSTR lpCaption, // pointe vers le titre de la bote UINT uType, // style de la bote (bouton, icne, ) WORD wLanguageId // identifiant du langage utilis (Exemple : LANG_ENGLISH, LANG_FRENCH, ) );

Code de retour : Si la fonction est excute avec succs, la valeur retourne sera gale au choix (une valeur retourne) effectu dans la bote de dialogue : Valeur Signification IDABORT Bouton Abort a t slectionn. IDCANCEL Bouton Cancel a t slectionn. IDIGNORE Bouton Ignore a t slectionn. IDNO Bouton No a t slectionn. IDOK Bouton OK a t slectionn. IDRETRY Bouton Retry a t slectionn. IDYES Bouton Yes a t slectionn.

MessageBeep
Joue un evnement sonore. Cet venement est identifi par une entre dans la section [sounds] de la base de registre.

The waveform sound for each sound type is identified by an entry in the [sounds] section of the registry.
BOOL MessageBeep( UINT uType ); // type du son

Code de retour : Si la fonction est excute avec succs, la valeur retourne est TRUE. Si la fonction choue, la valeur retourne est FALSE.

ShowWindow
La fonction ShowWindow indique ltat (visuel) dune fentre.
BOOL ShowWindow( HWND hwnd, int nCmdShow de la fentre ); // handle de la fentre // montre ltat

Code de retour : Si la fentre tait prcdemment visible, le code de retour sera TRUE. Par contre si la fentre tait cache, le code de retour sera FALSE.

Dautres possibilits sur lapparition de texte :

SendMessage
La fonction SendMessage envoie un message spcifi vers une ou plusieurs fentres.
LRESULT SendMessage( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); // handle de la fentre de destination // message envoyer // paramtre du 1er message // paramtre du 2me message

Code de retour : La valeur retourne dtermine le resultat du traitement du message et depend du message envoy.

WSPRINTF
La fonction Wsprintf prpare et positionne une srie de caratres et valeurs dans un buffer. Tous les arguments sont convertis et copis dans le buffer de sortie selon le format spcifi de la chane de caractres. La fonction ajoute le caractre de terminaison null aux caractres crits, mais la valeur retourne ninclus pas le caratre de terminaison null dans son comptage de caratres.

int wsprintf(
LPTSTR lpOut, recevoir la sortie formatte // pointe vers le buffer pour

LPCTSTR lpFmt // pointe vers un caractre de terminaison null qui contient les spcifications de format de contrle ... // arguments optionnels
);
Code de retour : Si la fonction est excute avec succs, le valeur retourne correspond au nombre de caractres stocks dans le buffer de sortie, sans compter le caractre de terminaison null.

Si la fonction choue, la valeur retourne est moins grande que la longueur de la chane de car du faormat de contrle.

E/ Date et heure :
GetSystemTime
Rcupre l'heure systme.
VOID GetSystemTime( LPSYSTEMTIME lpSystemTime // pointeur vers une structure SYSTEMTIME recevant l'heure systme courante );

Code de retour : cette fonction ne retourne aucune valeur

GetLocalTime
Rcupre l'heure locale. VOID GetLocalTime( LPSYSTEMTIME lpSystemTime // pointeur vers une structure LPSYSTEMTIME contenant la date et l'heure locale.
);

Code de retour : Cette fonction ne retourne aucune valeur.

SystemTimeToFileTime
La fonction SystemTimeToFileTime convertie une date sytme vers un fichier date.
BOOL SystemTimeToFileTime( CONST SYSTEMTIME * lpst, // pointe vers la date systme convertir address of system time to convert LPFILETIME lpft // pointe vers un buffer pour le fichier date convertie );

Code de retour : Si la fonction est excute avec succs, la valeur retourne est TRUE. Si la fonction choue, la valeur retourne est FALSE.

SetTimer
La fonction SetTimer cre un timer avec la valeur dun temps restant couler. UINT SetTimer( HWND hWnd, // handle de la fentre pour les messages timer UINT nIDEvent, // identifiant du timer UINT uElapse, // valeur du time-out en millisecondes TIMERPROC lpTimerFunc // pointe vers la procdure du timer ); Si lpTimerFunc est NULL, le system poste un message WM_TIMER vers lapplication en attente. Code de retour : Si la fonction est excute avec succs, la valeur retourne est un entier assimil au nouveau timer. Si la fonction choue la cration dun timer, la valeur de retour sera zro.

F/ Gnration dune fentre :


CreateWindow
La fonction CreateWindow cre un pop-up ou un fentre enfant. Elle spcifie la classe, le titre, le style de la fentre et (optionnellement) la position initiale et la taille de la fentre. La fonction spcifie donc la fentre parent ou propritaire, si existante, et le menu de la fentre.
HWND CreateWindow( LPCTSTR lpClassName, classe enregistre LPCTSTR lpWindowName, fentre DWORD dwStyle, int x, coordone horizontale de la fentre int y, coordone verticale de la fentre int nWidth, de la fentre int nHeight, // pointe vers le nom de // pointe vers le nom de la // style de fentre // // // largeur // hauteur

de la fentre HWND hWndParent, parent ou propitaire HMENU hMenu, de lindentifiant de la fentre fille HANDLE hInstance, lapplication instance LPVOID lpParam donnes de la fentre de cration );

// handle de la fentre // handle du menu ou // handle de // point vers les

Code de retour : Si la fonction russie, la valeur retourne est lhandle de la nouvelle fentre. Si la fonction choue, la valeur retourne est NULL.

CreateWindowExA
Idem CreateWindow mais avec un style tendu.
HWND CreateWindowEx( DWORD dwExStyle, tendue LPCTSTR lpClassName, classe enregistre LPCTSTR lpWindowName, fentre DWORD dwStyle, int x, coordone horizontale de la fentre int y, coordone verticale de la fentre int nWidth, de la fentre int nHeight, de la fentre HWND hWndParent, parent ou propitaire HMENU hMenu, de lindentifiant de la fentre fille HINSTANCE hInstance, lapplicationinstance LPVOID lpParam donnes de la fentre de cration ); // style de fentre // pointe vers le nom de // pointe vers le nom de la // style de fentre // // // largeur // hauteur // handle de la fentre // handle du menu ou // handle de // point vers les

Code de retour : Si la fonction russie, la valeur retourne est lhandle de la nouvelle fentre. Si la fonction choue, la valeur retourne est NULL.

Bitblt (similaire hmemcpy)


La fonction BitBlt effectue un transfert de bits de donne couleur correspondant un rectangle de pixels dun contexte source spcifi vers un contexte destination.
BOOL BitBlt( HDC hdcDest, int nXDest, haut gauche du int nYDest, haut gauche du int nWidth, destination int nHeight, destination HDC hdcSrc, int nXSrc, haut gauche du int nYSrc, haut gauche du DWORD dwRop ); // handle du contexte destination // coordonnes x du coin rectangle de destination // coordonnes y du coin rectangle de destination // largeur du rectangle de // hauteur du rectangle de // handle du contexte source // coordonnes x du coin // coordonnes y du coin // code dopration de trame.

rectangle source rectangle source

Code de retour : Si la fonction russie, la valeur retourne est TRUE sinon FALSE.

G/ Appel au CD-ROM GetDriveType(A)


La fonction GetDriveType dtermine si un disque dur est amovible, fixe, CD-ROM, disque RAM ou lecteur rseau. UINT GetDriveType( LPCTSTR lpRootPathName // pointe vers le path root ); Code de retour : La valeur retourne spcifie le type de lecteur. Elle peut tre lune des suivantes : (si eax=00000005 alors CDROM prsent) GetDriveType retourne les codes suivants :
Valeur Association

0 Le lecteur ne peut tre dtermin 1 Le rpertoire Root nexiste pas

2 Lecteur amovible 3 Disque dur 4 Lecteur rseau 5 Lecteur CD-Rom 6 Disque Ram

GetLogicalDrives(A)
Retourne un bitmask reprsentant le lecteur disque actuellement utilis.
DWORD GetLogicalDrives(VOID);

Code de retour : Si la fonction russie, la valeur retourne est un bitmask reprsentant le lecteur disque actuellement utilis. Bit position 0 est le lecteur A, bit position 1 est le lecteur B, bit position 2 est le lecteur C, et ainsi de suite. Si la fonction choue la valeur retourne est zro.

GetLogicalDriveStrings(A)
Rempli un buffer avec des chanes qui spcifient les lecteurs valides du systme.
DWORD GetLogicalDriveStrings( DWORD nBufferLength, LPTSTR lpBuffer chanes du buffer pour les lecteurs ); // taille du buffer // pointe vers les

Code de retour : Si la fonction russie, la valeur retourne est la longueur, en caractres, des chanes copies dans le buffer, en excluant le caractre de terminaison null. Si le buffer nest pas assez large, la valeur retourne est plus grande que nBufferLength. Si la fonction choue la valeur retourne est zro.

Entre numrique dans une fentre :

GetWindowWord
La fonction GetWindowWord permet de connatre des informations propres la dfinition de la fentre
WORD GetWindowWord(

HWND hWnd, // handle de la fentre int nIndex // offset of value to retrieve

);
Code de retour : Si la fonction russie, la valeur retourne est une valeur 16 bit demande.

Si la fonction choue, la valeur retourne est zro.

GetWindowLong
Cette fonction permet de connatre des informations propres la dfinition de la fentre. WORD GetWindowLong(

HWND hWnd, // handle de la fentre int nIndex // offset of value to retrieve


);

Index contient une constante au choix dans la liste ci-dessous. Elle retourne zro en cas d'chec Constante
Public Const GWL_WNDPROC = (4) Public Const GWL_STYLE = (16) Public Const GWL_EXSTYLE = (20) Public Const GWL_HWNDPARENT = (-8) Public Const GWL_HINSTANCE = (-6)

Dfinition Pour connatre l'adresse de la fonction WindProc de la fentre.


Renvoie le style de la fentre.

Renvoie le style tendu de la fentre. Permet de rcuprer le handle de la fentre Parent. Pour rcuprer le handle de l'instance possdant la fentre.

H/ Messages :
BMSG xxxx WM_GETTEXT
(utile pour les mots des passes) WM_GETTEXT est utilis pour intercepter les donnes saisies par lutilisateur quand Windows les rend au programme original. xxxx est videmment la valeur de lhandle. Il y a divers moyen de connatre lhandle de la fentre, le plus facile tant dutliser un analyseur de fentres qui affiche les caractristiques dune fentre choisie (ex : win_frog,

SMU Winspector, ) mais vous pouvez utiliser la mthode suivante : Sous SoftIce, tape la commande TASK pour voir les process actifs , ensuite tu tapes HWND process_name (ou process_name est le nom du proces de ton programme) et aprs tu recevras une liste de tout les objets dans windows un dentre eux est celui qui tintresse . Il nest pas toujours simple de savoir celui qui tintresse et quelques tuts discutent de ce sujet. Je te conseille donc fortement dutiliser WinSpector par exemple.

BMSG xxxx WM_COMMAND


(utile pour les boutons OK)