Armadillo3.60 加壳的EXE文件脱壳全过程
文章来源:黑海文库
【目标软件】WINME下的记事本
【加壳方式】Armadillo3.60 CopyMem-ll +Debug-Blocker
【调试环境】:WinXP、Ollydbg、PEiD、LordPE、ImportREC 1.6F
1.前言
为了练习脱壳,前一段时间从网上下了一个Armadillo3.60,然后给记事本加壳,当然本人初学破解,参考了很多大虾们的文章,然后自己模仿脱壳,可是当我修改了Magic Jump后,用401000段“内存断点”大法想到达那个盼望已久的OEP的时候,意外出现了:程序终止,退出!是我做法错误,然后我又实验了N遍,依然如此,为什么?随后又在论坛不停的搜索着,想找一些有关的知识,终于找到了(抱歉,忘记了作者是谁),而且解决了这个问题,为了使象我一样初学者不要重蹈覆辙,我决定详细的写一写,也许你认为很简单,那么请略过。
2.脱壳过程(分以下几步进行)
设置Ollydbg忽略所有的异常选项,用IsDebug 1.4插件去掉Ollydbg的调试器标志。
(1)查找OEP
用OD中载入程序,下bp WaitForDebugEvent,F9运行,中断如下:
77E93A07 k> 55 push ebp <====中断在此处,清除断点
77E93A08 8BEC mov ebp,esp
77E93A0A 83EC 68 sub esp,68
77E93A0D 56 push esi
77E93A0E FF75 0C push dword ptr ss:[ebp+C]
查看堆栈窗口:
0012DAC0 00423D67 /CALL 到 WaitForDebugEvent 来自 NOTEPAD.00423D61
0012DAC4 0012EB84 |pDebugEvent = 0012EB84 <====注意这里
0012DAC8 000003E8 \Timeout = 1000. ms
在0012EB84所在的行上点击右键选“转存中跟随”。
然后再下bp WriteProcessMemory,F9运行
77E41A90 k> 55 push ebp <====中断在此处
77E41A91 8BEC mov ebp,esp
77E41A93 51 push ecx
77E41A94 51 push ecx
77E41A95 8B45 0C mov eax,dword ptr ss:[ebp+C]
看数据转存窗口:
0012EB84 01 00 00 00 40 07 00 00 ...@..
0012EB8C 5C 01 00 00 01 00 00 80 \....