好友
阅读权限25
听众
最后登录1970-1-1
|
本帖最后由 usualwyy 于 2018-2-6 14:40 编辑
这是我人生中脱的第一个壳,难度大大小于我的预期,是不是因为是测试程序是console程序的原因?有知道的同学麻烦跟我说一下
壳版本:2.4.6 WL正版壳,应该是WL/ThemIDA系列的最新版吧,除了反虚拟机、硬件锁、试用锁,其他一律全勾上
脱壳方法:
1.code段下hw断点,第一次断下是在校验,第三次断下开始解密VM段,解密的代码被填充到code段
2.只要push ebp一恢复,立马在push ebp下断,因为如果等整个OEP全部解密完,EIP也基本跑完了,程序就不会在OEP停下来。
3.让程序使劲儿跑,断点都不下,反正已经知道OEP位置,只要OEP完全解密就能dump了
4.dump,修复IAT,经过测试部分API被混淆加密,没法正常还原,不过没关系,dump出来的程序和原始程序一起跑,跑dump程序用F8跑,看看在哪儿崩的,找到错误的api调用,然后到原始程序中对着找,两边API调用的代码在内存地址一样,在原始程序中,被加密的API调用增加了大概20行左右的加密代码,不用管他,跟进去,最终会jmp进调用的API内部,这样我们就知道被调用的APi名了,参数什么不用管,进入加密call之前参数都push进来了,然后手动编辑dump的PE结构,增加一个新区段(因为要加导入函数,不加新区段之前的idata区段放不下),加完新区段,把之前的IAT在新区段重建,增加上刚才缺的api,这个时候跑起来就没问题了。
实在抱歉,这几天发现以上方法不通用,为了避免误人子弟,特此说明一下,这个方法只适合console编译的VC++程序。
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|