首页
论坛
专栏
课程

[原创]穿山甲的菊花开了

2019-3-8 20:26 8034

[原创]穿山甲的菊花开了

2019-3-8 20:26
8034
【文章标题】: 穿山甲的菊花开了
【文章作者】: eJamse
【目标程序】: PIMOne6.0、Print2Flash4
【加壳方式】: Armadillo
【下载地址】: 链接: https://pan.baidu.com/s/1jeHG6mobEX-OI-mPF3_QXA 提取码: cvb2 包含(PIMOne6.0、Print2Flash4、ArmAccess.dll)
【使用工具】: OD ExeinfoPE LordPE ImportRec UIF
【操作平台】: Win7 sp1实环境(Win7下函数前记得要加库名,譬如KERNELBA.)
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
    偶然看了飘云阁Rooking大神的Armadillo脱壳视频,据说对Armadillo4.x-9.x通杀,照猫画虎试炼了一下,感觉有点后怕:再强的壳终有被捅菊花的一天,只是时间问题。
    把试炼过程记录下来,方便我等小白依法炮制。原理俺就不懂了,哪位大牛出来解释一下原理,让我们一窥管豹,就是我等福泽了!由于内容太黄太暴力,又么有技术含量,大家低调分享,版主就不要加精了。
    废话不多说,下面开始:
    一、PIMOne6.0
    ExeinfoPE查壳,显示为:
