boot 发表于 2022-10-26 15:17

Armadillo4.40x86非标准双进程(CopyMem2)脱壳

运行环境:
Win2003 x32;
涉及工具:
OD1.10;Rec Imp1.7;Scylla 0.98;Lord PE;
教程类型:
脱壳;
视频是否带有论坛水印:
是;
是否讲解思路和原理:
否;演示详细过程;
是否为悬赏杀手:
否;
以下为图文内容:

            Armadillo4.40x86非标准双进程(CopyMem2)脱壳
                         boot / 52hb.com
                           2022.10.26

非标准双进程程序,顾名思义,即按照常规标准双进程转单进程后无法处理的样本。
它仍然具有双进程,但是汇编手动转单进程后,程序无法直接运行。
提示错误代码C或者其他,高版本会报错误代码C。报错后程序直接终止
这里的C指的是CopyMem2,令人头疼,难度较大,常规脱壳机或者脚本无法处理。
鉴于可供参考的实操教程很少,大多数时间久远附件失效,或语焉不详,因此补录一份以备份。

错误代码:我来复现这种情况;
标准双进程转单进程后能直接运行,不存在报错;而非标准双进程则报错,程序终止。

这份教程就是针对这种非标准双进程情况而录。

============
注意:
1、调试CopyMem2类程序时候,尽量移除OD的反调试插件,只保留StrongOD 0.48插件;
2、OD务必按照我这样设置;
3、调试过程中,不要修改OD插件配置;
4、调试过程中,及时撤销硬件/软件断点,撤销被修改的内存;
5、调试过程中,非常卡顿,留意;
============
这个主程序是5.13版本的,加的是穿山甲4.40版本的壳。
样本信息:
Protection Options:
>Debug-Blocker + CopyMem2
>Enable Memory-Patching Protections
Version Number:
>4.40
============
一、找OEP
1、OpenMutexA F2中断一次
2、WaitForDebugEvent 硬断一次,堆栈第二行(即hProcess行)数据窗口跟随。
3、WriteProcessMemory 硬断一次,数据窗口显示OEP
OEP==006AD4A0

二、Patch代码DUMP程序
Patch的目的是使得程序运行后,避开校验,强制解压;如果没避开校验,则运行后会报错C。


1、重载OD,OpenMutexA F2中断一次
2、WaitForDebugEvent 硬断一次,执行到用户代码
3、搜索所有常量FFFFFFF8,六行密集处。点击第一行

        or      eax, 0xFFFFFFF8   //点击第一行
        or      eax, 0xFFFFFFF8
        or      eax, 0xFFFFFFF8
        or      eax, 0xFFFFFFF8
        or      eax, 0xFFFFFFF8
        or      eax, 0xFFFFFFF8


//往上翻找到这四句
0073C30A    83BD CCF5FFFF 0>cmp   dword ptr , 0x0 //这一行F2中断一次//关键地址CCC:0073C30A
0073C311    0F8C A8020000   jl      0073C5BF
0073C317    8B8D CCF5FFFF   mov   ecx, dword ptr
0073C31D    3B0D 88647700   cmp   ecx, dword ptr //关键地址BBB:0x776488

//这一行F2中断一次,留意信息窗口,取得关键地址AAA:0012ED68
信息窗口显示: //关键地址AAA:0012ED68 //务必改成0

(配置好OD插件,并且确保0012XXXX置0,并且没有遗漏加4,才能脱壳成功。)


关键地址AAA:0012ED68
关键地址BBB:0x776488
关键地址CCC:0073C30A

三、找Patch点:Patch代码的位置,第三个FFFFFFF8后的and eax,0ff语句处
        add   esp, 0xC
        and   eax, 0xFF//这里是Patch点
        test    eax, eax


也可以Ctrl+S搜索代码段,留意是在cmp地址之下,最靠近的代码段即是:
add   esp, 0xC
and   eax, 0xFF
test    eax, eax

Patch范式:

        inc   dword ptr ; 这里是Patch点        ;关键地址AAA
        mov   dword ptr , 0x1                ;关键地址BBB,(配置好OD插件,并且确保0012XXXX置0,并且没有遗漏加4,才能脱壳成功。)
        jmp   CCC                        ;关键地址CCC
        nop
        nop
        nop
        nop



