一、介绍:

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

我们要深刻的理解以上的概念不是我这篇文章能说清楚的,但又是搞overlay必须得弄清楚的,于是我简单的说明一下。
在我们的磁盘上的pe文件里面,排列着的数据在运行的时候将被影射到内存空间。他们将被怎么映射呢?举个例子:

例1:

一个pe文件中只有两个区段(pe head不算)
第一个区段是.text VA=401000 VS=1000RA=200 RS=100
第二个区段是.data VA=402000 VS=1000RA=300 RS=100
假设我们打开winhex看到在文件偏移300处的情况是这样的:
RA=2FF 处的数据是12RA=300处的数据是34

现在当pe文件装到内存中,那么会出现什么结果呢。
1.文件偏移中的200开始的100个字节将被影射到内存的401000开始的100个字节,后面的F000个字节将用0填充。
2.文件偏移中的300开始的100个字节将被影射到内存的402000开始的100个字节,后面的F000个字节将用0填充。

也就是说,在磁盘是上相邻的两个数据12和34,在内存空间中将分开得老远,12在40102FF处,而34却在402000处。

当然这只是我自己随便举的一个极端的例子,实际上由于文件的对齐机制在磁盘上每个段的结束都是填充了大量的0

为什么要讲这些

因为区段是一般将会被映射到内存的,如果上面的例子中。将.data区段去掉。那么在磁盘上就将会留下从RA=300到RA=400其大小为100的数据,不会被影射到内存中。而这部分数据就将被认为是附加数据-overlay。
 

二、实战

【加壳方式】: UPX Inliner v1.0 by GPcH
【使用工具】: OllyDbg
              PEID
              Lord PE
              WinHex
              Imp Rec
              Hex Wrokshop v6.5.1
【声明】: 主要展现脱壳后附加数据的快速解决,没有其他目的。  
①、PEID看一下壳
②、DetectItEasy V1.0看一下什么编译器
然鹅,PE区段被改了,并看不出来
既然是UPX的壳,按照之前的文章步骤,脱壳吧
1、载入OD
2、
很明显是UPX的壳,ESP定律走起~~(单步跟踪、模拟跟踪都可以的)
 

3、F8单步往下走,F9运行程序,F8单步走,走,
4、
来到这,熟悉吧,右键分析-从模块中删除分析
 

5、
来到了熟悉的OEP,对照oep看一下是什么语言
 

6、

   Vc++ 6.0的编译器
 
7、到达oep之后,下一步来脱壳
8、

复制oep,3831,再用Lordpe脱壳
 
9、
修正镜像大小,在转存一下。
 
10、
再用  修复,不管能不能运行都得修复一下
 
11、修复完成后看一下壳子,打开程序运行一下
 
12、显示是vc++6.0,说明程序已经脱壳完成了
13、运行一下
14、OH!Shit!!
15、不出所料,因为刚开始就出现了这个东西
敲黑板!!!!
1、overlay只是数据它是不映射到内存的,它将被程序以打开自己的方式来读取数据
2、只要不是区段里面包括的文件的大小,将被视为overlay.
 
那怎么办呢,重点来了。。。。。。。。。。。。。
1、神器winhex
2、  这个东西
3、将未脱壳的程序放进去
4、
 

5、首先,把滑轮拖到最底部,依次往上找,找到第一处很多00的地方
6、
 

7、选择00结束第一个字符(alt+1)到末尾最后一个字符(alt+2)
8、
 

9、复制下来,关闭,拖入脱壳完成的文件
10、一直拉到最后,也是00很多的地方
11、
 

12、在末尾粘贴未脱壳程序的那段
13、
 

14、保存文件到脱壳后修复的文件
15、
 

16、有的在win7/xp情况下保存完成后可能会出错,版本不同
17、这是推荐使用Hex workshop ,使用方法与winhex一样,在吾爱破解工具包里都有
18、  运行试一下,无错误提示即可
使用lordpe,用PE编辑器打开加壳程序
依次打开区段,看到区段表
 
