好友
阅读权限10
听众
最后登录1970-1-1
|
658
发表于 2011-1-29 22:14
泪牛满面那。。。终于给我脱下来了。。。穿山甲真变态呀。。
Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks
程序:FlyWoool.exe(吉祥天传世外挂 1.0.0.1)
原教程地址:无
脱壳前的准备:
1、OD设置忽略所有的异常,用隐藏插件隐藏OD
2、思想准备:Armadillo对断点的检测非常严格,所以我们在设置断点的时候要尽量去使用“硬件执行”
3、概念准备:使用PEID的Armadillo的版本检测一般没那么准确,我倒是发现fi的版本检测还是要强一些
4、Magic Jump:跳转的跨越段一般比较大!(返回时机一定要对!)
5:返回的时机:1、返回的地址是系统领空 2、Shift+F9过程当中,时间缓冲比较大才停下
总分四步
一、双变单(使程序把自己当成子进程运行)bp OpenMutexA
二、避开Anti (手动避免OD BUG ) he OutputDebugStringA
三、Magic Jump,避开IAT加密 he GetModuleHandleA+5
四、LoadPE脱壳 IR修复
具体步骤
一、双变单(使程序把自己当成子进程运行)
bp OpenMutexA
F9(左下角 提示异常)
选项 调试 异常 添加最近的异常
Shift+F9(断下后不要取消断点)
Ctrl+G 00401000
依次输入 ***注意第三句的地址出处
00401000 60 pushad
00401001 9C pushfd
00401002 68 A0FD1200 push 12FDA0 ******** ; ASCII "44C::DA47D45903"
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 E694A677 call KERNEL32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 - E9 8F9FA777 jmp KERNEL32.OpenMutexA
选上变红的这一段 右键 此处新建EIP
F9
F2取消断点
ctrl+G 00401000
选上红的一段 撤销
二、避开Anti
he OutputDebugStringA 回车 F9
选中%s%之类的字符,点右键 数据窗口跟随 第一行右键 二进制 使用00填充
F9
选中%s%之类的字符,点右键 数据窗口跟随 第一行右键 二进制 使用00填充
删除硬件断点
三、Magic Jump,避开IAT加密
he GetModuleHandleA+5 回车
Shift+F9
堆栈窗口
SHIF+F9
出现
001292A8 |01066AC2 返回到 01066AC2 来自 KERNEL32.GetModuleHandleA
001292AC |0107BD6C ASCII "kernel32.dll"
001292B0 |0107DDAC ASCII "VirtualAlloc"***
001292A4 /0012EBB0
001292A8 |01066ADF 返回到 01066ADF 来自 KERNEL32.GetModuleHandleA
001292AC |0107BD6C ASCII "kernel32.dll"
001292B0 |0107DDA0 ASCII "VirtualFree"****
下个SHIft+F9 便可删除硬件断点
Alt+F9
寻找Magic Jump 一般在call dword ptr ds:[10762B8] ; KERNEL32.LoadLibraryA ***** 下面的je
01055A99 8B0D 6C500801 mov ecx,dword ptr ds:[108506C] //返回到这里!
01055A9F 89040E mov dword ptr ds:[esi+ecx],eax
01055AA2 A1 6C500801 mov eax,dword ptr ds:[108506C]
01055AA7 391C06 cmp dword ptr ds:[esi+eax],ebx
01055AAA 75 16 jnz short 01055AC2
01055AAC 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
01055AB2 50 push eax
01055AB3 FF15 B8620701 call dword ptr ds:[10762B8] ; KERNEL32.LoadLibraryA *****
01055AB9 8B0D 6C500801 mov ecx,dword ptr ds:[108506C]
01055ABF 89040E mov dword ptr ds:[esi+ecx],eax
01055AC2 A1 6C500801 mov eax,dword ptr ds:[108506C]
01055AC7 391C06 cmp dword ptr ds:[esi+eax],ebx
01055ACA 0F84 2F010000 je 01055BFF //Magic Jump,改jmp
01055AD0 33C9 xor ecx,ecx
01055AD2 8B07 mov eax,dword ptr ds:[edi]
01055AD4 3918 cmp dword ptr ds:[eax],ebx
01055AD6 74 06 je short 01055ADE
01055AD8 41 inc ecx
01055AD9 83C0 0C add eax,0C
往下拉,找如此类似的序列(一个jnz,一个jmp,两个salc//Magic Jump)
01055C0E ^\0F85 49FEFFFF jnz 01055A5D
01055C14 EB 03 jmp short 01055C19 //F2下断,Shift+F9,断下!取消断点!
01055C16 D6 salc(其上下断)
01055C17 D6 salc
往上拉 撤消Magic Jump处的修改!
Alt+M打开内存镜像,在00401000段下断,Shift+F9
7C94AB4F 55 push ebp//跳转后的出口
7C94AB50 8BEC mov ebp,esp
7C94AB52 51 push ecx
7C94AB53 FF75 08 push dword ptr ss:[ebp+8]
7C94AB56 E8 DE57FEFF call ntdll.RtlImageNtHead>
7C94AB5B F640 5F 04 test byte ptr ds:[eax+5F]>
7C94AB5F 0F85 EE610200 jnz ntdll.7C970D53
7C94AB65 8D45 FC lea eax,dword ptr ss:[ebp>
7C94AB68 50 push eax
7C94AB69 6A 0A push 0A
7C94AB6B 6A 01 push 1
单步F8
010D038C 3350 40 xor edx,dword ptr ds:[eax+40]
010D038F 6A 00 push 0
010D0391 FF76 0C push dword ptr ds:[esi+C]
010D0394 2BCA sub ecx,edx
010D0396 FFD1 call ecx //OEP F7跟进 ; FlyWoool.004B79A6
010D0398 8945 FC mov dword ptr ss:[ebp-4],eax
010D039B 8B45 FC mov eax,dword ptr ss:[ebp-4]
010D039E 5F pop edi
010D039F 5E pop esi
到达OEP
脱壳 直接剪切无效指针
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|