论坛: 编程破解 标题: [转帖]老生常谈ArmadilloCopyMem-II+Debug-Blocker保护方式脱壳 复制本贴地址    
作者: yongmin [yongmin]    论坛用户   登录
作者:daxia2002
转贴自:一蓑烟雨

算一算时间很久没有写文章了,时间过的可真快,这次提起笔写写,一方面总结一下,另一方
面证实一下自己还不算老吧。十一长假过了大半,培着老婆天天在家里,也算是打发一下时间吧。
写些什么呢,自己很清楚,这些年来一直在看雪和一衰烟雨论坛混,可是自己在脱壳方面还是壳盲。
最后决定还是谈谈Armadillo CopyMem-II+Debug-Blocker 保护方式脱壳,都是一些总结性的,都是
轻车熟路的套路,没什么创新,大牛们就别浪费时间了,小鸟们倒是可以一看,也许会有些收获。

      这里我总结了一下方法:手工方法和工具辅助方法,再加上我的一点点"创新"。先简单说一下
这种保护方式特点:父进程调试子进程,在子进程里负责IAT的加密,子进程到达OEP后触发异常,
父进程负责子进程代码解密,然后再按照一定的算法加密回去,防止子进程被Dump。现有的脱壳方
式先dump子进程,然后再单独恢复IAT,这是因为IAT的加密在子进程里,OD无法调试子进程。OD是3
环的调试器,我们用0环的调试器就可以调试子进程了。当时我用softice+iceext调试子进程时也费
了一番周折,毕竟穿山甲反ICE还是很厉害的。现在我用国货:Syser,试了一段时间发现Syser稳定
性还算不错,至少在我的机器是这样的,而且穿山甲对其没有任何的防护,这也许是Syser在脱壳方
面的第一篇文章吧!让我们开始吧!我们先用新版的Armadillo给98notepad加壳作为试练品。在调试
过程中发现OD和Syser在硬件断点上打架,可在OD"调试选项">"调试"中去掉"使用硬件断点单步执行
或跟踪代码"复选框。

        一、手工篇
        (一)方法1
               
        该方法也许是最早的方法了,国人某牛人首创,该方法简单易行,老少皆宜。
        先bp WaitForDebugEvent,shift+f9,断下后ALT+F9返回,bc WaitFordebugEvent 去掉断点。
        "查找">"所有常数">FFFFFFF8, 双击该行 "00434FAF  or eax, FFFFFFF8",向上来到:
               
/*434F68*/  cmp    dword ptr [ebp-A60], 0  //这里下断点
/*434F6F*/  jl      0043521A
/*434F75*/  mov    ecx, dword ptr [ebp-A60]
/*434F7B*/  cmp    ecx, dword ptr [474414]
/*434F81*/  jge    0043521A

        我们在434F68处F2下断点.启动Syser,Ctrl+F12激活,>bpm outputdebugstringa x,下硬件断点,
我们利用这个断点来断下子进程.在OD里shift+f9运行,中断在Syser里,按x运行,这里中断4次,前2
次是父进程产生的,后2次是子进程产生的,第4次中断后,>bd 0禁用该断点,>bpm getmodulehandlea
x 下硬件断点,我们开始找魔法跳.按x运行,我们观察堆栈窗口,当显示"VirtualAlloc"时,再按x运
行一次,断下后,>bd 1 禁用该断点. >g *esp,运行到子进程空间,往下找到魔法跳:

00d57ec6  jnz 00d57ecd  //魔法跳
00d57ec8  jmp 00d57dbc
 
>a 00d57ec6 nop  //nop掉魔法跳
>a 00d57ec7 nop  //nop掉魔法跳

>bpm createthread x //下断点在子进程中找OEP
>x 运行,断下后>bd 2,F6运行到返回,F8单步一下,F6运行到返回,F8单步一下,往下找到:

