黑客之门的魅力:感染与加载(图)_漏洞研究

最近对后门产生了很浓厚的兴趣,上网与各位高手讨论的时候,有人提到了“黑客之门”很厉害,也算是推出来的比较成功的一个后门,于是上网下载了一个研究研究,顺便也学习学习其中的方法与技巧。不敢独享,分享于此,同时希望高手们指教。

    “黑客之门”介绍

    黑客之门采用的目前一些先进的后门技术,它只有一个Dll文件,通过感染系统文件启动自身,被感染的系统文件大小和日期都不会改变;同时采用线程插入技术,本身没有进程;本身不开端口,而是重用系统进程开的任意一个端口,如80,135,139,445等,因此它的隐藏性非常好,而且穿透防火墙也是很容易的事。这个版本文件不大,只提供一些很有用的命令。目前还没有发现如何工具能查到这个后门,象Fport,Llister,RKDetector等查工具都失效。
程序的自启动

    既然是一个后门,那么就要随系统的启动而启动,根据黑客之门的介绍,它是通过感染系统程序文件来实现程序的自启动的。既然是感染了系统文件(像病毒),那就看看感染前和感染后的系统文件的区别吧!为了测试感染前后的差别,我准备了一个专门用来被感染的文件TestLoad.exe,它没有什么功能,只是弹出一个对话框,这样好等待测试,麻雀虽小,五脏俱全,省得动系统文件了。接着运行命令:

C:\>rundll32 hkdoordll,DllRegisterServer TestLoad.exe 2
使黑客之门感染TestLoad.exe,感染完毕后用EXE文件查看利器eXescope查看TestLoad.exe被感染前后的差别。

被感染之前eXescpoe显示的TestLoad.exe的结构如图1所示:

感染之后的TestLoad.exe的结构如图2所示:

图2

可以看出感染之后的TestLoad.exe的引入表多了一个Hkdoordll.dll引入库。细心观察感染之后的TestLoad.exe的引入表地址(Import Table Address ITA)已经被改变,原来的ITA为0x000043FC,感染之后为0x0000477E。
为了进一步看清除感染前后的文件的变化,这里使用LordPE.exe比较感染前后的TestLoad.exe的引入表函数,比较结果如图3所示:

图3
    小提示:使用LordPE.exe查看exe文件的引入表函数方法是:点击PE Edito打开相应的文件,接着点击Directories,弹出对话框后点击Import Table右边的三个点,这样就可以查看一个可执行文件的引入表了。

    可以看出,只是在引入表链表中添加了一个相应的Hkdoordll.dll,这样当被感染的程序再次运行时,由系统的程序装载器搜索Hkdoordll.dll,并将其引用到被感染程序的地址空间,后门就运行起来了。黑客之门的这种子启动方式值得学习,比较灵巧。

    搞明白了黑客之门的启动方式后,我们就可以手动清除它了,这里切不可将Hkdoordll.dll直接删除,这样可能直接导致系统崩溃。因为系统在加载被感染的程序(假如为Services.exe)时发现没有找到Hkdoordll.dll,Services.exe将不能被装载,如果被感染的是系统关键进程的话,那么系统将不能正确的启动。清除的时候我们可以去别的机器上(相同系统与补丁)找一个Services.exe,将被感染的程序命名为Services2.exe,将Services.exe拷贝到System32文件夹下,重启电脑,删除Hkdoordll.dll就清除黑客之门了。
运行时感染

    上面说的是黑客之门的自启动方式,下面看看黑客之门是怎么感染正在运行的系统文件的,这一点让我晕了很久,最后发现是用了一个很灵活的小技巧。
我们知道在Windows系统下,正在运行的程序文件一般是不能修改或者删除的,正是由于这一点,才出现了各种程序运行时的自删除大法,程序自删除不是我们这次的重点。但是,细心的用户可能已经发现,在Windows 2000或Wndows XP系统下,我们可以对正在运行的EXE文件进行重命名或者移动。
再拿刚才的TestLoad.exe做测试,运行:

C:\>rundll32 hkdoordll,DllRegisterServer TestLoad.exe 2
可以发现TestLoad.exe所在的文件夹内多出了一个文件TestLoad.exe.bak,咋一看还以为“黑客之门”做好事,自动帮你备份一下系统文件,其实这可是黑客之门的狐狸尾巴啊!是它不得已而为之的。不要关闭TestLoad.exe,然后试着删除TestLoad.exe和TestLoad.exe.bak,是不是发现奇迹了?竟然把TestLoad.exe删掉了,而TestLoad.exe.bak竟然不让删,是不是和我刚才说的话矛盾?非也!非也!刚好证明了刚才的话:黑客之门先把TestLoad.exe改名为TestLoad.exe.bak,然后生成一个被感染的TestLoad.exe,这样,下次运行TestLoad.exe实际上是被替换过的程序,原来的程序则放在一边。
用IDA Pro反汇编Hkdoordll.dll可以发现以下函数的调用:

文件重命名:

.data:1000C618                 lea     ecx, [esp+438h+FileName]
.data:1000C61F                 lea     edx, [esp+438h+var_324]
.data:1000C626                 push    ecx
.data:1000C627                 push    edx
.data:1000C628                 call    rename

拷贝文件:

.data:1000C66F           lea     edx, [esp+440h+var_32C]
.data:1000C676           push    0               ; bFailIfExists
.data:1000C678           lea     eax, [esp+444h+var_228]
.data:1000C67F           push    edx             ; lpNewFileName
.data:1000C680           push    eax             ; lpExistingFileName
.data:1000C681           call    CopyFileA

移动文件:

.data:1000C795           mov     eax, [ebp+8]
.data:1000C798           test    eax, eax
.data:1000C79A           jnz     short loc_1000C7FE
.data:1000C79C           lea     ecx, [esp+448h+var_334]
.data:1000C7A3           push    5               ; dwFlags
.data:1000C7A5           lea     edx, [esp+44Ch+var_230]
.data:1000C7AC           push    ecx             ; lpNewFileName
.data:1000C7AD           push    edx             ; lpExistingFileName
.data:1000C7AE           call    MoveFileExA
上面的语句实际上可以理解为:
MoveFileEx(“TestLoad.exe”,”TestLoad.exe.bak”, MOVEFILE_DELAY_UNTIL_REBOOT| MOVEFILE_REPLACE_EXISTING);

    小知识:MSDN中对MoveFileEx()函数的解释为:
BOOL MoveFileEx(
  LPCTSTR lpExistingFileName,  // pointer to the name of the existing file
  LPCTSTR lpNewFileName,       // pointer to the new name for the file
  DWORD dwFlags                // flag that specifies how to move file
);

    这样进程TestLoad.exe的文件映象实际上为TestLoad.exe.bak,接着Hkdoordll.dll生成被感染的TestLoad.exe,并且保存在原来的文件路径上即可。

    灭掉系统文件保护

    一旦系统启动了,Windows系统就开始加载已经被感染的系统程序,但是由于“黑客之门”是通过感染系统程序实现自启动的,这下子又遇到了另外一个问题。

    大家都知道,在Windows 2000和Windows XP中有系统文件保护功能,一旦被保护的系统文件被修改了,就会弹出需要插入系统安装盘CD的对话框。这样就导致了一个问题, TestLoad.exe只是一个普通的EXE文件,而不是受系统文件保护系统保护的系统进程,那为什么黑客之门修改系统进程时,操作系统的文件的文件保护系统不会提醒呢?
这一点,还是采用反汇编黑客之门的方法,观察它是怎样关闭系统文件保护功能的。

发现如下的代码:

.data:1000BBB0 LoadSFCDLL   proc near    ; CODE XREF: sub_1000BC70+B7
.data:1000BBB0      push    esi
.data:1000BBB1      xor     esi, esi
.data:1000BBB3      call    GetVersion  ; Get current version number of Windows
.data:1000BBB3      ; and information about the operating system platform
.data:1000BBB9      cmp     al, 5
.data:1000BBBB      jnz     short loc_1000BBDF
.data:1000BBBD      xor     ecx, ecx ;此时为Windows2000系统
.data:1000BBBF      mov     cl, ah
.data:1000BBC1     test    cl, cl
.data:1000BBC3     jnz     short loc_1000BBD2
.data:1000BBC5     push    offset aSfc_dll ; lpLibFileName
.data:1000BBCA     call    LoadLibraryA ;此时为WindowsXP系统
.data:1000BBD0     pop     esi
.data:1000BBD1     retn
.data:1000BBD2 loc_1000BBD2:          ; CODE XREF: LoadSFCDLL+13 j
.data:1000BBD2     push    offset aSfc_os_dll ; lpLibFileName
.data:1000BBD7     call    LoadLibraryA
.data:1000BBDD     pop     esi
.data:1000BBDE     retn

