脱壳系列_0_FSG壳_详细版

Posted leibso-cy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脱壳系列_0_FSG壳_详细版相关的知识,希望对你有一定的参考价值。

1 查看信息

  • 使用ExeInfoPe查看此壳程序

技术图片

  • 可以看出是很老的FSG壳。

分析:

Entry Point : 000000154,熟悉PE结构的知道,入口点(代码)揉进PE头去了。

在WIN10 以来在(被限制了)PE 头中不能有执行代码,只有在WIN7 及其以前的机器上,此程序才能执行。所以用虚拟机来脱这个很老的壳,在目前(本人)win10的机器上无法运行。

2 使用LordPE 观察以下PE结构

  • 点击查看区段 信息:

技术图片

  • 分析:

发现区段有两个,都把区段名抹去了;且第一个区段的虚拟大小虽然0x17000 但是实际大小(文件中的大小)是0

3 使用OD调试此程序尝试找OEP

3.1 打开OD定位壳

技术图片

  • 用Nop 破坏花指令使得反汇编正确解析后,添加注释、标签 - "FSG壳"

分析: 我们发现一进来,壳早就准备好了全部寄存器数据在地址0x4219D8的位置,把当前位置保存环境的地址放到当前的ESP寄存器,那就能POP栈操作,操作壳保存好的数据了。为啥我们看不到它之前的操作? 之后写壳的时候再分析

3.2 尝试找 OEP

  • 单步运行
  • 遇到第一个call (字符操作核心部分)

0x000400160:

CALL DWORD PTR DS:[EBX]
;此时EBX是 0x4219dc --- [EBX]:是0x4001e8

进入 0x4001e8:

技术图片

结合 call 的下一句 大致理解这个算法

技术图片

分析:

这个字符串拷贝的算法,(浅淡的观测下)不可逆的拷贝,而且信息不全,所以可能不重要。

我们可以先忽略这个拷贝循环 -----》 跳过这个拷贝算法: 我们在后面的每个 jmp/call 鼠标点过去一下看会不会跳回去之类的,直到找到了。

或者你安装了高亮插件(asmHighLight.dll):由于我们分析出这个拷贝的核心调用函数是 地址为 0x400160 这句opcode,那鼠标点在上面查看后面在哪里没有该高亮色,就大致找一下就能跳过这个算法部分了。

 技术图片

然后我们在壳代码后面部分找到了最后一个高亮。其实这个无条件跳转流这就是我们这个算法部分的最后一句了。

  • 跳出字符串拷贝算法之后,我们发现代码只有10来行了。直接断点关键的跳转行,我们直接找OEP。

技术图片

 

  • 然后我们发现跳转到 OEP的是这一句:

技术图片

4 Dump

  • 进入入口函数后,我们点几个跳转点数据等 并没有发现有异常数据(异常数据)等。直接使用OD提供的插件ollyDump ,dump到本地。

技术图片

 

技术图片

 

分析:

         观察其实地址 、入口点这些 头没有错。如果没有就点击脱壳

5 修复IAT

  • 这里使用impREC 来修复IAT

技术图片

 

我们发现这里查找出来的IAT信息不完全,那就需要观察IAT表是否有异常了。

分析:

          通过这里找到的函数偏移,可以迅速定位到IAT表。

技术图片

 

比如这里的rva为B000。那么再虚拟空间中的地址就是40B000,在OD中观察如下:

技术图片

  • 我们向下滑动,发现:

技术图片

这两个异常值阻止了impREC的解析:我们该为正常的0000000间隔:

技术图片

 

我们修改后再次用impREC解析 得到的IAT表目前来看貌似完成了

  • 最后点击修复转储到我们刚才用OD,dump出来的的程序

技术图片

 

6 检测我们的脱壳之后的程序

技术图片

 

yes!!!

 

---恢复内容结束---

以上是关于脱壳系列_0_FSG壳_详细版的主要内容,如果未能解决你的问题,请参考以下文章

他乡_视频_目录

UPX ... ASPACK怎么脱壳

求助 把一文件脱壳

学习:脱壳之内存执行寻找OEP

手工脱壳之 PESpin加密壳SHE链硬件反调试IAT重定向混淆+花指令

《金蝉脱壳》中哪些“壳”读qiào,哪些“壳”读ké?