☆【重要属性介绍】
(1)Name : 这是一个8位的ASCII(不是Unicode内码),用来定义块名,多数块名以.开始(如.Text),这个.实际上不是必需的,注意如果块名超过了8个字节,则没有最后面的终止标志NULL字节,带有$的区块的名字会从编译器里将带有$的相同名字的区块被按字母顺序合并。
(2) VirtualSize: 指出实际的,被使用的区块大小,是区块在没有对齐处理前的实际大小.如果VirtualSize > SizeOfRawData,那么SizeOfRawData是可执行文件初始化数据的大小
(SizeOfRawData – VirtualSize)的字节用0来填充.这个字段在OBJ文件中被设为0.
(3)VirtualAddress: 该块时装载到内存中的RVA,注意这个地址是按内存页对齐的,她总是SectionAlignment的整数倍,在工具中第一个块默认RVA为1000,在OBJ中为0。
(4)SizeofRawData: 该块在磁盘中所占的大小,在可执行文件中,该字段包括经过FileAlignment调整后块的长度。例如FileAlignment的大小为200h, 如果VirtualSize中的块长度为19Ah个字节,这一块保存的长度为200h个字节.
(5) PointerToRawData: 该块是在磁盘文件中的偏移,程序编译或汇编后生成原始数据,这个字段用于给出原始数据块在文件的偏移,如果程序自装载PE或COFF文件(而不是由OS装载),这种情况,必须完全使用线性映像方法装入文件,需要在该块处找到块的数据。
虽然编译器自动产生一系列标准的区块,我们可以创建和命名自己的区块,在VC++中可以使用:
#pragma data_seg(“My_DATA”)
编译器有个很搞笑的特征,看见两个区块相似的属性的区块,那么连接时就合并成一个区块,这个取决于是否用/merge开关 /merge .rdata = .text
我们只需要ROffset和Rsize,计算一下这两个块的大小
400+C600=CA00      (16进制下)
我们把未脱壳的程序放入HexWorkshop,CTRL+G转到CA00处
l   C9 F6加上 10个字节
l   CA 04减去 4个字节
所到达的地方都是CA 00
就来到我们之前往上找到00末尾的位置
从A5开始,一直到最后复制下来
打开脱壳之后修复的文件,拖入HEXWORKSHOP
在最后末尾处,粘贴刚刚复制的代码
最后,保存一下,备份点一下,打开程序看一下能否正常运行。OK,数据处理完毕
最后看一下壳子
壳子已经脱掉,显示附加数据不用管,之后载入od,看一下oep
具体原理研究可以去寻找Lenus大神的《浅谈脱壳中的附加数据问题(overlay)》和《PE文件中区段的详细分析 》这两篇文章
 
总结:
1.简单介绍什么是附加数据
2.overlay又是什么意思
3.文件映射知识
4.回顾ESP定律
5.Winhex、HEXWORKSHOP使用方法
6.两种方法附加数据的处理
7.区段表小姿势
附件我打包了:点击查看

转载于:https://www.cnblogs.com/ichunqiu/p/7262952.html

