首页
社区
课程
招聘
[原创]手脱某炒股软件Armadillo(穿山甲)壳分析
发表于: 2012-2-12 18:33 6932

[原创]手脱某炒股软件Armadillo(穿山甲)壳分析

2012-2-12 18:33
6932
手脱某炒股软件Armadillo(穿山甲)壳
1、首先用PEID查壳为Armadillo4.4x的壳,而且是双进程壳。
2、用OD忽略所有异常,隐藏OD,载入程序 在命令行下bp OpenMutexA 断点,Shift+ F9中断如下:
7C80EABB >  8BFF            mov     edi, edi 中断在这里
7C80EABD    55              push    ebp
7C80EABE    8BEC            mov     ebp, esp
7C80EAC0    51              push    ecx
7C80EAC1    51              push    ecx
7C80EAC2    837D 10 00      cmp     dword ptr [ebp+10], 0
7C80EAC6    56              push    esi
7C80EAC7    0F84 A7550300   je      7C844074
我们再CTRL+G 输入00401000,来到这里
然后我们在下面的空白地址填入下面的数值
00401000 60 pushad
00401001 9C pushfd
00401002 68 A0FD1200 push 12FDA0 注意 ; ASCII " 8E8::DA113A5A09"
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 CFD9407C call KERNEL32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 - E9 A4DA407C jmp KERNEL32.OpenMutexA
全部填完后我们把他们全选上 在 此处新建EIP F9 中断后 取消断点 在CTRL+G 输入00401000,然后就撤销选择处修改, 此时我们的双变单就完成了。
3、避开Anti (Armadillo到了4X以后 OD多了一个漏洞 )
he OutputDebugStringA,中断2次!,选中%s%之类的字符,点右键“数据窗口中跟随”->二进制->使用00填充,然后在”调试”工具栏中删除此硬件断点!
4、这一步就和我们单进程脱壳一样了, 下he GetModuleHandleA 断点,F9运行,找返回时机。这里给大家说个技巧,当出现"VirtualAlloc" "VirtualFree"后,再出现"kernel32.dll",就是我们的返回时机。在”调试”工具栏中删除此硬件断点,Alt+F9返回以下程序
01C759E3    8B0D 6C50CA01   mov     ecx, dword ptr [1CA506C]  返回在此
01C759E9    89040E          mov     dword ptr [esi+ecx], eax
01C759EC    A1 6C50CA01     mov     eax, dword ptr [1CA506C]
01C759F1    391C06          cmp     dword ptr [esi+eax], ebx
01C759F4    75 16           jnz     short 01C75A0C
01C759F6    8D85 B4FEFFFF   lea     eax, dword ptr [ebp-14C]
01C759FC    50              push    eax
01C759FD    FF15 B862C901   call    dword ptr [1C962B8]              ; kernel32.LoadLibraryA
01C75A03    8B0D 6C50CA01   mov     ecx, dword ptr [1CA506C]
01C75A09    89040E          mov     dword ptr [esi+ecx], eax
01C75A0C    A1 6C50CA01     mov     eax, dword ptr [1CA506C]
01C75A11    391C06          cmp     dword ptr [esi+eax], ebx
01C75A14    0F84 2F010000   je      01C75B49         单步走到这,修改JMP,跳走
01C75A1A    33C9            xor     ecx, ecx
01C75A1C    8B07            mov     eax, dword ptr [edi]
01C75A1E    3918            cmp     dword ptr [eax], ebx
01C75A20    74 06           je      short 01C75A28
01C75A22    41              inc     ecx
01C75A23    83C0 0C         add     eax, 0C
01C75A26  ^ EB F6           jmp     short 01C75A1E

