文章 | 入侵攻击 | 安全防御 | 操作系统 | 建站技术 | 脚本编程 | 路由交换 | 灾难恢复 | 新闻资讯 | 安全公告   
下载 | 漏洞扫描 | 加密破解 | 入侵攻击 | 后门木马 | 溢出程序 | 综合工具 | 安全防护 | 原创发布 | 动画教程 
论坛 | 配服务器 | 黑客情感 | 免费资源 | 爆笑贴图 | 灌水无罪 | 会员照片 | 在线服务 | 站长博客 | 网站首页 
 您现在的位置: 华夏黑客联盟 >> 攻防技术 >> 脚本编程 >> 文章正文  

幻影2.0测试版的Anti-debug

www.hxhack.com 阅读: 时间:2008-8-9 7:27:24 整理:华夏黑盟
------------------------------------------------------------------

 
幻影2.0编写得真不错,它的anti-debug很有特色,我追它可是害惨了我的爱机。系统崩溃 

不下20次,反复重启--晕!!虽然在半月前就彻底追过了,但是仍有很多问题没有明白。今天将它写出来,望各位大虾多多指教,为本人解惑。 

我觉得它有如下特点: 

1、花指令 

2、SEH反跟踪 

3、在Ring3、Ring0级清除断点寄存器 

4、利用createfile查找调试工具(如sice、trw、bw.superbpm等等) 

5、断点可不能乱下,不然系统会崩溃(d.boy大侠说:“设计中应该一触发断点 

 

就会崩溃;崩溃是因为 int3 被幻影占领了”。) 

 

以下的代码都是d.boy大侠用幻影2。0测试版加壳的exescope,我已改过的(原是花指令): 

167:004AC094  PUSH    DWORD [WORD FS:00] 

0167:004AC09A  PUSHF 

0167:004AC09B  PUSH    BYTE +03 

0167:004AC0C7  MOV      [WORD FS:00],ESP    《————建立SEH链 

0167:004AC0CD  PUSHF 

0167:004AC0CE  PUSH    BYTE +03 

0167:004AC0FA  XOR      EAX,EAX   

0167:004AC0FC  PUSHF 

0167:004AC0FD  JC      004AC109 

0167:004AC113  MOV      [EAX],EAX            《————产生异常 

0167:004AC115  PUSHF 

0167:004AC116  PUSH    BYTE +03 

0167:004AC118  JNC      004AC125 

0167:004AC11A  JMP      SHORT 004AC1 

 

当光标停在4ac0fa处时,看看stack中,异常处理入口为4dca77,这时断点可以下在那里。接下去会有 

很多类似的异常,异常处理入口也在4dca77处,但是后面的两个异常的断点就不能设在这里了,不然系统 

就会崩溃的。我胡乱猜测是第一次异常时,读入4dca77后的代码,产生页面保护错误,于是就在这里做手脚,就像 

上面d.boy大侠说的那样,“int3 被幻影占领了”(各位大侠,我乱猜的,请指教!) 

 

下面我们就进入了异常处理代码中: 

0167:004DCA77 C8000000        ENTER    00,00 

0167:004DCA7B 9C              PUSHF 

0167:004DCA7C 6A03            PUSH    BYTE +03 

0167:004DCA7E 730B            JNC      004DCA8B 

0167:004DCA80 EB02            JMP      SHORT 004DCA84 

 

0167:004DCB94  MOV      EAX,[EBP+10]  《————eax中为context的指针 

0167:004DCB97  JPE      004DCB9C 

 

0167:004DCBA1  MOV      EBX,[EAX+B8]  《————取出context.eip 

0167:004DCBA7  JZ      004DCBAC 

 

0167:004DCBAC  ADD      EBX,BYTE +02    《————context.eip+2 

0167:004DCBAF  PUSHF 

 

0167:004DCBC6  ADD      EBX,BYTE +03    《————再加 

 

0167:004DCBCE  ADD      EBX,BYTE +2D      《————再加 

0167:004DCBD1  JC      004DCBD6 

 

