用OD脱DEDE的Armadillo 1.xx 2.xx壳 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    前言:

    前段时间破一个Delphi程序,用到DeDe,但提示输入密码,我哪有?SHIT!只好拿它来开刀,

用OD脱DEDE的Armadillo 1.xx 2.xx壳

。开工!正好有关Armadillo的文章较少,来一篇凑个热闹,不当之处请指正。

    第一步、跳过调试器检查:

    先IsDebuggerPresent插件隐藏OD,然后载入DEDE,忽略所有异常。

    F9运行,程序提示有Debugger运行,点击OK后退出。看看在什么地方可以跳过NAG,故点击前BP DestroyWindow,然后点击OK,程序中断,CTRL+F9返回到程序

    003E3247 CALL DWORD PTR DS:[3E64A8]              ; USER32.DestroyWindow

    003E324D MOV EAX,ESI                             --->在这

    继续按Ctrl+F9返回直到如下代码:

    003E088A JE SHORT 003E08CD                       --->可以跳过NAG!

    ...........................

    003E08B5 ADD ESP,28

    003E08B8 PUSH EAX

    003E08B9 CALL 003E328D                           --->CALL NAG

    003E08BE MOV EAX,DWORD PTR DS:[3F328C]           --->返回到这,向上看!

    003E08C3 ADD ESP,0C

    003E08C6 XOR DWORD PTR DS:[EAX+74],3366

    003E08CD JMP SHORT 003E08D2

    注意在003E088A处可以跳过。重来一遍,下G 3E088A,提示无效地址。原来这地址是程序运行动态后生成的。只好让程序先运行一会在中断下来下断点。因为Armadillo壳有页保护,故BP VirtualProtect,F9运行,中断后下G 3E088A,程序再次中断,改变标志位令其强行跳转,然后Ctrl+F9返回,并将EAX值改为0,程序将往下运行,出现过期提示,要求输入注册码。

    第二步、挫败注册要求:

    要注册码?都有这玩意还要Cracker干吗?好,继续BP DestroyWindow,什么也不用输入,点Cancel,中断后三次CTRL+F9返回到如下代码:

    003DCB24 CALL 003D80DF                           --->CALL NAG

    003DCB29 MOVZX EAX,AL                            --->返回到此,明显是否注册的标志,改为1

    003DCB2C TEST EAX,EAX

    003DCB2E JNZ SHORT 003DCB38

    至此程序能正常运行了,但工作还远远没有结束,你总不希望每次都用OD载入来运行程序吧?

    第三步、避开修改文件头:

    有文章说Armadillo会修改文件头,但没有具体说明怎么修改,怎么避开。看了书中Armadillo脱壳的文章,仍一知半解,没办法,只好恶补PE文件格式,总算明白了Armadillo修改文件头的原理。为了这个及修复IAT,花了差不多三天时间。原来PE文件有个PE标志,这里就是PE文件头,包含PE文件重要信息。而在程序起始代码+3C的地方(即40003C)总是指向PE标志的地址,用Winhex打开一个程序就会发现规律。Armadillo将会修改40003C处的数据,使其指向错误地址,并将原地址+6处的Section数目改变,脱壳后的程序自然就会运行不了,甚至使一些脱壳程序无法DUMP。

    下断点BP VirtualProtect,我们希望在在Armadillo去掉页保护准备修改文件头时中断下来。F9运行,注意观察堆栈数据,这样就不用数中断次数了。几十次中断后到堆栈数据如下时:

    0012BFE8  003E1063 /CALL 到 VirtualProtect 来自 003E1061

    0012BFEC  00400000 |Address = Dede.00400000       --->页保护地址

    0012BFF0  00000040 |Size = 40 (64.)               --->长度

    0012BFF4  00000004 |NewProtect = PAGE_READWRITE   --->解除保护,可读写

    0012BFF8  0012C014 pOldProtect = 0012C014

    这里解除保护,不过还不是修改文件头的地方,估计这里只是还原代码。继续F9运行,中间还会中断,不过是恢复保护,

电脑资料

用OD脱DEDE的Armadillo 1.xx 2.xx壳》(https://www.unjs.com)。直到再次堆栈数据为:

    0012BFE8  003E10B9 /CALL 到 VirtualProtect 来自 003E10B7

    0012BFEC  00400000 |Address = Dede.00400000

    0012BFF0  00000040 |Size = 40 (64.)

    0012BFF4  00000004 |NewProtect = PAGE_READWRITE

    0012BFF8  0012C014 pOldProtect = 0012C014

    CTRL+F9返回到:

    003E10B7 CALL ESI                                   --->Call VirtualProtect

    003E10B9 PUSH EAX                                   --->返回到此

    003E10BA NOT EAX

    F8单步跟踪,直到:

    003E1100 SUB EBX,EDI

    003E1102 ADD DWORD PTR DS:[EAX+3C],EBX              --->EAX=400000,修改文件头40003C

    原值为00000040,即PE标志地址为400040,加EBX后就错误了。将EBX修改为0,继续F8单步跟踪,注意VirtualProtect保护的地址(应到400040了),到:

    003E1185 ADD WORD PTR DS:[EDI+6],AX                 --->EDI=400040,修改文件头的Section数目

    将AX修改为0,至此击败了对文件头的修改。

    第四步、寻找OEP并DUMP程序:

    CTRL+F9几次返回到如下代码:

    008116BA MOV DWORD PTR SS:[EBP-1C],EAX

    008116BD PUSHAD

    008116BE XOR EAX,EAX

    008116C0 JNZ SHORT Dede.008116C4

    008116C2 JMP SHORT Dede.008116D9

    008116C4 JMP SHORT Dede.008116F9

    以下在OD中显示乱码,应该容易找到的。OEP就快到了,一定要F8慢慢跟踪。到出现第一个Call [******]时跟入(否则程序)运行,应该是在:

    008117C0 CALL DWORD PTR DS:[8520D4]                 --->F7跟入

    继续F8单步跟踪到第一个CALL EDI处,在

    003E2191 CALL EDI                                   --->EDI=00809001

    这里EDI本来是Armadillo加壳程序的OEP地址,但这个明显不是,F7跟入进去看看。

    00809001 PUSHAD

    00809002 JMP Dede.00809444

    继续F8单步跟踪,注意花指令,并在一些循环处直接在下一代码F4跳出循环。如:

    0080945D CALL Dede.00809476                         --->花指令

    F7进入,否则程序运行。

    0080955F CMP EBX,DFAEE568

    00809565 JNZ Dede.008094AE                          --->循环

    0080956B MOV BX,AX                                  --->在此处F4跳出,

    程序最后又跳回到

    0080900E MOV EBX,Dede.00443930

    00809013 ADD EBX,EBP

    00809015 SUB EBX,DWORD PTR SS:[EBP+443FD0]

    到这里感觉象是

最新文章