作者:Fly2015

对于FSG壳。之前没有接触过是第一次接触。这次拿来脱壳的程序仍然是吾爱破解论坛破解培训的作业3的程序。对于这个壳折腾了一会儿,后来还是被搞定了。

1.查壳

首先对该程序(吾爱破解培训第一课作业三.exe)进行查壳:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

非常遗憾。这次DIE也不行了,只是没事。

2.脱壳

OD加载该加壳的程序进行分析。以下是入口点的汇编代码:

起初对于该种加壳程序也是比較陌生。可是因为OD使用的还算熟悉,以及结合该加壳程序获取函数的API调用地址的特点,非常快发现了该程序的关键点汇编:

于是在地址004001D1处F2下断点,然后F9执行到该地址004001D1处,地址0041DDAC就是被加壳程序真实的OEP的地址。

F7单步跟进到地址0041DDAC处。遗憾的是没有看到我们熟悉的入口点的汇编代码,可是不要急,OD没有将汇编代码正确的显示出来,须要我们自己手动的进行数据的反汇编解析:

选中地址0041DDAC处没有正确显示的数据。然后 右键 如图,选择 分析-->分析代码 就可以正确显示了。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

手动选择分析代码以后。地址0041DDAC处的数据的显示。是不是非常有亲切感啊,令人熟悉的入口点汇编代码出现了。可是不要急。这才是第一步。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

非常自然的下一步就是使用OD的插件OllyDump进行程序的脱壳操作。可是这里对于这样的壳这样直白的脱壳方式并无论用,须要使用Load PE结合RECImport工具进行完美脱壳。由于被FSG加壳的程序的IAT表不是连续的。脱壳工具不能智能的识别那些内存数据是函数的地址。因此须要我们自己手动的识别那些是函数的地址那些不是函数的地址。然后使用工具脱壳。

须要脱壳程序暂停在地址0041DDAC处,使用Load PE工具将其此时的内存PE镜像手动Dump出来(全然脱壳方式),如图。

注意。此时Dump出来的程序还不能执行,须要为该Dump程序正确的修复IAT表,它才干执行起来。

通过上面的调试。了解到程序的真实OEP的RVA地址为001DDAC。使用RECImport工具进行该Dump程序的IAT表的修复。

1.常规的修复IAT表的方式:

在RECImport工具的OEP处手动填写001DDAC,然后点击 IAT 自己主动搜索-->获取导入表-->修正转储。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

IAT表修复后的脱壳程序的执行,如图。

非常显然。刚才的IAT表的修复没有修复成功。假设IAT表修复成功的话,执行脱壳后的程序就不会出现以下这个不友好的界面提示。

2.手动修复IAT表的方式:

遗憾啦,RECImport工具没用使用好。通过OD查看内存数据发现。RECImport工具对Dump后的程序的IAT的修复不全然。

在RECImport工具中,IAT自己主动搜索到的程序的导入表的函数不全然。如图,函数导入表的起始RVA地址是000320BC。函数导入表的结束RVA地址是000320BC+200=000322BC也就导入表函数的个数是0x200,可是经过OD的观察发现,这两个參数有误。

回到OD调试程序中,在HEX数据区,Ctrl+G定位到地址地址处,然后如图,设置数据的显示方式:长整型-->地址 显示方式。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

OD数据视窗-地址显示方式视图:

经过手动拖动查找的方式,发现该被加壳程序的导入表的入口RVA地址应该是 不是地址000320BC处,而且导入表的结束RVA地址是,因此导入表函数的大小应该是32554 - 32000 =  个(十六进制)。

导入表的起始RVA地址:.

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

导入表的结束RVA地址: 。

经过上面的分析和观察以后,例如以下图填写RECImport工具中须要的參数。然后直接点击 获取导入表 千万不要点 IAT自己主动获取 否则前功尽弃。

点击 显示无效的  函数发现,在获取到的导入表中的函数存在无效的函数地址,确实通过OD也发现了函数的地址不是连续的,有些函数之间是0x7FFFFFFF不是有效的函数地址。

因为0x7FFFFFFF不是有效的函数地址,因此须要去掉这些无效的函数地址。右键选择中这些无效的函数地址,然后如图选择 剪切指针 就可以删除这些无效的函数地址。

Ok,如今就能够使用这些剩下的有效的IAT表的导出函数地址进行Dump程序的修正转储了,如图。

执行经过有效的IAT修复的程序的视图。

FSG脱壳分析文档的和脱壳后的程序的下载地址:http://download.csdn.net/detail/qq1084283172/8883891