0167:004DCBD6  MOV      [EAX+B8],EBX      《————送回 

0167:004DCBDC  PUSHF 

 

0167:004DCBF3  XOR      EBX,EBX          《————清零 

0167:004DCBF5  JC      004DCBFA 

 

0167:004DCBFA  MOV      [EAX+04],EBX      《————修改 

0167:004DCBFD  PUSHF 

 

0167:004DCC14          MOV      [EAX+08],EBX  《————修改 

0167:004DCC17          JPE      004DCC1C 

 

0167:004DCC1C 89580C          MOV      [EAX+0C],EBX    《————修改 

0167:004DCC1F 7203            JC      004DCC24 

 

0167:004DCC24 895810          MOV      [EAX+10],EBX    《————修改 

0167:004DCC27 9C              PUSHF 

 

0167:004DCC3E 895814          MOV      [EAX+14],EBX    《————修改 

0167:004DCC41 7403            JZ      004DCC46 

 

0167:004DCC46 C7401855010000  MOV      DWORD [EAX+18],0155  《————修改 

0167:004DCC4D 7403            JZ      004DCC52 

 

0167:004DCC8A C9              LEAVE 

0167:004DCC8B C21000          RET      10 

 

 

经过三次上面的异常处理后,会来到下面的地方: 

0167:004AFD61  SIDT    [ESI]        《————esi==4dc9d8 

0167:004AFD64  JZ      004AFD69 

0167:004AFD66  JNZ      004AFD69 

 

0167:004AFD69  MOV      ESI,[ESI+02]  《————[esi+02]==800b0000 

0167:004AFD6C  JZ      004AFD71 

0167:004AFD6E  JNZ      004AFD71 

 

0167:004AFD76  MOV      AX,[ESI+18]    《————AX=F5E4 

0167:004AFD7A  JC      004AFD7F 

0167:004AFD7C  JNC      004AFD7F 

 

0167:004AFD7F  MOV      BX,[ESI+1E]    《————BX=C18C 

0167:004AFD83  JC      004AFD88 

0167:004AFD85  JNC      004AFD88 

 

0167:004AFD88  MOV      [EBP+00433C35],AX  《————F5E4送入4dc9de中 

0167:004AFD8F  JC      004AFD94 

0167:004AFD91  JNC      004AFD94 

 

0167:004AFD94  MOV      [EBP+00433C37],BX  《————C18C送入4dc9e0中 

0167:004AFD9B  PUSHF 

0167:004AFD9C  PUSH    BYTE +03 

0167:004AFD9E  JNC      004AFDAB 

 

0167:004AFE18  MOV      [ESI+18],AX      《————这时eax==4dcca5,esi=800b0000,AX=CCA5 

0167:004AFE1C  PUSHF 

0167:004AFE1D  PUSH    BYTE +03 

0167:004AFE1F  JNC      004AFE2C 

 

0167:004AFE49  SHR      EAX,10       

0167:004AFE4C  JZ      004AFE51 

 

0167:004AFE51  MOV      [ESI+1E],AX      《————esi=800b0000,AX=004D 

0167:004AFE55  JPE      004AFE5A 

 

这中间有一段解码,不断写页面。。。。当来到下面 

0167:004B00BF  INT3   

0167:004B00C0  PUSHF 

0167:004B00C1  JC      004B00CD 

 

这时会通过int3进入Ring0.入口就在4dcca5处。进入Ring0后,会来到以下地方: 

004DCFB9  XOR  EAX,EAX 

004DCFBB  PUSHF 

 

004DCFE8  MOV DR0,EAX 

004DD018  MOV DR1,EAX 

004DD048  MOV DR2,EAX 

004DD050  MOV DR3,EAX 

004DD06A  MOV EAX,0155 

004DD09C  MOV DR7,EAX 

 

004DD0D2  IRET          《————从这里出来回到Ring3 

 

出来后,会反复循环在Ring0和Ring3之间,不断解码写页面,最后好像是造成页面错误,产生异常又进入上面的异常处理例程中4dca77 

