吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3803|回复: 34

[原创逆向视频] Armadillo4.40x86非标准双进程(CopyMem2)脱壳

  [复制链接]
boot 发表于 2022-10-26 15:17 | 显示全部楼层 |阅读模式

运行环境:
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 [ebp-0xA34], 0x0 //这一行F2中断一次//关键地址CCC:0073C30A
0073C311    0F8C A8020000   jl      0073C5BF
0073C317    8B8D CCF5FFFF   mov     ecx, dword ptr [ebp-0xA34]
0073C31D    3B0D 88647700   cmp     ecx, dword ptr [0x776488]//关键地址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 [AAA] ; 这里是Patch点        ;关键地址AAA
        mov     dword ptr [BBB+4], 0x1                ;关键地址BBB,(配置好OD插件,并且确保0012XXXX置0,并且没有遗漏加4,才能脱壳成功。)
        jmp     CCC                        ;关键地址CCC
        nop
        nop
        nop
        nop



ENTER跟随 0073C3ED  来到0073C30A ;再次ENTER跟随0073C311,来到新地址0073C5BF
新地址0073C5BF  F2软件断点中断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    7C96AE65  ntdll.RtlDeleteCriticalSection


IAT_END:
$+770    006EB9F0    7C8024B2  kernel32.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进制形式:148  10进制形式:328
REC IMP填的是相对地址RVA,Scylla填的是绝对地址。
REC IMP修复失败;用Scylla修复,Scylla填的是绝对地址VA。
IAT大小填1000,完全包含我们计算得到的 778大小,出现无效指针直接剪切。
REC IMP修复失败;Scylla修复成功。
修复成功。

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


shot.jpg

链接:


游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 18威望 +1 HB +68 THX +11 收起 理由
lies + 1
消逝的过去 + 2
24567 + 1
attackmyth + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
创客者V2.0 + 1
虚心学习 + 1
WolfKing + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
Cerolluo + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
十三林 + 1
weiran324 + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
银河星光 + 1
李帅辰 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
后学真 + 1
temp + 1 + 1
JuStkK + 5 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
三斤回锅肉 + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
Shark恒 + 1 + 50 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
520pojie 发表于 2022-10-27 12:08 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
snak2020 发表于 2022-10-27 12:13 | 显示全部楼层

感谢大佬分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
三斤回锅肉 发表于 2022-10-27 12:15 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
弃天帝520 发表于 2022-10-27 12:21 来自手机端 | 显示全部楼层

感谢boot大神分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
JuStkK 发表于 2022-10-27 12:40 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
0×Ret 发表于 2022-10-27 13:10 来自手机端 | 显示全部楼层

酷炫吊炸天
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
192939 发表于 2022-10-27 15:15 | 显示全部楼层

感谢 分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
iiuu122 发表于 2022-10-27 16:51 | 显示全部楼层

学习一下
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ffirefoxABC 发表于 2022-10-27 17:07 | 显示全部楼层

谢谢分享!!!!!!!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表