00d8f1b4 call ecx  //选中,F7运行到该行,此时ecx=004010cc=OEP,F8 单步一下,此时在OEP处还没
解码,触发异常中断在OD里,我们可以在OD里给子进程进行解码了.

在00435033处进行patch,先给[ebp-A60]置0
/*435033*/  add    dword ptr [ebp-A60], 1  //[ebp-A60]指向当前解码快,置0从第一块解码
/*43503A*/  mov    dword ptr [474418], 1  //[474418]指向父进程再次加密的解码快临界值,
置1为了欺骗父进程永不进行加密.
/*435044*/  jmp    00434F68

bp WriteProcessMemory,下断点,shift+f9,断下后,
 
0013DD18  00437C40  /CALL 到 WriteProcessMemory 来自 notepad.00437C3A
0013DD1C  00000078  |hProcess = 00000078 (window)
0013DD20  00401000  |Address = 401000
0013DD24  00BA5EF8  |Buffer = 00BA5EF8
0013DD28  00001000  |BytesToWrite = 1000 (4096.)
0013DD2C  0013DD64  \pBytesWritten = 0013DD64

从堆栈可以看到开始给子进程OEP处解码了,d 00ba5ef5+(004010cc-00401000),修改该处为EB,FE,
让子进程进入循环.bc WriteProcessMemory,bc 434F68,bp 0043521A,shift+f9,子进程全部解
码,dump子进程,修复IAT,保存,将OEP改回原来的55,8B.

        (二)方法2
       
方法2是国外教程里的经典方法,找到那个加密call,nop掉,patch,让父进程强行解码.方法一和
方法二比较了一下,发现实质是一样的,一个在外围,一个在内部.那个加密call也很容易找到,"查找
">"所有常数">FFFFFFF8 双击该行"004371CF  or edx, FFFFFFF8",向下找到
/*43721B*/  call    004372A0  //这就是加密的CALL
后面的过程就留给你了,子进程的IAT处理是一样的.

        二、工具辅助篇
       
        手工脱壳尽管复杂些,但可以加深理解,理解之后我们可以利用工具加快脱壳的步伐。
       
        (一)方法1
       
        用Armadillo COPYMEMEII DUMP的一个LOADPE小插件,这个小工具的确方便,老大们说的很清楚
了。
        先用方法二定位加密call,nop掉,bp WriteProcessMemory,用Syser处理子进程IAT加密,中断
到OD后,让子进程进入循环,用LOADPE小插件dump,修复IAT,保存,将OEP改回原来的55,8B.
       
        (二)方法2
       
        用deroko/ARTeam提供的Armadillo CopyMem II dumper工具可以非常简单的dump。
        dumper2.EXE notepad.exe 运行,用Syser处理子进程IAT加密,成功后提示子进程的PID,OEP,
并且自动dump和恢复了OEP原始值,我们只需修复IAT,保存即可。

        (三)方法3
       
        用AvAtAr//TEAM RESURREC提供的Armadillo Process Detach v1.3 Final,也非常简单的dump。
        选择CopyMem-II选项,把目标拖进去,也是用 用Syser处理子进程IAT加密,成功后提示:
               
Filename: notepad.EXE
Parent process iD:  [00000464]
Processing...
[PROTECTiON SYSTEM]
Professional Edition
[PROTECTiON OPTiONS]
Debug-Blocker protection detected
CopyMem-II protection detected
Memory-Patching Protections enabled
[CHiLD iNFO]
Crypto call found:  [0043721B]
Child process iD:  [000007F0]
Entry point:        [004010CC]
Original bytes:    [558BEC83]
Detached successfully

        此时用OD附加,f9,f12,恢复OEP原始数据,dump,修复IAT,保存。
       
        总算写完了,断断续续用了一天时间,希望您看完之后有些收获,我就知足了,最后再次感谢
看雪和一衰烟雨论坛,感谢大家对我的支持和帮助。


地主 发表时间: 08-01-27 10:39

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号