从附加数据Overlay说开去-记一次讨论

来源:互联网 发布:缠中说禅炒股软件 编辑:程序博客网 时间:2024/05/16 08:08

今天和两个小伙伴讨论了几个问题,我对问题的回答和讨论作以记录.方便后来者学习.

怎么判断一个程序是否有附加数据呢?

人物:

Kitty,柱子,琦哥

开始

柱子:怎么判断一个程序是否有附加数据呢Kitty?

Kitty:如你所知我们的exe程序在有很多个段,在执行后会被映射到内存中.最后一个段的结束处后面的数据不会被映射到内存中.这一部分叫附加数据-Overlay.

柱子:附加数据听这名字似乎和附加段寄存器有关系吗?我好像在DLL导入的学习中见过有附加段.

Kitty:你是说DLL中的导入表和导出表吗?这和附加数据无关.附加段寄存器是指ES-Extra Segment是一个寄存器,我们在串操作的时候用来保存目的操作数地址.

琦哥:那这个附加数据有什么用途吗?

Kitty:嗯.它常被用来附加一些程序自己需要的数据.因为单文件传递比较方便且更安全.就像人们在打开一个免安装程序的压缩包的时候经常直接双击压缩包的程序,这样常常会因为该程序的其它辅助文件没有被压缩到该程序的目录下而报错.解决方法之一便是将一些辅助文件做成主程序的附加数据.有时候也被用于防破解程序验证.有些程序也可能把音乐电影放在自己的身体里,如果不使用附加数据,想想,10G的电影如果被映射进内存该多么恐怖.

琦哥:一些屏幕录像软件也是这样吗?

Kitty:是的.

琦哥:可是它们通常很小.

Kitty:屏幕录像软件记录的内容大约有两种方法,第一种是差别记录,就是只记录你鼠标或者屏幕变化位置的数据,另一种方法是,隔行扫描,这种方法每次不对全屏幕的内容进行记录,而是隔几个像素行进行记录一次.这些技术常常被用于远控(远程控制软件),这样就不至于每次远程控制都卡得要死.
`(∩_∩)′
2015年6月27日 22点.

添加附加数据的方法

  • 正常思维:找到文件的尾部.添加数据长度和数据本身。我们的程序如何找到数据的起始呢?
  • 极客思维:在PE结构上找废结构,来填充我们的内容。或者直接预留一个DWORD在程序Build的时候。如何定位这个DWORD?
  • 逆向思维:既然从前往后读遇到这么多不定障碍,那么从后往前读。最后的位置放一个数据长度,倒数第二个位置放数据。(大部分Overlay都是这么做的,汗)
    星期五 14:12,2017年1月20日更新。

拓展知识

如果你想了解更多关于附加数据的知识可以看这里:什么是Overlay.

0 0
原创粉丝点击