【文章标题】: 穿山甲的菊花开了
【文章作者】: 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目录;
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,观察堆栈
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)返回到
00129490 01A2FD43 返回到 01A2FD43 来自 kernel32.VirtualProtect
00129494 00401000 PIMOne.00401000;重要标志
4、单步F7(F8)返回到
01A9FD43 8B8D 28D8FFFF mov ecx,dword ptr ss:[ebp-27D8]
在该行右键点数据窗口跟随
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
改成
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
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
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
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
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目录;
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下断;
Ctrl+G转到KERNELBA.VirtualProtect,在段尾75A21B48 \. C2 1000 retn 10下断;
Ctrl+G转到kernel32.CreateThread,在段尾75CEDE93 \. C2 1800 retn 18下断;
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-3-14 23:05
被ejamse编辑
,原因: