逆向脱壳-fsg手动脱壳

2 篇文章 0 订阅

本文以2020湖湘杯第二道逆向为例,原题为无壳的exe文件:exe程序链接:链接:https://pan.baidu.com/s/1PlfSOKKBTF8a7qL8dKwwNQ      提取码:cscj 

首先对文件easyre.exe进行fsg加壳,加壳版本为fsg2.0:工具链接为:链接:https://pan.baidu.com/s/1YKXVfvHXiEnaKgAQUzTlAw       提取码:6zt3 

对加完fsg壳之后的程序进行查壳,显示为:

可以看出有许多地方发生了改变,最重要的就在于程序入口的改变,大家都知道fsg为压缩壳,原理就在于在程序原OEP之前或在程序之后加上一段数据,使得程序调用是通过压缩段数据进行转发的,不影响程序的正常运行。首先将压缩后的程序进行OD载入:

在载入之后一路F8单步步过运行,当遇到如上图所示,向上跳转的情况时,在跳转的下一跳汇编指令,F4执行到目标指令处,继续F8运行,直到:

当运行在如图所示处时,发现,通过第2条jmp指令完成了无条件循环,而在第1条jmp指令处,之前存在jnz指令,实现有条件跳转,这时,就可以判定,第一条jmp指令跳转后的地址就是原程序的OEP,所有,在该处下一个断点,F9执行到这里,之后,F7/F8单步执行就会跳转到正常程序的OEP处,进入发现OD将原程序的汇编代码转换成为了数据进行显示,接下来将数据转换为代码,鼠标右键->分析->分析代码,结果为:

找到正常的OEP后·,使用LordPE工具,工具链接为:链接:https://pan.baidu.com/s/1ZVoMzTPnatTLYl4OVzNK1A      提取码:brtg 

将正在运行的程序DUMP下来,操作为:

首先,纠正镜像文件的大小,接下来完全脱壳,执行dump下的程序,显示为:

出现这样的原因在于,程序dump时,没有将原程序的IAT进行正确一起dump下来,接下来进行IAT修复,使用工具ImportREC,工具地址为:链接:https://pan.baidu.com/s/1spm8-9FTnKN-dwPSxmk9Qg    提取码:29q1 

加载OD运行时弹出的exe进程信息,并进入OD中在原OEP处点击鼠标右键->用OllyDump脱壳调试程序中复制入口点修改地址:

将地址放入ImportREC工具中去,如图所示:

将入口地址放入1处,点击2  IAT自动搜索,点击确定,再点击获取导入表,再点击显示无效的,如果有,则将无效的进行删除,没有则进行点击修正转储到之前dump下来的程序中去。

在这里如果原程序中IAT只有一个DLL,程序就能正常运行,反之,则不能正常运行,原因是,正常情况下,每一个DLL结束时是以00000000结尾,但是在fsg壳中,IAT的DLL以7FFFFFFF结尾,导致ImportREC不能正确的识别出多个DLL,导致不能正确查找出完整的DLL,所以要手动进行修改,进入OD中原OEP出,发现程序call了一些函数,跟踪地址在地址栏处查看:

接着跟踪40F140找到,程序在内存中还原的IAT:

全部改好后用ImportREC再次进行IAT修复,得到出图所示:

现在,运行dump出的exe程序,就能正常运行:

结束!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值