本帖是关于Armadillo CopyMem-ll +Debug-Blocker的脱壳过程。在学习的过程中做了些笔记,如果笔记中有错误或者有遗漏的步骤,欢迎大家在评论区指出!
1. 先查壳

2. 载入程序下这个断点并F9运行


3. 取消这个断点,再换下另外一个断点bp WriteProcessMemory并F9运行

也带有真实的OEP(004015AC)

4. 再次取消这个断点,重新载入这个程序并下这个断点he WaitForDebugEvent, F9运行

取消这个断点,ALT+F9返回到用户,然后搜索常量(FFFFFFF8)


双击第二个地址(005B03F1)

5. 先来到这里,然后再找到005B038A这个地址清除其它的硬件断点并再这里下硬件断点就可以断在这个地址(如图)


要在这里复制这些代码总共8断代码

以这种形式记录下来

需要在这里patch

填入三段代码


然后再来到这个地址下硬件断点(需要先清除其它的硬件断点)

断在这个地址

打开LordPE,选择第2个进程,修复映像大小并转存

把转存好的文件真实的OEP填进去

保存文件。
6. 载入脱壳后的文件(脱壳后的文件还不能运行)
真实的入口点

用OD载入这个修复完的程序,并找到这个call计算RVA和size

RVA 4F2120->F211C


size
4F2F6C-> F3004
F3004- F211C=EE8

7. 在跳过加密,修改Magic Jump的时候就出现了些问题
用OD再一次载入未脱壳的程序,bp DebugActiveProcess并F9运行

再开启一个OD,用OD附加这个子进程。载入之后,ALT+F9返回

并修改入口点的值

修改完之后下这个断点BP OpenMutexA并F9运行,到了这里,Ctrl+G 00401000到达这个地址



新建EIP

再次F9,再次中断,取消断点。撤销在00401000里的代码

8. 再下这个断点BP GetModuleHandleA+5并F9运行

来到这里

Shift+F9来到这里(红框为该壳的返回时机)

再次Shift+F9回到系统的领空,ALT+F9返回来到这里。这个跳转也就在kernel32.LoadLibraryA下面,修改跳转,强制到达OEP,开始修复IAT

OEP被强制解密了

9. 填入OEP还有刚才找的RVA(size是默认1000)。修复之前要勾上这个选项,不然会提示无效PE文件

不要点IAT search,直接点获取输入表。

直接剪切掉无效的指针

修复转存即可运行