首页 > 逆向调试 > 接触脱壳中的Overlay

接触脱壳中的Overlay

初次接触逆向,在学习的过程中遇到很多问题。前几天学习了ESP定律脱壳,感觉很不错,所以每次看到有popad的壳,就想用ESP定律去脱。这次遇到一个,PEID查壳,发现壳后面有个Overlay,Overlay是什么呢?本人不是很清楚。

其实,overlay虽然大家在脱壳当中觉得很陌生,但是他离我们并不遥远。在我们平时使用的软件当中,有一些软件要处理一些数据流文件,比如winamp。当我们下载了mp3文件(数据文件),没有播放器是不可能播放的,与此相关的还有很多,比如txt文件和notepad的关系也差不多。而这些数据文件被单独的保存在硬盘上,当我们使用notepad的打开功能的时候,就可以去读取数据文件里面的东西了。
overlay又是什么意思呢?他其实真正的意思就是取消打开功能,将这些需要读取的数据放到pe文件的后面,让程序自动的运行打开的功能。这样的功能就变成了一个notepad的程序对应只能打开一个文件。
最典型的就是一些软件可以把一些数据流文件生成exe文件,比如一些mp3生成器,flash生成器,以及我们用来做动画的S-demo。他们的作用就是将数据对pe进行捆绑。(这样做的结果也就是为什么我们对这些文件用UPX等pe压缩工具却不能压缩他的原因,这是后话了)

数据错误提示上面这段文字转自看雪论坛的某帖,鉴于没有人回帖,帖子链接就不给出来了,因为不保证文字的正确性。下面简单谈谈对Overlay的处理。
接下来实战。首先,用Ollydbg加载加壳的程序,用ESP定律把壳脱了,PEID查一下脱壳后的程序,提示“Microsoft Visual C++ 6.0 [Overlay]”,Overlay还在里面,运行程序,提示数据错误。接下来,可以用PEID或者LordPE看一下原始加壳文件的区段信息。相应的信息如下:

------------------------------------------------------------------------------------------------
节区名称	节区大小	虚拟地址	Raw_尺寸	Raw_偏移	节区属性
------------------------------------------------------------------------------------------------
nsp0    	00036000	00001000	00000000	00000400	E0000040
nsp1    	00027A28	00037000	00028000	00000400	D0000040
nsp2    	00001000	0005F000	00000000	00028400	E0000060
nsp3    	00021000	00060000	00020200	00028400	E0000060
nsp4    	00000162	00081000	00000000	00028400	E0000060

最后一个节为nsp4,在文件中的偏移地址为00028400,我们接下来用C32Asm或者WinHex把PE文件中00028400到文件末尾的数据复制,然后粘贴到脱壳后文件的末尾,于是脱壳后的文件就可以正常运行了。

看雪相关帖子:http://bbs.pediy.com/showthread.php?t=58700


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> 接触脱壳中的Overlay
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: 逆向调试 标签: , , ,
  1. 2011年3月19日20:13 | #1

    逆向工程3年前差点就学了,现在一窍不通哦,。博主你页面广告有点影响了哦

    [回复]

  2. 2011年3月19日20:49 | #2

    @西风
    谢谢提醒,顺便问一下,你觉得哪块广告最影响你对本博客的印象?谢谢了

    [回复]

  3. 2011年3月20日13:27 | #3

    完全不懂啊…

    [回复]

  4. 2011年3月20日22:35 | #4

    @leetom
    每个人都有不同的研究嘛

    [回复]

  5. 2011年11月13日23:38 | #5

    新手求助,“可以用PEID或者LordPE看一下原始加壳文件的区段信息”能不能讲讲怎么查看,谢谢了

    [回复]

    代码疯子 回复:

    @易, 就是你用PEID或者LORDPE看一下原来没有脱壳的文件的区段信息,得到最后一个区段的Raw_偏移,上面就是nsp4区段,他的RAW_偏移就是0×00028400。Raw_偏移+Raw_尺寸会的到一个新地址。上面因为Raw_尺寸是0,所以就是0×00028400。
    然后你用C32Asm打开没有脱壳的文件,把0×00028400(Raw_偏移+Raw_尺寸)到文件末尾的数据复制出来粘贴到脱壳后的文件的末尾。

    [回复]