逆向脱壳附加数据处理相关推荐

  1. 逆向脱壳破解分析基础学习笔记七 堆栈图(重点)

    本文为本人 大神论坛 逆向破解脱壳学习笔记之一,为本人对以往所学的回顾和总结,可能会有谬误之处,欢迎大家指出. 陆续将不断有笔记放出,希望能对想要入门的萌新有所帮助,一起进步 堆栈图 首先给定一段反汇 ...

  2. 小七新Android逆向,小七Android逆向脱壳课程

    [视频目录] [小七新Android逆向脱壳课程]脱壳1.Java环境配置与各种逆向工具安装配置介绍 [小七新Android逆向脱壳课程]脱壳2.Android手机端配置及必要软件安装 [小七新And ...

  3. 360加固逆向脱壳之过反调试

    写在最前,本来是想把360加固全部脱壳后,写一篇教程.不过在我过了360加固调试后,最后卡在了native void onCreate函数的提取.最后就无结果了.但又发现许多人卡在了360加固的反调试 ...

  4. 安卓逆向脱壳:Frida-DEXDump一吻杀一个人,三秒脱一个壳

    本期用到 :python+frida+模拟器+Frida-DEXDump 如果没布置Frida环境可以跳转此文: Hook神器: frida超详细安装教程 一.前言 APP 加固发展到现在已经好几代了 ...

  5. 【安卓逆向】360加固-脱壳修复

    最近花了一些时间学习逆向脱壳,这方面一直投入的时间比较少.样本经过某加固宝进行加固,这里简单记录一下脱壳过程和思路,感谢某数字公司对安全加固的无私贡献,让我有机会小小的提高一下这方面的技能. *安卓逆 ...

  6. python 工程结构加固_【安卓逆向】360加固-脱壳修复

    360加固-脱壳修复 最近花了一些时间学习逆向脱壳,这方面一直投入的时间比较少.样本经过某加固宝进行加固,这里简单记录一下脱壳过程和思路,感谢某数字公司对安全加固的无私贡献,让我有机会小小的提高一下这 ...

  7. 2020-10-26(安卓逆向开篇)

    学习逆向的初衷是想系统学习Android下的hook技术和工具, 想系统学习Android的hook技术和工具是因为Android移动性能实战这本书. 这本书里用hook技术hook一些关键函数来计算 ...

  8. Android软件脱壳分析,使用FRIDA为Android应用进行脱壳的操作指南

    FortiGuard实验室最近遇到了很多加壳 Android 恶意软件.这类恶意软件一个很有趣的点是,尽管使用的加壳 工具 是一样的,但生成的恶意软件却常常会发生变化. 分析加壳工具通常令人望而生畏. ...

  9. android动态脱壳教程,使用 FRIDA 为 Android 应用进行脱壳的操作指南

    FortiGuard 实验室最近遇到了很多加壳 Android 恶意软件.这类恶意软件一个很有趣的点是,尽管使用的加壳工具是一样的,但生成的恶意软件却常常会发生变化. 分析加壳工具通常令人望而生畏.因 ...

  10. Android逆向之drizzleDumper脱掉“360加固”的壳

    转载自:http://www.520monkey.com/archives/1062 此处仅作为学习记录一用.至于评论问答环节,请去上面地址翻阅四哥的原文.上面已附上地址. 一.情景分析 程序猿一般都 ...

最新文章

  1. CentOS7.X更新gcc到5.3.0
  2. Android三个Version的作用
  3. 分组背包基础--1712 ACboy needs your help
  4. 诗词歌赋,样样精通!诗词古语小程序带你领略魅力古风丨实战
  5. 软件开发的“三重门”
  6. zabbix3.0.4监控mysql主从同步
  7. 解决Windows下运行出现ModuleNotFoundError: No module named xxx问题
  8. 【机器学习】监督学习--(分类)逻辑回归
  9. 个股打板机会:国民技术(实战)
  10. 【Android自学日记】【转】Android Fragment 真正的完全解析(上)
  11. 基于sklearn分析特征工程(特征预处理、特征选择、降维)
  12. IETester更新至最新版已经兼容Windows7(附下载地址及Debugbar插件)
  13. 离散数学之集合笔记一
  14. Rancher+k3s+阿里云流水线详细配置教程
  15. Java读文件和写文件
  16. 安装mysql最后一步未响应(解决方法)
  17. FFmpeg系列-视频解码后保存帧图片为ppm
  18. hash:哈希表 哈希桶
  19. Google应用商店如何发布app
  20. 去年日本国内汽车销售榜单公布

热门文章

  1. mysql 联合查询_MySQL联合查询
  2. windows系统搭建图像识别开发环境
  3. 推荐一款好用的加密软件 filepackage 文件加密 U盘加密 移动硬盘加密
  4. matlab导出prn文件怎么打开,prn文件介绍及打印方法
  5. 【会议记录】软件工程课程设计第一次会议
  6. 推荐5款实用的PC端软件!!!
  7. 手把手教你安装华为网络模拟器及设备注册
  8. 埃及金字塔之谜最完美的解释
  9. python:base64与图片的互转
  10. windwos 10打印机服务老是自动关闭