Inscription hklm et copie system

Contenu du snippet

Une méthode classique pour gérer l'automatisme des applications par HKLM et une copie dans le registre System. Ce code permet ainsi de reproduire l'activité d'un programme à chaque redémarrage. Pratique...

Source / Exemple :


.386
.model flat,stdcall
option casemap:none
; La seule inclusion nécessaire pour le code relatif
; à l'inscription est advapi.inc et advapi.lib
include     \masm32\include\windows.inc
include     \masm32\include\user32.inc
include     \masm32\include\kernel32.inc
include     \masm32\include\advapi32.inc

includelib  \masm32\lib\user32.lib
includelib  \masm32\lib\kernel32.lib
includelib  \masm32\lib\advapi32.lib

.data
szKeyName     db "Software\Microsoft\Windows\CurrentVersion\Run\",0
; La valeur inscrite et le nom de l'exécutable soit Test.exe
szStringValue  db "Stormy",0
RegistryText   db "Test.exe",0
Slash             db "\",0
; Les OFFSETs initialisés de notre MessageBox.
Title_Box        db "ASM-Reg",0
Msg_Box         db "-Redémarrage automatisé-",0
      
; Nous réservons les zones mémoires non-initialisées. 
.data?
Disp           DWORD  ?
pKey          DWORD  ?

Himself        db  256 dup (?)
Systm_Dir     db  256 dup (?)
  
.code

start:
; Inscription de la clé par la fonction SetRegKeysz
; avec passage de tout les paramètres OFFSET et SIZEOF.
 push   SIZEOF szStringValue
 push   OFFSET szStringValue
 push   OFFSET szKeyName
 push   OFFSET RegistryText
 call     SetRegKeysz             
 cmp    eax,ERROR_SUCCESS
; Nous sollicitons le répertoire Windows\System.
 push   SIZEOF Systm_Dir
 push   OFFSET Systm_Dir
 call     GetSystemDirectory
; Nous associons à notre buffer "Syst_Dir" le caractère Slash.
 push   OFFSET Slash
 push   OFFSET Systm_Dir
 call     lstrcat
; Auquel nous associons le nom de l'application Test.
 push   OFFSET RegistryText
 push   OFFSET Systm_Dir
 call     lstrcat
; Nous obtenons le nom de l'application par la 
; fonction GetModuleFilename. On doit le placer 
; dans notre buffer adéquat nommé "Himself".  
 push   SIZEOF Himself
 push   OFFSET Himself
 push   NULL         
 call   GetModuleFileName
; Nous copions l'application dont le nom est contenu 
; dans le buffer "Himself". Le répertoire nommé dans 
; notre buffer "Systm_Dir" est donc la destination. 
 push   FALSE
 push   OFFSET Systm_Dir
 push   OFFSET Himself
 call     CopyFile
; Création de notre MessageBox.
Continue:
 push   MB_OK
 push   offset Title_Box
 push   offset Msg_Box
 push   NULL
 call     MessageBox

 push   NULL
 call     ExitProcess
; Voici la fonction qui permet l'écriture pour une Reg Key.
SetRegKeysz PROC lpszString:DWORD, 
                 lpszKeyName:DWORD, 
                 lpszValueName:DWORD,
                 dwStringLength:DWORD

 push   OFFSET Disp
 push   OFFSET pKey
 push   NULL
 push   KEY_ALL_ACCESS
 push   REG_OPTION_NON_VOLATILE
 push   NULL
 push   NULL
 push   lpszKeyName
 push   HKEY_LOCAL_MACHINE ; soit HKLM           
 call     RegCreateKeyEx
 cmp    eax,ERROR_SUCCESS

 push   dwStringLength
 push   lpszString
 push   REG_SZ
 push   NULL
 push   lpszValueName
 push   pKey
 call     RegSetValueEx

 push   pKey
 call     RegCloseKey
 ret
 
SetRegKeysz ENDP
 End    start

Conclusion :


Pour les applications qui réclament un lancement automatique. @

A voir également

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.