1.前言
最近,在论坛上看到很多人在弄附加数据overlay的问题,加上上次答应了各位兄弟所以觉得写一些着方面的废话。如果下面的内容对你有帮助那是最好。
这篇文章我们将解决以下问题:
1.什么是overlay,怎么找到overlay?
2.为什么有些壳虽然有overlay但是却不用特别处理?
3.为什么有些壳只用粘贴overlay数据就ok了,而有些壳却要定位指针?
4.如何修复文件指针?
--------------------------------------------------
2.正文
一.什么是附加数据(overlay)
1.实际当中的overlay
其实,overlay虽然大家在脱壳当中觉得很陌生,但是他离我们并不遥远。在我们平时使用的软件当中,有一些软件要处理一些数据流文件,比如 winamp。当我们下载了mp3文件(数据文件),没有播放器是不可能播放的,与此相关的还有很多,比如txt文件和notepad的关系也差不多。而这些数据文件被单独的保存在硬盘上,当我们使用notepad的打开功能的时候,就可以去读取数据文件里面的东西了。
overlay又是什么意思呢?他其实真正的意思就是取消打开功能,将这些需要读取的数据放到pe文件的后面,让程序自动的运行打开的功能。这样的功能就变成了一个notepad的程序对应只能打开一个文件。
最典型的就是一些软件可以把一些数据流文件生成exe文件,比如一些mp3生成器,flash生成器,以及我们用来做动画的S-demo。他们的作用就是将数据对pe进行捆绑。(这样做的结果也就是为什么我们对这些文件用UPX等pe压缩工具却不能压缩他的原因,这是后话了)
2.技术上的overlay
在我们对pe文件的overlay进行分析之前,我们要普及一下文件映射的知识。
在pe里面,有所谓的文件偏移RA,文件偏移大小RS和与其对应的虚拟地址偏移VA,虚拟地址偏移大小VS。
我们要深刻的理解以上的概念不是我这篇文章能说清楚的,但又是搞overlay必须得弄清楚的,于是我简单的说明一下。
在我们的磁盘上的pe文件里面,排列着的数据在运行的时候将被影射到内存空间。他们将被怎么影射呢?举个例子:
例1:
一个pe文件中只有两个区段(pe head不算)
第一个区段是.text VA=401000 VS=1000 RA=200 RS=100
第二个区段是.data VA=402000 VS=1000 RA=300 RS=100
假设我们打开winhex看到在文件偏移300处的情况是这样的:
RA=2FF 处的数据是12 RA=300处的数据是34
好了,现在当pe文件装到内存中,那么会出现什么结果呢。
1.文件偏移中的200开始的100个字节将被影射到内存的401000开始的100个字节,后面的F000个字节将用0填充。
2.文件偏移中的300开始的100个字节将被影射到内存的402000开始的100个字节,后面的F000个字节将用0填充。
也就是说,在磁盘是上相邻的两个数据12和34,在内存空间中将分开得老远,12在40102FF处,而34却在402000处。
当然这只是我自己随便举的一个极端的例子,实际上由于文件的对齐机制在磁盘上每个段的结束都是填充了大量的0
为什么要讲这些呢?
[1] [2] [3] [4] 下一页