01C75B49    83C7 0C         add     edi, 0C   跳到这里
01C75B4C    89BD 78FDFFFF   mov     dword ptr [ebp-288], edi
01C75B52    83C6 04         add     esi, 4
01C75B55    395F FC         cmp     dword ptr [edi-4], ebx
01C75B58  ^ 0F85 49FEFFFF   jnz     01C759A7
01C75B5E    EB 03           jmp     short 01C75B63
Alt+M,打开内存镜像在00401000处F2下断,F9运行断下, 我们单步走 如下01C9026B    8B0C3A          mov     ecx, dword ptr [edx+edi]  断在这里
01C9026E    5B              pop     ebx
01C9026F    03D7            add     edx, edi
01C90271    A1 A410CA01     mov     eax, dword ptr [1CA10A4]
01C90276    3148 58         xor     dword ptr [eax+58], ecx
01C90279    A1 A410CA01     mov     eax, dword ptr [1CA10A4]
01C9027E    3148 58         xor     dword ptr [eax+58], ecx
01C90281    A1 A410CA01     mov     eax, dword ptr [1CA10A4]
01C90286    8B16            mov     edx, dword ptr [esi]
01C90288    8B88 84000000   mov     ecx, dword ptr [eax+84]
01C9028E    3348 78         xor     ecx, dword ptr [eax+78]
01C90291    3348 10         xor     ecx, dword ptr [eax+10]
01C90294    030D BC10CA01   add     ecx, dword ptr [1CA10BC]         ; ql.00400000
01C9029A    85D2            test    edx, edx
01C9029C    75 1A           jnz     short 01C902B8
01C9029E    8B90 84000000   mov     edx, dword ptr [eax+84]
01C902A4    FF76 18         push    dword ptr [esi+18]
01C902A7    3350 68         xor     edx, dword ptr [eax+68]
01C902AA    FF76 14         push    dword ptr [esi+14]
01C902AD    3310            xor     edx, dword ptr [eax]
01C902AF    FF76 10         push    dword ptr [esi+10]
01C902B2    2BCA            sub     ecx, edx
01C902B4    FFD1            call    ecx     
01C902B6    EB 1F           jmp     short 01C902D7
01C902B8    83FA 01         cmp     edx, 1
01C902BB    75 1D           jnz     short 01C902DA
01C902BD    FF76 04         push    dword ptr [esi+4]
01C902C0    8B90 84000000   mov     edx, dword ptr [eax+84]
01C902C6    3350 68         xor     edx, dword ptr [eax+68]
01C902C9    FF76 08         push    dword ptr [esi+8]
01C902CC    3310            xor     edx, dword ptr [eax]
01C902CE    6A 00           push    0
01C902D0    FF76 0C         push    dword ptr [esi+C]
01C902D3    2BCA            sub     ecx, edx
01C902D5    FFD1            call    ecx   F8单步走到这里,F7跟进,就是OEP
01C902D7    8945 FC         mov     dword ptr [ebp-4], eax
01C902DA    8B45 FC         mov     eax, dword ptr [ebp-4]
01C902DD    5F              pop     edi
01C902DE    5E              pop     esi
01C902DF    C9              leave
01C902E0    C3              retn

此时,载入LordPE,找到此软件进程,点键“完整转存”,脱壳完毕,不用关OD,载入ImportREC V1.6F 汉化版,找到进程,OEP填入53411E,“IAT自动搜索”——“获取输入信息”,出现假指针,剪切掉,然后修复抓取文件。OK,运行脱壳后的文件,正常!
最后可以给文件做个减肥。用 LordPE,点击PE编辑器 打开脱壳后的文件,点“区段”把 text1 adata data1 reloc1 padtat 这5个区段删除掉。然后重建PE文件

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 380
活跃值: (103)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
强烈支持一下,好久没看见脱这个壳的文章了,很详细,可惜没原程序跟着试验一番啊
2012-2-12 21:00
0
雪    币: 717
活跃值: (480)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
链接地址:http://www.16gt.cn/soft/default.aspx
2012-2-13 11:22
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fyd
4
学习了。。。。
2012-2-16 15:04
0
雪    币: 13248
活跃值: (3647)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享   收藏学习
2012-2-18 12:01
0
雪    币: 216
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
很给力的脱文啊,穿山甲现在脱的人很多啊。
2012-2-23 14:26
0
游客
登录 | 注册 方可回帖
返回
//