上面的代码可以看出,Hkdoordll.dll根据操作系统的版本调用了Sfc.dll或者Sfc_os.dll,如果是Windows 2000(Windows NT 5.0)的话,装载Sfc.dll;如果是Windows XP(Windows NT 5.1)的话,装载Sfc_os.dll。再看下面的一段反汇编代码:

时间: 2024-07-31 08:46:01

黑客之门的魅力:感染与加载(图)_漏洞研究的相关文章

MSHTA漏洞为黑客大开远程控制之门(图)_漏洞研究

这是一个可以让黑客欣喜若狂的新漏洞,一旦该漏洞被激活,就会有大量计算机成为黑客手中的肉鸡,被人远程控制不可避免-- 微软的Windows操作系统在进行了短暂的"喘息"后,近日又在攻击爱好者不懈努力下,被成功找出几个高危的系统安全漏洞,而Microsoft Windows MSHTA脚本执行漏洞就是其中的重要一员. 安全公告牌 MSHTA即HTA,此处的MS主要用于强调这是微软的漏洞,HTA全名为HTML Application,就是HTML应用程序,其实只要简单地用"hta&

黑客如何利用Ms05002溢出找“肉鸡” (图)_漏洞研究

溢出攻击永远是安全界中,不可忽视的角色.而如今也正是肉鸡短缺的年代,能掌握一门最新的Ms05002溢出,必定会让你有"惊人"的收获.至于熟练的溢出如何炼成?具体方法请见下文所示! 实施方法:通过Ms05002攻击工具,溢出反弹IP.反弹端口,会生成含有木马性质的文件.然后将这个产生的文件,以QQ传输的形式发给受害者观看,或者将其上传到自己的主页空间,引诱其他人访问.最后执行NC瑞士军刀,监听本机端口,收取已经运行产生文件的主机. 步骤1.首先从网上下载Ms05002溢出工具,释放到比较

黑客之门的魅力:感染与加载

最近对后门产生了很浓厚的兴趣,上网与各位高手讨论的时候,有人提到了"黑客之门"很厉害,也算是推出来的比较成功的一个后门,于是上网下载了一个研究研究,顺便也学习学习其中的方法与技巧.不敢独享,分享于此,同时希望高手们指教.     "黑客之门"介绍     黑客之门采用的目前一些先进的后门技术,它只有一个Dll文件,通过感染系统文件启动自身,被感染的系统文件大小和日期都不会改变:同时采用线程插入技术,本身没有进程:本身不开端口,而是重用系统进程开的任意一个端口,如80

Asp.net自定义控件之加载层_实用技巧

本文旨在给大家开发自定义控件(结合js)一个思路,一个简单的示例,可能在实际项目中并不会这样做.  先来看看效果:   1.在静态页面里开发好想要的效果 jQuery.extend({ openloading: function (options) { var defaults = { msg: '数据提交中...', img: 'loading.gif' }; var opts = $.extend(defaults, options); $("body").append("

Javascript vue.js表格分页,ajax异步加载数据_基础知识

分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理. 效果: 代码: 1.注册一个组件 js Vue.component('pagination',{ template:'#paginationTpl', replace:true, props:['cur','all','pageNum'], methods:{ //页码点击事件 btnClick: function(index){ if(index != this.cu

Android中的动态加载机制的学习研究_Android

在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本文对网上Android动态加载jar的资料进行梳理和实践在这里与大家一起分享,试图改善频繁升级这一弊病. Android应用开发在一般情况下,常规的开发方式和代码架构就能满足我们的普通需求.但是有些特殊问题,常常引发我们进一步的沉思.我们从沉思中产生顿悟,从而产生新的技术形式. 如何开发一个可以自定

js图片预加载示例_基础知识

js图片预加载简单示例 复制代码 代码如下: function loadImage(url, callback) {    if(url!='null') {        var img = new Image();        img.src = url;        if(img.complete) {            callback(img);        } else {            img.onload = function(){               

又一个小巧的图片预加载类_图象特效

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <HEAD> <TITLE> New Document </TITLE> <meta http-equiv="Co

js 延迟加载 改变JS的位置加快网页加载速度_基础知识

当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点: 1.延迟加载js代码 复制代码 代码如下: <script type="text/javascript" src="" id="my"></script> <script type="text/javascript"> setTimeout(&quo