回到正常例程后,还有一些异常处理,跟上面的差不多。最后来到这里: 

 

0167:004D4F72 C3              RET   

看看stack中,程序将会到00748f8f中,当到这里: 

0167:0074930C 837A08FF        CMP      DWORD [EDX+08],BYTE -01  《————edx=816477c8,此时可不能让[EDX+08]==-1 

0167:00749310 9C              PUSHF 

0167:00749311 6A03            PUSH    BYTE +03 

0167:00749313 730B            JNC      00749320 

 

0167:0074933D 7563            JNZ      007493A2          《————这里必须跳 

 

之后会来到: 

 

0167:007494A3 803E00          CMP      BYTE [ESI],00  《————注意这里 

0167:007494A6 7403            JZ      007494AB 

0167:007494A8 7501            JNZ      007494AB 

在7494a3处,d esi,你会看到“\bw2k.\\.\SUPERBPM.\\.\ICEDUMP.\\.\TRW.\\.\TRWDEBUG.\\.\REGVXD.\\.\NTICE.\\.\SIWVID.\\.\SICE.\\.\FILEVXD” 

在接下来的749449处,你千万不能跳的。 

 

在接下去的代码中还有类似第一处的异常处理,很是麻烦的。需要耐心!当你来到74a56e处时: 

0167:0074A56E 83F800          CMP      EAX,BYTE +00 

0167:0074A571 7403            JZ      0074A576 

0167:0074A573 7501            JNZ      0074A576 

这里以下的代码就是重定位、破坏import. 

这些搞完后,还有一些异常处理,需要耐心啊。最后来到下面: 

0167:0074BCC3  JMP      EAX  <----eax==4887ec 

0167:0074BCC5  JC      0074BCCA 

0167:0074BCC7  JNC      0074BCCA 

0167:0074BCC9  JNZ      0074BD33 

0167:0074BCCB  CDQ   

0167:0074BCCC  ADD      [EAX],EAX 

呵呵。。总算到达oep了。 

0167:004887EC 55              PUSH    EBP 

0167:004887ED 8BEC            MOV      EBP,ESP 

0167:004887EF 83C4EC          ADD      ESP,BYTE -14 

0167:004887F2 33C0            XOR      EAX,EAX 

0167:004887F4 8945F0          MOV      [EBP-10],EAX 

0167:004887F7 8945EC          MOV      [EBP-14],EAX 

0167:004887FA B8CC854800      MOV      EAX,004885CC 

0167:004887FF E854D2F7FF      CALL    00405A58 

 

   -------------------------------------------------------------------------------------------
  • 上一篇文章:

  • 下一篇文章: 没有了
  •    -------------------------------------------------------------------------------------------
    用户名:
    Email:
    评论内容:
     
      精品推荐

     十招教你学会破解(学黑客
     C语言与C++有什么区别吗
     VB病毒编写——初学编程
     世界编程大赛第一名写的
     木马是如何编写的
     绝版破解软件教程就不信
     如何编写木马病毒
     隐藏cmd命令行运行
     怎样学好编程C语言
     学ASP只需一小时!
     如何提高自己的编程能力
     初学者天地--用C语言写的
     四个经典的vbs脚本整理
     Visual C++编程窃取QQ密
     编程语言初步知识(供菜
     跟我学做记事本
     什么是vb,vb是什么意思
     一个程序员写的求爱程序
     阿拉QQ大盗盗号原理分析
     成为编程高手的二十二条
     看黑客编写强力蓝屏炸弹
     C语言基础教程合集(整理
     C语言之精华总结
     学C++时要注意的
     [VB]猎取当前QQ聊天内容


    设为首页 | 软件发布 | 联系方式 | 友情链接 | 关于我们 | 本站声明 | 免责条款 | 网站留言
    Copyright © 2004-2007 Www.Hxhack.Com
    版本:华夏黑客联盟 Email:hxhack.com@163.com
    中国·广东 请使用IE6.0版本, 分辩率1024×768进行浏览
    版权所有 任意抄袭 注意完整
    粤ICP备06123842号