后门!相信这个词语对您来说一定不会陌生,他的危害不然而欲,但随着人们的安全意识逐步增强,又加上杀毒软件的“大力支持”,使传统的后门无法在隐藏自己,任何稍微有点电脑知识的人,都知道“查端口”“看进程”,以便发现一些“蛛丝马迹”。所以,后门的编写者及时调整了思路,把目光放到了动态链接程式库上,也就是说,把后门做成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文档进入“休息”状态,在下次客户端连接之前,都不会启动。但随着微软的“数字签名”和“文档恢复”的功能出台,这种后门已逐步衰落。
提示:
在WINNT/system32目录下,有一个dllcache文档夹,里边存放着众多DLL文档(也包括一些重要的EXE文档),在DLL文档被非法修改之后,系统就从这里来恢复被修改的DLL文档。假如要修改某个DLL文档,首先应该把dllcache目录下的同名DLL文档删除或更名,否则系统会自动恢复。
(3)动态嵌入式
这才是DLL后门最常用的方法。其意义是将DLL文档嵌入到正在运行的系统进程当中。在Windows系统中,每个进程都有自己的私有内存空间,但还是有种种方法来进入其进程的私有内存空间,来实现动态嵌入式。由于系统的关键进程是不能终止的,所以这类后门很隐蔽,查杀也很困难。常见的动态嵌入式有:“挂接API”“全局钩子(HOOK)”“远程线程”等。
远程线程技术指的是通过在一个进程中创建远程线程的方法来进入那个进程的内存地址空间。当EXE载体(或Rundll32.exe)在那个被插入的进程里创建了远程线程,并命令他执行某个DLL文档时,我们的DLL后门就挂上去执行了,这里不会产生新的进程,要想让DLL后门停止,只有让这个链接DLL后门的进程终止。但假如和某些系统的关键进程链接,那就不能终止了,假如您终止了系统进程,那Windows也随即被终止!!!
3.DLL后门的启动特性
启动DLL后门的载体EXE是不可缺少的,也是很重要的,他被称为:Loader。假如没有Loader,那我们的DLL后门如何启动呢?因此,一个好的DLL后门会尽力保护自己的Loader不被查杀。Loader的方式有很多,能够是为我们的DLL后门而专门编写的一个EXE文档;也能够是系统自带的Rundll32.exe,即使停止了Rundll32.exe,DLL后门的主体还是存在的。3721网络实名就是个例子,虽然他并不是“真正”的后门。




