Windows病毒编制的关键技术

发表于:2015-08-15 14:54 阅读:

  在Win32下编写病毒不是一件困难的事情,但是,在Win32下的系统功能调用不是通过中断来实现,而是由DLL中导出,直接在病毒中得到API入口不是一件容易的事。因为在同一个版本的Windows下,同一个核心函数的入口总是固定的(指由Kernel32gdi32user32导出的函数),因此可以用以下的方法得到函数入口:

  .386p
  .model 
flat,stdcall
  extrn 
GetModuleHandleA:proc
  extrn 
GetProcAddress:proc
  extrn 
ExitProcess:proc
  
.data
  szKernel db 
''KERNEL32.DLL'',0
  szFindFirst db 
''FindFirstFileA'',0
  szFindNext db 
''FindNextFileA'',0
  szFindClose db 
''FindClose'',0
  szGetCurrentDir db 
''GetCurrentDirectoryA'',0
  szGetWinDir db 
''GetWindowsDirectoryA'',0
  szGetSysDir db 
''GetSystemDirectoryA'',0
  szGetFileAttrib db 
''GetFileAttributesA'',0
  szSetFileAttrib db 
''SetFileAttributesA'',0
  szlopen db 
''_lopen'',0
  szlread db 
''_lread'',0
  szlwrite db 
''_lwrite'',0
  szlclose db 
''_lclose'',0
  szllseek db 
''_llseek'',0
  hKernel dd 0

  ;初始代码
  start:    push szKernel
  call 
GetModuleHandleA
  mov 
hKernel,eax
  push 
szFindFirst
  push 
hKernel
  call 
GetProcAddress
  mov 
FindFirstFile,eax
  
....
  jmp VirusStart

  InitExit:  push 0
  call ExitProcess

  VirusStart:  jmp Entry
  HostEntry dd 
InitExit
  FindFirstFile dd 
0
  FindNextFile dd 
0
  
...
  
Entry:
  
...
  end start

  在初始代码处得到要用的函数入口并将它填入病毒中,在病毒运行时就可以直接使用了。

  另一种变通的方法是截留文件I/O操作。在Windows下截留文件I/O操作有多种方法,在病毒中使用的主要有两种。 

  1、使用VxDCall IFSMgr_InstallFileSystemHook
  2、截留Kernel32.dll中导出的第一个函数VxDCallDOSint 21h的呼叫(EAX=2A0010)。 

  VxDCall的代码如下: 

mov eax, dword ptr [esp+04] 

pop dword ptr [esp] 

call fword ptr cs:[xxxxxxxx] 

  其他寄存器为调用时所需的值,以后的就和在DOS下写病毒没什么差别了。

此文章节选自《计算机病毒与木马程序剖析》

 

 


(非特殊说明,本文版权归原作者所有,转载请注明出处 )
鸣人致力于为企业提供数据恢复、机房建设、数据库运行、运营及安全等全方位服务。




想在手机上、随时获取互联网前沿、设计资讯以及各种意想不到的"福利"吗?通过微信扫描二维码快速添加