首页
社区
课程
招聘
[原创]Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks(单进程)
发表于: 2009-5-27 12:59 6072

[原创]Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks(单进程)

2009-5-27 12:59
6072
peid查壳
     Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks(单进程)      
AFP查壳保护措施
!- Protected Armadillo

<Protection Options>
Standard protection or Minimum protection    //标准保护或者最少保护

<Backup Key Options>
Fixed Backup Keys                            //固定备份钥匙

<Compression Options>                        //压缩选项
Better/Slower Compression
--------------------------------------------------------------------
OD设置忽略所有异常,手动添加所有异常,来到如下代码:
0105B000 N> 60             pushad                   //程序入口点
0105B001     E8 00000000    call NOTEPAD.0105B006
0105B006     5D             pop ebp
0105B007     50             push eax
0105B008     51             push ecx
命令行下断点
硬件执行 he GetModuleHandleA+5/bp GetModuleHandleA+5
内存断点 he GetModuleHandleA/bp GetModuleHandleA
推荐大家广泛使用硬件执行断点,但是不同的穿山甲下的断点不一样,要多积累经验。
shift+F9忽略所有一样运行,注意观察右下角堆栈区的提示:
第一次堆栈如下:
00079500   |00AC6DF3    返回到 00AC6DF3 来自 kernel32.GetModuleHandleA
00079504   |00ADBC1C    ASCII "kernel32.dll"
00079508   |00ADCEC4    ASCII "VirtualAlloc"    //关键信息
0007950C   |00ADFA98
00079510   |7C9210E0    ntdll.RtlLeaveCriticalSection
第二次堆栈如下:
00079500   |00AC6E10    返回到 00AC6E10 来自 kernel32.GetModuleHandleA
00079504   |00ADBC1C    ASCII "kernel32.dll"
00079508   |00ADCEB8    ASCII "VirtualFree"    //关键信息,一般情况下马上就要返回程序领空了
0007950C   |00ADFA98
00079510   |7C9210E0    ntdll.RtlLeaveCriticalSection
第三次堆栈如下:
00079264   |00AB5CE1    返回到 00AB5CE1 来自 kernel32.GetModuleHandleA
00079268   |000793B4    ASCII "kernel32.dll"    //出现这个表示要到程序领空了。
说明:穿山甲找Majicjump都是出现这三个提示,返回程序领空。
删除硬件断点,ALT+F9返回程序领空,来到:
00AB5CE1     8B0D AC40AE00 mov ecx,dword ptr ds:[AE40AC]
00AB5CE7     89040E         mov dword ptr ds:[esi+ecx],eax
00AB5CEA     A1 AC40AE00    mov eax,dword ptr ds:[AE40AC]
00AB5CEF     391C06         cmp dword ptr ds:[esi+eax],ebx
00AB5CF2     75 16          jnz short 00AB5D0A
00AB5CF4     8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00AB5CFA     50             push eax
00AB5CFB     FF15 BC62AD00 call dword ptr ds:[AD62BC]           ; kernel32.LoadLibraryA         //这个关键函数,一般在他下面的就是majicjump
00AB5D01     8B0D AC40AE00 mov ecx,dword ptr ds:[AE40AC]
00AB5D07     89040E         mov dword ptr ds:[esi+ecx],eax
00AB5D0A     A1 AC40AE00    mov eax,dword ptr ds:[AE40AC]
00AB5D0F     391C06         cmp dword ptr ds:[esi+eax],ebx
00AB5D12     0F84 2F010000 je 00AB5E47   //Majicjump魔法跳转,改为jmp,右键跟随                                               
00AB5D18     33C9           xor ecx,ecx
00AB5D1A     8B07           mov eax,dword ptr ds:[edi]
00AB5D1C     3918           cmp dword ptr ds:[eax],ebx
00AB5D1E     74 06          je short 00AB5D26
00AB5D20     41             inc ecx
00AB5D21     83C0 0C        add eax,0C
00AB5D24   ^ EB F6          jmp short 00AB5D1C
跟随来到如下代码:
00AB5E47     83C7 0C        add edi,0C
00AB5E4A     89BD 78FDFFFF mov dword ptr ss:[ebp-288],edi
00AB5E50     83C6 04        add esi,4
00AB5E53     395F FC        cmp dword ptr ds:[edi-4],ebx
00AB5E56   ^ 0F85 49FEFFFF jnz 00AB5CA5
00AB5E5C     EB 03          jmp short 00AB5E61      此处下F2普通断点
00AB5E5E     D6             salc                    //关键信息
00AB5E5F     D6             salc                    //关键信息   表明上面是majic jump
00AB5E60     8F             ???                                  ; 未知命令

F9执行,取消断点,撤销修改。Alt+M打开内存镜像窗口,找到第一个区段为.text的,右键下内存访问断点,F9运行。
说明:不同的版本OD不一定可以断下来,看雪版本OD可以,还是看雪的东西好啊,支持看雪。
来到如下代码:
00AAF68F    8B12            mov     edx, dword ptr [edx]
00AAF691    8955 DC         mov     dword ptr [ebp-24], edx
00AAF694    834D FC FF      or      dword ptr [ebp-4], FFFFFFFF
00AAF698    EB 11           jmp     short 00AAF6AB
00AAF69A    6A 01           push    1
00AAF69C    58              pop     eax
00AAF69D    C3              retn
下面单步F8,来到第一个call edi或call ecx之类call时,F7跟进,直接跳向OEP
0100739D    6A 70           push    70                      //OEP
0100739F    68 98180001     push    01001898
010073A4    E8 BF010000     call    01007568
010073A9    33DB            xor     ebx, ebx
010073AB    53              push    ebx
010073AC    8B3D CC100001   mov     edi, dword ptr [10010CC]         ; kernel32.GetModuleHandleA
010073B2    FFD7            call    edi
010073B4    66:8138 4D5A    cmp     word ptr [eax], 5A4D
010073B9    75 1F           jnz     short 010073DA
Dump掉ImportREC修复,剪切掉无效指针即可。
--------------------------------------------------------
为程序减肥,看区段,很多重复区段,用CFF Explorer删除重复区段,体积减少很多,有原来的784K,减为144K。
到底脱壳完美的完成。
---------------------------------------总结----------------------------------------------------------
可学的地方:
           OD的设置,不同版本OD处理穿山甲不一样,首选看雪的
           找魔法跳转的返回时机,跳过魔法验证
           对无效函数的修复
           对脱完壳的程序就行减肥   

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
单进程根据三处特征码找majic jump
2009-5-27 13:02
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
强大学习了呵呵
2009-6-3 15:52
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
4
Support.
2009-6-3 18:37
0
游客
登录 | 注册 方可回帖
返回
//