【参加讨论】前言
后门!相信这个词语对您来说一定不会陌生,它的危害不然而欲,但随着人们的安全意识逐步增强,又加上杀毒软件的"大力支持",使传统的后门无法在隐藏自己,任何稍微有点计算机知识的人,都知道"查端口""看进程",以便发现一些"蛛丝马迹"。所以,后门的编写者及时调整了思路,把目光放到了动态链接程序库上,也就是说,把后门做成dll文件,然后由某一个exe做为载体,或者使用rundll32.exe来启动,这样就不会有进程,不开端口等特点,也就实现了进程、端口的隐藏。本文以"dll的原理""dll的清除""dll的防范"为主题,并展开论述,旨在能让大家对dll后门"快速上手",不在恐惧dll后门。好了,进入我们的主题。
一,dll的原理
1,动态链接程序库
动态链接程序库,全称:dynamic link library,简称:dll,作用在于为应用程序提供扩展功能。应用程序想要调用dll文件,需要跟其进行"动态链接";从编程的角度,应用程序需要知道dll文件导出的api函数方可调用。由此可见,dll文件本身并不可以运行,需要应用程序调用。正因为dll文件运行时必须插入到应用程序的内存模块当中,这就说明了:dll文件无法删除。这是由于windows内部机制造成的:正在运行的程序不能关闭。所以,dll后门由此而生!
2,dll后门原理及特点
把一个实现了后门功能的代码写成一个dll文件,然后插入到一个exe文件当中,使其可以执行,这样就不需要占用进程,也就没有相对应的pid号,也就可以在任务管理器中隐藏。dll文件本身和exe文件相差不大,但必须使用程序(exe)调用才能执行dll文件。dll文件的执行,需要exe文件加载,但exe想要加载dll文件,需要知道一个dll文件的入口函数(既dll文件的导出函数),所以,根据dll文件的编写标准:exe必须执行dll文件中的dllmain()作为加载的条件(如同exe的mian())。做dll后门基本分为两种:1)把所有功能都在dll文件中实现;2)把dll做成一个启动文件,在需要的时候启动一个普通的exe后门。
常见的编写方法:
(1),只有一个dll文件
这类后门很简单,只把自己做成一个dll文件,在注册表run键值或其他可以被系统自动加载的地方,使用rundll32.exe来自动启动。rundll32.exe是什么?顾名思意,"执行32位的dll文件"。它的作用是执行dll文件中的内部函数,这样在进程当中,只会有rundll32.exe,而不会有dll后门的进程,这样,就实现了进程上的隐藏。如果看到系统中有多个rundll32.exe,不必惊慌,这证明用rundll32.exe启动了多少个的dll文件。当然,这些rundll32.exe执行的dll文件是什么,我们都可以从系统自动加载的地方找到。
现在,我来介绍一下rundll32.exe这个文件,意思上边已经说过,功能就是以命令行的方式调用动态链接程序库。系统中还有一个rundll.exe文件,他的意思是"执行16位的dll文件",这里要注意一下。在来看看rundll32.exe使用的函数原型:
void callback functionname (
hwnd hwnd,
hinstance hinst,
lptstr lpcmdline,
int ncmdshow
);
其命令行下的使用方法为:rundll32.exe dllname,functionname [arguments]
dllname为需要执行的dll文件名;functionname为前边需要执行的dll文件的具体引出函数;[arguments]为引出函数的具体参数。
(2),替换系统中的dll文件
这类后门就比上边的先进了一些,它把实现了后门功能的代码做成一个和系统匹配的dll文件,并把原来的dll文件改名。遇到应用程序请求原来的dll文件时, dll后门就启一个转发的作用,把"参数"传递给原来的dll文件;如果遇到特殊的请求时(比如客户端),dll后门就开始,启动并运行了。对于这类后门,把所有操作都在dll文件中实现最为安全,但需要的编程知识也非常多,也非常不容易编写。所以,这类后门一般都是把dll文件做成一个"启动"文件,在遇到特殊的情况下(比如客户端的请求),就启动一个普通的exe后门;在客户端结束连接之后,把exe后门停止,然后dll文件进入"休息"状态,在下次客户端连接之前,都不会启动。但随着微软的"数字签名"和"文件恢复"的功能出台,这种后门已经逐步衰落。