Armadillo 6.0x - 7.0 (exe) 32bit  -  www.siliconrealms.com    *ACM 
1、复制ArmAccess.dll到目标主程序PIMOne.exe目录;
2、OD载入目标PIMOne.exe,忽略所有异常,隐藏OD,
Ctrl+G转到KERNELBA.VirtualProtect,在段尾75A21B48   \.  C2 1000  retn 10下断;
Ctrl+G转到kernel32.CreateThread,在段尾75CEDE93   \.  C2 1800  retn 18下断;
3、先禁用上面两个断点,F9运行,弹窗三次点OK,并Shift+F9运行,出现试用弹窗,此时先激活上面两个断点,再点OK,停在75A21B48,观察堆栈
00129490   01A2FD43  返回到 01A2FD43 来自 kernel32.VirtualProtect
00129494   00401000  PIMOne.00401000;重要标志
4、单步F7(F8)返回到
01A9FD43     8B8D 28D8FFFF         mov ecx,dword ptr ss:[ebp-27D8]
在该行右键点数据窗口跟随
01A2FD43  8B 8D 28 D8 FF FF 51 8B 95 24 D8 FF FF 52 8B 85  媿(?Q嫊$?R媴
Ctrl+B查找ASCII码ArmAccess找到
01A6D72C  41 72 6D 41 63 63 65 73 73 2E 44 4C 4C 00 00 00  ArmAccess.DLL...
01A6D73C  41 72 6D 41 63 63 65 73 73 00 00 00 2E 64 6C 6C  ArmAccess....dll
改成
01A6D72C  56 72 6D 41 63 63 65 73 73 2E 44 4C 4C 00 00 00  VrmAccess.DLL...
01A6D73C  56 72 6D 41 63 63 65 73 73 00 00 00 2E 64 6C 6C  VrmAccess....dll
5、(壳已自解码)反汇编窗口Ctrl+B查找74??6800010000(两个都不勾选)找到
01A307E9    /74 4A                 je short 01A30835
01A307EB    |68 00010000           push 100
01A307F0    |8D95 F4C3FFFF         lea edx,dword ptr ss:[ebp-3C0C]
01A307F6    |52                    push edx
01A307F7    |8B85 F4C4FFFF         mov eax,dword ptr ss:[ebp-3B0C]
01A307FD    |8B08                  mov ecx,dword ptr ds:[eax]
01A307FF    |51                    push ecx
01A30800    |E8 4BDC0000           call 01A3E450
跟随进入01A30800的CALL找到段首
01A3E450     55                    push ebp
改成
01A3E450     C3                    retn
6、F9运行,断在75A21B48,禁用此断点,继续F9断在75CEDE93,也禁用此断点。F7(F8)返回到
01A0713C     50                    push eax
01A0713D     FF15 5C83A601         call dword ptr ds:[1A6835C]; kernel32.CloseHandle
01A07143     5E                    pop esi
01A07144     5B                    pop ebx
01A07145     8BE5                  mov esp,ebp
01A07147     5D                    pop ebp
01A07148     C3                    retn
7、继续F8单步直到返回
01A3523F     83C4 04               add esp,4
向下找到
01A35345     FFD0                  call eax;段尾最近的CALL
01A35347     8945 FC               mov dword ptr ss:[ebp-4],eax
01A3534A     8B45 FC               mov eax,dword ptr ss:[ebp-4]
01A3534D     5E                    pop esi
01A3534E     8BE5                  mov esp,ebp
01A35350     5D                    pop ebp
01A35351     C3                    retn
8、点01A35345这一行F4,再F7跟入到达OEP=0063374C,此时用LordPE(修正大小)来Dump为dumped.exe,填入OEP:23374C,ImportREC自动方式获取API,剪切多余项,转存为dumped_.exe,OK
    二、Print2Flash4
    ExeinfoPE查壳,显示为:
Armadillo Pro Version v9.64 [ Private build stub ] 06-09-2013 - *www.siliconrealms.com    *ACM 
1、复制ArmAccess.dll到目标主程序print2f4.exe目录;
2、OD载入目标print2f4.exe,忽略所有异常,隐藏OD,
Ctrl+G转到KERNELBA.VirtualProtect,在段尾75A21B48   \.  C2 1000  retn 10下断;
Ctrl+G转到kernel32.CreateThread,在段尾75CEDE93   \.  C2 1800  retn 18下断;
3、多次F9运行,弹窗三次点OK,并Shift+F9运行,停在75A21B48,观察堆栈
00129010   01FC9D87  返回到 01FC9D87 来自 kernel32.VirtualProtect
00129014   00401000  print2f4.00401000;重要标志
4、单步F7(F8)返回到
01F59D87     8B8D B0D4FFFF         mov ecx,dword ptr ss:[ebp-2B50]
在该行右键点数据窗口跟随
01F59D87  8B 8D B0 D4 FF FF 51 8B 95 AC D4 FF FF 52 8B 85  媿霸Q嫊R媴
Ctrl+B查找ASCII码ArmAccess找到
0202B348  41 72 6D 41 63 63 65 73 73 36 34 2E 44 4C 4C 00  ArmAccess64.DLL.
0202B358  41 72 6D 41 63 63 65 73 73 2E 44 4C 4C 00 00 00  ArmAccess.DLL...
0202B368  41 72 6D 41 63 63 65 73 73 00 00 00 2E 64 6C 6C  ArmAccess....dll
改成
0202B348  56 72 6D 41 63 63 65 73 73 36 34 2E 44 4C 4C 00  VrmAccess64.DLL.
0202B358  56 72 6D 41 63 63 65 73 73 2E 44 4C 4C 00 00 00  VrmAccess.DLL...
0202B368  56 72 6D 41 63 63 65 73 73 00 00 00 2E 64 6C 6C  VrmAccess....dll
5、交替F9、F7(F8)运行到壳自解码(出现红字),停在
01F5AEB9     6A 14                 push 14
反汇编窗口Ctrl+B查找74??6800010000(两个都不勾选)找到
01F5B145    /74 4A                 je short 01F5B191
01F5B147    |68 00010000           push 100
01F5B14C    |8D85 ECBFFFFF         lea eax,dword ptr ss:[ebp+FFFFBFEC]
01F5B152    |50                    push eax
01F5B153    |8B8D ECC0FFFF         mov ecx,dword ptr ss:[ebp-3F14]
01F5B159    |8B11                  mov edx,dword ptr ds:[ecx]
01F5B15B    |52                    push edx
01F5B15C    |E8 AFFA0100           call 01F7AC10
跟随进入01F5B15C的CALL找到段首
01F7AC10     55                    push ebp
改成
01F7AC10     C3                    retn
6、F9运行,断在75A21B48,禁用此断点,继续F9断在75CEDE93,也禁用此断点。F7(F8)返回到
01F3CC0F     50                    push eax
01F3CC10     FF15 98830202         call dword ptr ds:[2028398]; kernel32.CloseHandle
01F3CC16     5E                    pop esi
01F3CC17     5B                    pop ebx
01F3CC18     8BE5                  mov esp,ebp
01F3CC1A     5D                    pop ebp
01F3CC1B     C3                    retn
7、继续F8单步直到返回
01F61B71     83C4 04               add esp,4
向下找到
01F61CE5     FFD2                  call edx;段尾最近的CALL
01F61CE7     8945 FC               mov dword ptr ss:[ebp-4],eax
01F61CEA     8B45 FC               mov eax,dword ptr ss:[ebp-4]
01F61CED     5E                    pop esi
01F61CEE     8BE5                  mov esp,ebp
01F61CF0     5D                    pop ebp
01F61CF1     C3                    retn
8、点01F61CE5这一行F4,再F7跟入到达OEP=006A30D8,此时用LordPE(修正大小)来Dump为dumped.exe,填入OEP:2A30D8,ImportREC自动方式获取API,级别1修复,剪切多余项,转存为dumped_.exe运行73571304出错
9、老OD找到73571304出错的地方:
0040F4C0   - FF25 78916B00         jmp dword ptr ds:[6B9178]; msimg32.GradientFill
ds:[006B9178]=73571304 (msimg32.GradientFill)
新OD载入dumped_.exe此处缺函数名,故在老OD用UIF修复,新IAT放在006B8000段,重新dump并用ImportREC修复转存,OK



[公告]LV6级以上的看雪会员可以免费获得《2019安全开发者峰会》门票一张!!

最后于 2019-3-14 23:05 被ejamse编辑 ,原因:
最新回复 (31)
jgs 2019-3-8 20:45
2
0
在飘云阁学的技术不到飘云阁发帖 
ejamse 3 2019-3-8 20:59
3
0
jgs 在飘云阁学的技术不到飘云阁发帖 [em_2]
我在网上搜到的视频,飘云阁要邀请码,我加不进
kanxue 8 2019-3-8 22:46
4
0
jgs 在飘云阁学的技术不到飘云阁发帖 [em_2]
技术没国界
发这里, 飘云阁老大也支持的,都是看雪的老会员
最后于 2019-3-8 22:47 被kanxue编辑 ,原因:
xiaohang 3 2019-3-8 22:53
5
0
欢迎来到看雪,看雪欢迎你
jgs 2019-3-9 08:56
6
0
kanxue jgs 在飘云阁学的技术不到飘云阁发帖 [em_2] 技术没国界发这里, 飘云阁老大也支持的,都是看雪的老会员
anxue  8    10小时前
 引用  举报  4 楼  0
  jgs 在飘云阁学的技术不到飘云阁发帖 
技术没国界
发这里, 飘云阁老大也支持的,都是看雪的老会员

段总这广告做的 高!
backahasten 1 2019-3-9 10:15
7
0
所以软件加密不可靠的,硬件加密才牛逼
白菜大哥 2019-3-9 11:31
8
0
看那菊花爆满山~
DegerYang 2019-3-9 13:03
9
0
邓dg 2019-3-10 00:08
10
0
谁能爆TMD VMP菊花
固件安全 2019-3-10 08:58
11
0
给力,大佬
w我正在看 2019-3-10 09:46
12
0
王者之剑 1 2019-3-11 00:22
13
0
很久没有看到了哦
speedboy 2019-3-11 08:19
14
0
学海无涯呀
Editor 2019-3-12 11:10
15
0
 欢迎欢迎
chenhuazi 2019-3-13 22:28
16
0
好久没来论坛了,来学习学习(: 
同样的体会:再强的壳终有被捅菊花的一天,只是时间问题。
fawcgzmg 2019-3-14 19:49
17
0
感谢分享,这些例子是单进程还是双进程,双进程不是需要转为单进程吗
ejamse 3 2019-3-14 21:05
18
0
fawcgzmg 感谢分享,这些例子是单进程还是双进程,双进程不是需要转为单进程吗
是单进程,双转单跟以前一样,转了以后就可以用了,还有:其实问题指针不用修复,直接剪切就行。
ejamse 3 2019-3-14 21:16
19
0
建议看一下chasgone大侠的《armadillo中code splicing的几种处理方法》,那里的脱法也非常好!
petersonhz 2019-3-19 15:29
20
0
提取码错误?楼主
petersonhz 2019-3-19 15:29
21
0
jgs 在飘云阁学的技术不到飘云阁发帖 [em_2]
为啥说是飘云阁的技术呢
ejamse 3 2019-3-21 00:22
23
0
petersonhz 提取码错误?楼主
我试了没问题啊。
ejamse 3 2019-3-21 00:23
24
0
老师有好的工作岗位提供给我吗?
jgs 2019-3-21 07:41
25
0
petersonhz 为啥说是飘云阁的技术呢[em_1]
给飘云阁打个广告
ejamse 3 2019-3-21 08:31
26
0
jgs 给飘云阁打个广告[em_41]
飘云阁老大,求邀请码一个
petersonhz 2019-3-21 08:54
27
0
jgs 给飘云阁打个广告[em_41]
飘雪阁可以吃么
李刚ctt 2019-4-19 09:47
28
0
要key的能打?
findreamwang 5 2019-4-26 15:44
29
0
ejamse 我在网上搜到的视频,飘云阁要邀请码,我加不进
师傅,请问您网上找的飘云阁视频是否存在解压密码
sunsjw 1 2019-4-27 14:40
30
0
jgs 在飘云阁学的技术不到飘云阁发帖 [em_2]
飘云阁注册要给钱,不去也罢。
mb_xyhaiutw 2019-6-3 16:23
31
0
有没有大佬upack 2.x-3.x脱一下
GOODLACK 2019-6-7 22:09
32
0
技术没国界
游客
登录 | 注册 方可回帖
返回