本文假定您对dos下的病毒和386PM有一定的了解。

1、感染任何一个病毒都需要有寄主,把病毒代码加入寄主程式中(伴侣病毒除外)

以下说明如何将病毒代码嵌入PE文档中,有关PE文档的结构请看以前的文章。 PE文档的典型结构:MZ Header DOS STUB CODE PE HEADER OPTIONAL HEADER SECTION TABLE SECTION 1 SECTION 2 ... IMPORT TABLE EXPORT TABLE 和DOS的可执行文档类似,PE的代码映象分为几个SECTION,在文档中会对齐页边界(4K)。一般来说,文档会加载在400000h开始的空间,而第一个SECTION在401000h处,同时入口地址也是401000h。

由高级语言编写的程式,每个SECTIO-N的长度不可能刚好是4K的倍数,因此在SECTION的末尾将会存在一段未用的空间,大小可由Section的PHYSICAL SIZE-VIRTUALSIZE得到,在文档中起始位置可由 PHYSICAL OFFSET得到,这段空间能够用来存放病毒代码。此外一般来说,MZ Header DOS STUD PEHEADER OPTIONAL HEADER SECTION TABLE但是1K左右,而SECTION 1由4K开始,空出来的地方足够存放一个设计精良的病毒。CIH就是将代码存放在这些空闲空间里。

2、分配驻留所需内存

对于驻留形的病毒,分配驻留所需内存是必需的。在DOS下使用由于任何的 应用程式都映射在相同的线性地址空间里,使用一般的内存分配调用就足够了。而在WIN32下,每个应用程式都有自己的线性地址空间,必须使用特别的函数分配2GB以上的系统地址。典型的如:VXD服务_PageAllocate,和kernel32的 VxDCALL _PageReserve。_PageAllocate请参看win98ddk中的说明,VxDCall _PageReserve 请参看HPS源码中的注释。

3、截留FILE I/O操作 驻留型的病毒通过截留FILE I/O来激活,能够通过使用VXD服务

IFSMgr_Install-FileSystemAPIHook(如CIH)或截留VxDCall中的DOS Services callback(如HPS)。

在Win32下编写病毒不是一件困难的事。值得注意的有几件事:

一、Win32下的系统功能调用不是通过中断实现,而是由DLL中导出

(直接使用VxD服务除外)。直接在病毒中得到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

.code

;Initialize code

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

在Intialize Code得到要用的函数入口并将他填入病毒中,在病毒运行时能够直接使用了。

本人的一台操作系统为Win2000 Server的笔记本电脑最近被感染了病毒,我首先用相关杀毒软件来扫描电脑,扫描报告如下:

病毒名称:Hacktool
文档名:c:/winnt/system32/ntservice.exe
操作:删除失败,隔离失败,访问被拒绝

如何才能完全 删除呢?

因为c:/winnt/system32/ntservice.exe已在运行了,直接删除显然是不可能的。于是我运行Windows任务管理器,在进程选 项卡中选择结束ntservice.exe进程,结果系统显示“无法中止进程,拒绝访问”。
我突然想到在Win 2000(XP)的控制台状态下是可 以用DOS命令的。

什么是控制台

控制台是Windows的一种简易运行模式,他能够不启动图像界面而在命令行状态下有限制地访问 FAT和NTFS分区,并对系统进行一些配置和操作。
通过控制台,我们能够更换系统文档、关闭或禁用某个系统服务、禁用或卸载硬件 设备、修复引导扇区、新建分区连同格式化硬盘分区等。

启动控制台

对于Windows 2000,我们能够用光盘启动电脑,然后在安 装程式的选单中按R键选择“修复Windows 2000安装”,再从修复选单中按C键选择“故障恢复控制台修复Windows2000”。
对于 WindowsXP,同样是用光盘启动电脑,然后按R选择修复,就能直接进入控制台。

直接把控制台的相关选项安装到启动菜单中的方 法:把光盘放入光驱,然后直接在运行中输入“d:/i386/winnt32/cmdcons”之后回车(这里假设您的光驱是D),再点击“是”,就能够把控 制台选项安装到高级启动菜单中,这样以后直接从硬盘就能够进入控制台中。这个方法适用于Windows 2000和Windows XP。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!