DLL
的远程注入技术是目前
Win32
病毒广泛使用的一种技术。使用这种技术的病毒体通常
位于一个
DLL
中,在系统启动的时候,一个
EXE
程序会将这个
DLL
加载至某些系统进程
(如
Explorer.exe
)中运行。
这样一来,普通的进程管理器就很难发现这种病毒了,而且
即使发现了也很难清除,因为只要病毒寄生的进程不终止运行,那么这个
DLL
就不会在内
存中卸载,用户也就无法在资源管理器中删除这个
DLL
文件,真可谓一箭双雕哉。
记得
2003
年
尾巴病毒肆虐的时候,
就已经有些尾巴病毒的变种在使用这种技术了。
到了
2004
年初,我曾经尝试着仿真了一个
尾巴病毒,但独是跳过了
DLL
的远程加载
技术。
直到最近在学校论坛上看到了几位朋友在探讨这一技术,
便忍不住将这一尘封已久的
技术从我的记忆中拣了出来,以满足广大的技术爱好者们。
必备知识
在阅读本文之前,你需要了解以下几个
API
函数:
·
OpenProcess
-
用于打开要寄生的目标进程。
·
VirtualAllocEx/VirtualFreeEx
-
用于在目标进程中分配
/
释放内存空间。
·
WriteProcessMemory
-
用于在目标进程中写入要加载的
DLL
名称。
·
CreateRemoteThread
-
远程加载
DLL
的核心内容,
用于控制目标进程调用
API
函数。
·
LoadLibrary
-
目标进程通过调用此函数来加载病毒
DLL
。
在此我只给出了简要的函数说明,关于函数的详细功能和介绍请参阅
MSDN
。
示例程序
我将在以下的篇幅中用一个简单的示例
Virus.exe
来实现这一技术。这个示例的界面如
下图:
首先运行
Target.exe
,这个文件是一个用
Win32
Application
向导生成的
“Hello,
Worl
d”
程序,用来作为寄生的目标进程。
然后在界面的编辑控件中输入进程的名称
“Target.exe”
,
单击
“
注入
DLL”
按钮,
这时候
V
irus.exe
就会将当前目录下的
DLL.dll
注入至
Target.exe
进程中。
在注入
DLL.dll
之后,你也可以单击
“
卸载
DLL”
来将已经注入的
DLL
卸载。
模拟的病毒体
DLL.dll
这是一个简单的
Win32
DLL
程序,它仅由一个入口函数
DllMain
组成:
BOOL
WINAPI
DllMain(
HINSTANCE
hinstDLL,
DWORD
fdwReason,
LPVOID
lpvRe
served
)
{switch
(
fdwReason
)
{
case
DLL_PROCESS_ATTACH:
{
MessageBox(
NULL,
_T("DLL
已进入目标进程。
"),
_T("
信息
"),
MB_ICONINFOR
MATION
);
}
break;
case
DLL_PROCESS_DETACH:
{
MessageBox(
NULL,
_T("DLL
已从目标进程卸载。
"),
_T("
信息
"),
MB_ICONINFO
RMATION
);
}
break;
}
return
TRUE;
}
如你所见,这里我在
DLL
被加载和卸载的时候调用了
MessageBox
,这是用来显示我
的远程注入
/
卸载工作是否成功完成。而对于一个真正的病毒体来说,它往往就是处理
DLL
_PR