• 标 题:对幻影v1.5b3中Anti-Debug代码的一点分析 (2千字)
  • 作 者:ljttt
  • 时 间:2000-8-25 7:44:53
  • 链 接:http://bbs.pediy.com

对幻影v1.5b3中Anti-Debug代码的一点分析

【声明】
我写文章以交流为主,希望大家在转载时能保持文章的完整性。

【前言】
不能上网的日子真是难熬,就把幻影加壳的程序分析了一下。最近写了个"幻影1.5b3解密脱壳的小工具"。今天(2000-08-25)上网一小段时间,就把他发给D.Boy看看。这里我说一点幻影中的Anti-Debug代码。

作者:        ljttt
写作日期:    2000-08-23

:0041246A 6A00                    push 00000000                <---大循环开始处
:0041246C 6A00                    push 00000000
:0041246E 6A00                    push 00000000
:00412470 6A00                    push 00000000
:00412472 6A00                    push 00000000
:00412474 6A00                    push 00000000
:00412476 56                      push esi
:00412477 FF95A3BB4000            call dword ptr [ebp+0040BBA3]        <---这里的Call调用实际上就是调用CreateFileA函数
:0041247D 83F8FF                  cmp eax, FFFFFFFF
:00412480 7568                    jne 004124EA

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00412486(C)
|
:00412482 46                      inc esi                <---小循环开始
:00412483 803E00                  cmp byte ptr [esi], 00
:00412486 75FA                    jne 00412482                <---小循环结束
:00412488 46                      inc esi
:00412489 803E00                  cmp byte ptr [esi], 00
:0041248C 75DC                    jne 0041246A                <---大循环结束处
:0041248E EB5A                    jmp 004124EA
..............(省略中间的代码)
:004124EA 83F8FF                  cmp eax, FFFFFFFF
:004124ED 7406                    je 004124F5
:004124EF FF956CBF4000            call dword ptr [ebp+0040BF6C]        <---ExitProcess()

我们来看一下幻影是怎样来超度我们的。
call dword ptr [ebp+0040BBA3]实际上就是CreateFileA函数调用。在大循环中他反复地想创建文件,也就是看你跟踪他没有,所以在 cmp eax,FFFFFFFF 后跳转代码处,你就看着办吧。如果你想继续跟踪,就要跳走。 esi 指向的地址有以下检测内容。

\\.\TRW        <---检测TRW
\\.\TRW2000    <---检测TRW2000
\\.\TRWDEBUG    <---检测TRW2000
\\.\REGVXD    <---检测RegMON
\\.\NTICE    <---检测SoftICE
\\.\SICE    <---检测SoftICE
\\.\VKEYPROD    <---检测....,这是什么东东带的,我还不清楚。:-(
\\.\FILEVXD    <---检测FileMON

大循环结束后,通过判断eax是否为-1,来确定幻影加壳的程序是否被跟踪。

【后记】
幻影加壳的程序中破坏了跟踪环境 int 1 和 int 3 的环境,如果你想直接进行跟踪,门都没有。(你有门,快告诉我一声)。所以必须处理一下,才能动态跟踪。我80%是静态分析出来的。看上面的,W32Dasm反汇编的,西西。幻影中有许多值得研究的地方,不过由于这是D.Boy的秘密,不便泄露。所以.....西西。我可不想D.Boy在幻影新版中给我来一段。

Call_killljttt()
{    if( Call_寻找跟踪者()=="ljttt" || Call_寻找跟踪者()=="ljtt" )
    {    for(int i=0;i<1000000;i++)
        {    Call_发送超级龟派气功("ljttt");
        }
        return 你死去吧!
    }
}