首页
社区
课程
招聘
[原创]新人来谈FSG2.0的脱壳修复方法+遇到新的问题
发表于: 2006-12-13 23:45 3891

[原创]新人来谈FSG2.0的脱壳修复方法+遇到新的问题

2006-12-13 23:45
3891
这文章是写在我的Blog的。
http://scship.blogspot.com/
我想随便发出来想对看雪一点贡献吧。都是前人的方法总结,高手不要进来了,进来也不要看了,会掉大牙的!不过帮忙看看最后面我提的问题我就非常感激各位了。。。小弟有礼了。。。

FSG 2.0的快速脱壳方法我掌握就2种,

第一种方法:非常适合入门的人理解壳的原理,就是应用了壳的直奔向前永不回头的特性。
OD载入后停在下面

00400154 > 8725 60EB4000 xchg dword ptr ds:[40EB60],esp ;停在这里
0040015A 61 popad
0040015B 94 xchg eax,esp

用鼠标往下拉啊拉,滚轮滚啊滚,滚到这样的标志
js
jnz
jmp
就是出口了,在jmp那项直接F4然后F8就飞到OEP了。具体如下:

004001CA 8B07 mov eax,dword ptr ds:[edi]
004001CC 40 inc eax
004001CD ^ 78 F3 js short 复件_net.004001C2 ;这里往上跳了
004001CF 75 03 jnz short 复件_net.004001D4 ;这里在单步跟踪的时候不要F4啊,会跑飞的
004001D1 FF63 0C jmp dword ptr ds:[ebx+C] ;在这里F4然后接着一个F8就飞到OEP了。。。

第二种方法:
OD载入后按2下F8到这里:
0040015B 94 xchg eax,esp ; 停在这里
然后看右下角的堆栈窗口如下:

0040EB64 004001E8 复件_net.004001E8
0040EB68 004001DC 复件_net.004001DC
0040EB6C 004001DE 复件_net.004001DE
0040EB70 00402F18 复件_net.00402F18 ;这里的00402F18就是OEP值
0040EB74 <&KE> 7C801D77 kernel32.LoadLibraryA ;看到这里啊,上面就是OEP地址了
0040EB78 <&KE> 7C80AC28 kernel32.GetProcAddress

看到LoadLibraryA上面那个就是OEP值,CTRL+G输入OEP回车到了OEP那里,看到还没有解压,F4让它解压,ok!

脱壳之后不要想用ImportREC随便自动修复就完事了,FSG脱完都是要手动查找IAT修复的。快速的方法如下:
接上面到了OEP后就dump一个出来先,不要关闭OD,然后运行ImportREC,输入OEP然后点自动获取IAT,会出现RVA和Size的,这时候不要修复,而是记下出现的RVA值,比如是RVA=000D2284,Size=0000001C。我们回到刚才没有关闭的OD那里在最下面的命令栏那里写上dd rva+基址的值,这里例子是dd 004D2284,回车就可以看到出现一堆东西:

004D2284 77E5AA4F kernel32.TlsSetValue
004D2288 77E5ABF1 kernel32.TlsGetValue
004D228C 77E5A682 kernel32.LocalAlloc
004D2290 77E5AD86 kernel32.GetModuleHandleA
004D2294 7FFFFFFF //应该为00000000
004D2298 77DA2410 ADVAPI32.RegQueryValueExA
004D229C 77DA229A ADVAPI32.RegOpenKeyExA
004D22A0 77DA17D8 ADVAPI32.RegCloseKey

面对这些东西我们拿着鼠标,向上滚轮滚滚,向下滚滚,找到开始和结尾,记录下来,然后相减就是IAT的Size了!这里比如说IAT大小=4d2930- 4d21a4=78c。然后再启动ImportREC,输入OEP,RVA,Size,再点获取输入表,出现了函数,点显示无效函数,剪切(不要点删除)掉无效的,转存,运行,ok!

问题:

我几乎可以搞定很多FSG2.0的壳,但是有一个壳就搞不了。。。一个叫远程任我行的软件,不过是给网上的人脱过壳的。。。查壳就FSG2.0,我到了OEP后发现如下:
00402F18    55                  push ebp                                    
00402F19    8BEC                mov ebp,esp
00402F1B    83C4 F0             add esp,-10
00402F1E    B8 C02E4000         mov eax,复件_net.00402EC0
00402F23    E8 D0EDFFFF         call 复件_net.00401CF8
00402F28    E8 83FDFFFF         call 复件_net.00402CB0
00402F2D    E8 56E6FFFF         call 复件_net.00401588
00402F32    8BC0                mov eax,eax
00402F34    0000                add byte ptr ds:[eax],al
00402F36    0000                add byte ptr ds:[eax],al
00402F38    0000                add byte ptr ds:[eax],al

下面就没有代码了!给人感觉就是黑软免杀用的技术:去头加花。所以我感觉这里不是OEP,然后跟进去发现这里:
00402F28    E8 83FDFFFF         call 复件_net.00402CB0

这里进去是
00402CB0    55                  push ebp
00402CB1    8BEC                mov ebp,esp
00402CB3    83C4 F4             add esp,-0C
00402CB6    53                  push ebx
00402CB7    56                  push esi
00402CB8    33C0                xor eax,eax

这个头符合Delphi的头。不过我找了iat手工修复却运行不了。。。请教各位大侠了。。。

小弟再次有礼。。。

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
 来顶下 
2006-12-14 10:27
0
游客
登录 | 注册 方可回帖
返回
//