这文章是写在我的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虚拟机自动化脱壳的方法