欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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

程序员文章站 2022-04-12 21:39:34
by lchhome 1、首先用PEID查壳为Armadillo4.4x的壳,而且是双进程壳。 2、用OD忽略所有异常,隐藏OD,载入程序 在命令行下bp OpenMutexA 断点,...
by lchhome

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   跳到这里www.2cto.com
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文件