手动脱FSG壳实战的更多相关文章

  1. 手动脱RLPack壳实战

    作者:Fly2015 吾爱破解论坛培训第一课选修作业练习的第7题. 这个壳没听说过.可是脱起来比較简单.依据ESP定律就可以直达光明,Dump出原来的程序. 老规矩.首先对须要脱壳的程序进行查壳处理. ...

  2. 手动脱WinUpack 壳实战

    作者:Fly2015 吾爱破解培训第一课选修作业第6个练习演示样例程序.不得不反复那句话,没见过这样的壳,该壳是压缩壳的一种,相对于压缩壳,加密壳的难度要大一些.特别是IAT表的修复问题上. 首先分别 ...

  3. <逆向学习第三天>手动脱FSG壳,修复IAT。

    其实对于简单的壳来说,脱壳常用的方法也无非是那几种,但是每种有每种的好处,具体使用那种方法视情况而定,我今天学习的这个壳很简单,但是重点在于修复IAT. 一.查壳: FSG 2.0的壳. 二.脱壳: ...

  4. 手动脱NsPacK壳实战

    作者:Fly2015 这里脱壳的程序是吾爱破解培训的作业2,相较于作业1略微要强一点,可是仅仅要掌握了脱壳的ESP定律,脱这个Nspack壳并不难.只是还是蛮有意思的. 1.使用查壳软件对加壳的程序进 ...

  5. 手动脱UPX 壳实战

    作者:Fly2015 Windows平台的加壳软件还是比較多的,因此有非常多人对于PC软件的脱壳乐此不彼,本人菜鸟一枚,也学习一下PC的脱壳.要对软件进行脱壳.首先第一步就是 查壳.然后才是 脱壳. ...

  6. 手动脱ORiEN壳实战

    作者:Fly2015 ORiEN这种壳之前没有接触,到底是压缩壳还是加密壳也不知道,只能试一试喽.需要脱壳的程序是吾爱破解脱壳练习第7期的题目. 首先对加壳程序进行查壳,这一步也是程序脱壳的必要的一步 ...

  7. 填坑专记-手脱FSG壳

      妈呀,脱FGS壳真的是坎坷颇多,多亏吾爱破解前辈们的帮忙.我一定要记录下来,省的以后再无法解决.   已经查看是FSG壳了.找到入口也容易了.重点就是脱壳并修复好它. 脱壳   OEP为:   使 ...

  8. 手动脱UPX压缩壳

    示例程序演示 样例程序选择win7自带的notepad.exe,该程序原本是没有加壳的: 拷贝notepad.exe文件一个副本,重命名为notepad - upx.exe,我们对notepad - ...

  9. 手动脱Mole Box壳实战总结

    作者:Fly2015 这个程序是吾爱破解脱壳练习第8期的加壳程序,该程序的壳是MoleBox V2.6.5壳,这些都是广告,能够直接无视了.前面的博客手动脱Mole Box V2.6.5壳实战中已经给 ...

随机推荐

  1. jquery批量绑定click事件

    jquery批量绑定click事件: var selects = $(".public_select dd ul li"); debugger; /*$(".public ...

  2. SSRS 报表 递归列表

    SSRS 报表 递归列表 .需要数据集合中两个必备字段 ID PID 1.添加数据集合,在图上标记的地方点击右键添加数据集合,根据需求自己编写 2.点击插入选项卡 中的 矩阵  有两种方式 一种是 矩 ...

  3. 去除input的前后的空格

    这里用的是jquery的方法

  4. [笔记-统计学习方法]感知机模型(perceptron) 原理与实现

    前几天认把感知机这一章读完了,顺带做了点笔记 现在把笔记做第三次的整理 (不得不说博客园的LaTex公式和markdown排版真的不太舒服,该考虑在服务器上建一个博客了) 零.总结 适用于具有线性可分 ...

  5. HDU-6109 数据分割 并查集(维护根节点)

    题目链接:https://cn.vjudge.net/problem/HDU-6109 题意 给出多组等式不等式 对于每一个式子,首先判断是否不可能 如果不可能,记录本组正确式子的个数,然后进入下一组 ...

  6. Generational GC (Part one )

    目录 什么是分代垃圾回收 对象对的年龄 新生代对象和老年对象 Ungar的分带垃圾回收 堆的结构 记录集 写入屏障 对象的结构 分配 新生代GC 幸存空间沾满了怎么办? 老年代GC 优缺点 吞吐量得到 ...

  7. vue-router 实现无效路由(404)的友好提示

    最近在做一个基于vue-router的SPA,想对无效路由(404)页面做下统一处理.这次我真的没有在官方文档找到具体的说明[捂脸]所以本文仅是我DIY的一个思路,求轻虐=_= 在我的理解中,vue- ...

  8. caioj 1112 树形动态规划(TreeDP)7:战略游戏

    这道题和上一道题非常相似 这道题是看边,上一道是看点. 但是状态定义不同 看边的话没有不放不安全这种状态 因为当前结点的父亲无法让这颗子树没有看到的边看到 所以这种状态不存在 而上一道题存在不放不安全 ...

  9. caioj 1067动态规划入门(一维一边推5: 乘积最大(高精度版))

    因为这里涉及到乘号的个数,那么我们可以用f[i][j]表示前i个位乘号为j个时的最大乘积 那么相比上一题就是多了一层枚举多少个乘号的循环,可以得出 f[i][r] = max(f[j - 1][r - ...

  10. Spring EL表达式和资源调用

    Spring EL表达式     Spring EL-Spring表达式语言,支持在xml和注解中使用表达式,类似于在jsp的EL表达式语言.     Spring 开发中经常涉及调用各种资源的情况, ...