ENTER跟随 0073C3ED来到0073C30A ;再次ENTER跟随0073C311,来到新地址0073C5BF
新地址0073C5BFF2软件断点中断1次:

此时Lord PE可以DUMP程序了。
DUMP的是第二个进程,即非正在调试的进程(子进程)。子进程ID十六进制:ee8   十进制:3816
把刚DUMP下的程序入口点改为记录下的程序的OEP
006AD4A0 VA
00400000 BASE
RVA= 006AD4A0 -00400000 =002AD4A0
----------------------------------------------------
!!!!!此时可以关闭原OD了!!!!!
----------------------------------------------------

打开DUMP下的程序,查找IAT的起始位置
Borland语言进入第一个CALL之后的首个CALL找IAT;或者搜索FF 25右键,数据窗口跟随立即数。
C语言第一个CALL右键,数据窗口跟随立即数
IAT信息,

IAT_START:
$ ==>    006EB280    7C96AE65ntdll.RtlDeleteCriticalSection


IAT_END:
$+770    006EB9F0    7C8024B2kernel32.Sleep


IAT_SIZE:
778

----------------------------------------------------
重新打开加壳程序,修复DUMP的程序。
记录下带壳程序起始两个字节 55 8B   ,等会修被补附加的子进程入口点需要用到。

四、附加子进程并脱壳
1、DebugActiveProcess 硬断一次,堆栈查找子进程ID 0x148。
2、额外打开OD附加子进程,此时可能会卡顿,稍等。
(注意:务必设置好OD,中途禁止更改OD配置,尽量移除反调试插件)
3、中断在系统领空,ALT+F9执行到用户代码。
修改首字节为记录下的加壳程序首字节

4、下面进行被附加的子进程转单进程处理:
OpenMutexA ,F2中断一次;
双进程转单进程汇编范式:
<$fotobatc.1000>

        PUSHAD
        PUSHFD
        PUSH 12FDD8
        XOR EAX,EAX
        PUSH EAX
        PUSH EAX
        CALL CreateMutexA
        popfd
        popad
        jmp OpenMutexA

GetModuleHandleA+5硬断,当寄存器出现kernel32.dll的时候,即是返回时机。
Alt+F9返回。

5、下面找到MAGIC_JMP,跳过IAT加密:
MAGIC_JMP:01075FFA
两个salc上设置断点,如果能被中断,说明已经跳过IAT加密;
中断之后,撤销MAGIC_JMP的修改,防止内存检测。

6、找OEP
CreateThread中断一次,执行到用户代码,单步。
单步到这里的时候,使用标志位,进入到第一个CALL即是OEP。

五、脱壳
注意,REC IMP与Scylla选中的是子进程。
子进程IP的16进制形式:14810进制形式:328
REC IMP填的是相对地址RVA,Scylla填的是绝对地址。
REC IMP修复失败;用Scylla修复,Scylla填的是绝对地址VA。
IAT大小填1000,完全包含我们计算得到的 778大小,出现无效指针直接剪切。
REC IMP修复失败;Scylla修复成功。
修复成功。

脱壳后有兴趣自行尝试破解主程序。




链接:


**** Hidden Message *****

520pojie 发表于 2022-10-27 12:08

MAGIC_JMP难找一点

snak2020 发表于 2022-10-27 12:13

感谢大佬分享

三斤回锅肉 发表于 2022-10-27 12:15

小白看不懂 支持一下热心分享的人

弃天帝520 发表于 2022-10-27 12:21

感谢boot大神分享

JuStkK 发表于 2022-10-27 12:40

看看大佬的教程啊

0×Ret 发表于 2022-10-27 13:10

酷炫吊炸天

POP 发表于 2022-10-27 15:15

感谢 分享

iiuu122 发表于 2022-10-27 16:51

学习一下

ffirefoxABC 发表于 2022-10-27 17:07

谢谢分享!!!!!!!!
页: [1] 2 3 4
查看完整版本: Armadillo4.40x86非标准双进程(CopyMem2)脱壳