逆向破解——处理附加数据

逆向破解——处理附加数据

附加数据[overlay]

  • 实际应用:软件要处理一些数据流文件,这些数据文件被单独的保存在硬盘上,当我们使用notepad的打开功能的时候,就可以去读取数据文件了。如果将这些需要读取的数据放到pe文件的后面,让程序自动的运行打开的功能,而不需要打开操作。
  • 一般情况下,代码运行时,会根据文件偏移RA,文件偏移大小RS和与其对应的虚拟地址偏移VA,虚拟地址偏移大小VS的值,把磁盘的代码、数据、资源等加载到内存中。
  • 如果数据不在PE的区段中,代码执行时就不会从磁盘被映射到内存,就是说如果在文件中存在不在区段里面的数据,这部分数据就被认为是附加数据(overlay).
  • overlay是不映射到内存的,他将被程序以打开自己的方式来读取数据

    处理附加数据

  • 附加数据是在附加在文件后面的,不被映射到内存空间中的数据,他提供他自己的程序打开自己来读取,所以dump下来的时候是没有overlay的,需要我们手动把这一部分的数据粘贴到dump下来的数据后面。
  • 一般来说在区段里面我们能找到所有区段的大小,这个大小的后面就是overlay的开始,就是说,overlay的开始地方就是最后一个区段的RA+RS

    工具与环境

  • 环境:WIN XP虚拟机
  • 工具:PEiD查壳、OD调试、WinHEX 16进制编辑器

    实验步骤

  • 查壳
    逆向破解——处理附加数据_第1张图片

  • 开头是pushfd和pushad入栈,后面的出栈命令肯定是popad和popfd
    逆向破解——处理附加数据_第2张图片

  • 在出栈命令处下断点,再单步,运行到OPE
    逆向破解——处理附加数据_第3张图片

  • 脱壳后查壳,显示无壳,但是附加数据的标志[overlay]也没有了,因为用OD载入时,附加数据没有映射到内存,所以domp程序时,附加数据没有被复制。
    逆向破解——处理附加数据_第4张图片

  • 尝试运行,运行失败,打不开。
  • 尝试修复,自动修复IAT
    逆向破解——处理附加数据_第5张图片

  • 运行,还是不行,滴的一声,无法运行。
  • 查壳中有[Overlay],表示有附加字段。

  • 我们用两种方法来处理附加数据

方法一

  • 用WinHex打开还未脱壳的程序,拉到底,从最下方开始向上查找第一段全零数据。
    逆向破解——处理附加数据_第6张图片

  • 原理:由于文件的对齐机制,磁盘上每个段的结束都填充了大量的0.附加数据在文件末尾,所以只要找到磁盘文件中最后一个全零段,接下来就是附加数据。
  • 把附加数据复制粘贴到脱壳以后的文件中,运行成功。
    逆向破解——处理附加数据_第7张图片

  • 再次查壳,显示有附加数据。
    逆向破解——处理附加数据_第8张图片

方法二

  • 在loadPE中打开未脱壳的程序
  • 打开PE编辑器,打开程序区段表
    逆向破解——处理附加数据_第9张图片

  • 找区段表里的最后一个区段
  • 找到文件偏移RA和文件偏移大小RS
  • [RA+RS]=0X4000+X8800=0X8C00
  • 用WinHex打开,转到偏移量8C00
    逆向破解——处理附加数据_第10张图片

  • 从8C00开始,就是附加数据,把附加数据复制到脱壳后的程序末尾即可。

逆向破解——处理附加数据_第11张图片

你可能感兴趣的:(逆向破解——处理附加数据)