Windows PE 第十二章 PE变形技术
PE变形技术
这章东西太多,太细了。这里我只记录了一些重点概念。为后面学习做铺垫。
PE变形:改变PE结构之后,PE加载器依然可以成功加载运行我们的程序。
一 变形常用技术:
结构重叠技术、空间调整技术、数据转移技术、数据压缩技术。
下面是相关概念只是(我只整理重点)
1.结构重叠技术:
结构重叠技术是指在不影响正常性能的前提下,将某些数据结构进行重叠的技术。在缩小PE的变形中将大量使用这种技术。
重叠能成功通常是以为以下三点:
(1)被覆盖的数据可能是另一个结构中的无用数据。
(2)有用的数据可能只对一个结构起作用,但是被覆盖的数据在两个结构中都用,此种情况下发生的重叠必须保证重叠的字段在两个结构中拥有相同值。
(3)PE加载器并不检测所有的字段。
找了一个helloword随便把头前面改了下。
2.空间调整:
通过改变一些数据块的大小来个自己扩充空间,然后往里面加代码或者数据,但是这种要注意,被扩充的节后面所有的数据要相应修改相对偏移位置,这个比较麻烦。
3.数据转移技术:
在编写过程中,处于某种考虑,经常会将PE中的一部分数据转移到另一个位置。比如,将程序中的变量存储到文件头部结构的某个字段中,将代码转移到头部结构的某个连续空间中等,这就是数据转移技术。
(1)写一个hello输出HelloPE.
(2)找到数据段的这个字符串改为HelloXX,运行发现是显示HelloXX.
(3)然后OD加载起来这个程序,断点到MessageBox的地方,把push地址的那个HelloXX地址改为0x1020020相当于文件头0x20.
(4)然后直接二进制操作,把文件0x20的地方随便写一个传,模拟数据被转移到了这里。然后双击exe显示的是0x20处的这个串。具体细节操作如下图。
4.数据压缩技术:
在编程过程中,如果指令代码比较长,海尔可以先对代码实施压缩,然后在PE头部找一块比较大的连续区域存放加压缩用的代码。程序被PE加载器加载后,文件头就基本不再使用了。这时,可以将存储的压缩代码通过PE头部的解压缩程序进行解压,解压后即可通过跳转指令实施程序指令的转移。
由于压缩后的代码不便于通过十六进制直接地看到,所以这种方法在一些病毒程序代码中比较常见;另外,在一些加壳程序中会经常看到数据压缩技术。
书上分析了一个病毒,用了简单的行程压缩算法,
这个很好理解:0000010000压缩后是05104
二 变形技术可用的空间:
要想对PE进行变形,需要掌握PE文件中每个位置数据的可替换特性,即该位置数据是否可以被替换成别的值,某段数据是否可以被其他用途利用等。总体上讲,PE中可以作用变形的空间有以下三类。
(1)文件头部未用的字段(用前一定要仔细测试)
(2)大小不固定的数据块:
(3)因对齐产生的补足空间:
这个也是大小不固定的,要具具体PE具体分析。
三 变形技术原则:
(1)关于数据目录表:
数据目录表的个数必须大于等于2.如果PE文件的最后一个字节位于目录表之间,如介于第3项资源表定义之间,则文件中无法定义资源的大小,PE加载器默认资源表的大小为0.
(2)关于节表:
PE文件头中可以没有节表的定义,但必须将文件头部的字段IMAGE_FILE_HEADER.NumberOfSections设置为1.
(3)关于导入表:
导入表是PE的核心。要想在已有的PE中静态引入动态链接库的函数,就必须通过变形技术构造一个合理的导入表,或者重构已有的导入表。
(4)关于程序数据:
数据可以存储在内存中的任何位置,可以位于文件头,可以可以位于其他节中。
代码和数据一样,可以在内存的任何位置,所在的节,其属性必须可读、可写、可执行。将代码段设置为可写属性主要考虑到某些程序会将一些变量存储在代码段,且在程序中尤为该变量赋值的代码。
如果所有的数据(程序变量、导入表、IAT等)都在文件头部,也就是说加载进内存的PE文件只有头文件存在,假设大小为一个页面1000h,那么操作系统会因为IAT的缘故自动将该页面设置位ERW,即可读、可写、可执行(之前文件头默认是只读的)。
(5)关于对齐:
节的对齐尺寸必须大于等于文件的对齐尺寸。由于文件的对齐尺寸被定义为2的N次幂,所以通常会将文件对齐尺寸设置得更小,并使两个值相等,已达到缩小PE文件的目的。
(6)几个关注的字字段:
Windows PE 第十二章 PE变形技术相关推荐
- 信安软考 第十二章 网络安全审计技术
一.网络安全审计概述 网络安全审计是指对网络信息系统的安全相关活动信息进行获取.记录.存储.分析和利用的工作.网络安全审计的作用在于建立"事后"安全保障措施,保存网络安全事件及行为 ...
- 【数据库原理及应用】经典题库附答案(14章全)——第十二章:数据库技术新发展
[数据库原理及应用]经典题库附答案(14章全)--第一章:数据库基础知识 [数据库原理及应用]经典题库附答案(14章全)--第二章:关系数据库知识 [数据库原理及应用]经典题库附答案(14章全)--第 ...
- 鸟哥的Linux私房菜(服务器)- 第十二章、网络参数控管者: DHCP 服务器
第十二章.网络参数控管者: DHCP 服务器 最近更新日期:2011/07/27 想象两种情况:(1)如果你在工作单位使用的是笔记本电脑,而且常常要带着你的笔记本电脑到处跑, 那么由第四章.连上 In ...
- 《深入理解 Spring Cloud 与微服务构建》第十二章 服务注册和发现 Consul
<深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发现 Consul 文章目录 <深入理解 Spring Cloud 与微服务构建>第十二章 服务注册和发 ...
- 第十二章: 部署Django
2019独角兽企业重金招聘Python工程师标准>>> 第十二章: 部署Django 本章包含创建一个django程序最必不可少的步骤 在服务器上部署它 如果你一直跟着我们的例子做, ...
- Linux云计算【第一阶段】第十二章:网络管理、进制及SSH管理与攻防
第十二章:网络管理及SSH管理与攻防 [重难点] 一.网络发展概述 局域网 城域网 广域网 基本网络协议 客户端与服务器的概念 从客户端到服务器的经过 No.1 客户端与服务器的概念 客户端: 即表示 ...
- python 宝典 笔记 第十二章 存储数据和对象 (各种对象转换成字符串)
第十二章 存储数据和对象 12.1数据存储概述 12.1.1文本与二进制对比 文本格式易于阅读和调试,跨平台性能好.二进制格式占用空间小,适于按记录存取. 12.1.2压缩 假如对象的大小开始成为问题 ...
- MLAPP————第十二章 隐线性模型
第十二章 隐线性模型 12.1 要素分析(factor analysis) 在我们之前提到的混合模型中,数据的生成都是由某个隐状态控制的,然后是那个隐状态控制的分布生成的,但是这样的模型在表示上还是具 ...
- 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第十二章官方SDK移植试验
1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 第十二章官方SDK移植试验 在上一章中, ...
最新文章
- Nat.Commun. | DeepAccNet:基于深度学习的准确性估计改善蛋白质结构优化
- SAP HUM 嵌套HU初探 III
- Java锁机制学习笔记——synchronized 和 Lock
- python百度网盘下载-python实现简单的百度云自动下载
- golang中的pprof支持
- 设置log缓存_带你搞明白什么是缓存穿透、缓存击穿、缓存雪崩
- Cpp / __builtin_expect 说明
- 从TimeSpan说起
- pandas分组计算平均值_python – 如何计算在Pandas中另一列上分组的平均值
- mybatis sql xml 字符逃脱
- python oop 继承_关于oop:使类数据在python中可继承的正确方法是什么?
- new方法、定制属性、描述符、装饰器
- 181010词霸扇贝有道每日一句
- 移动硬盘计算机无法打开硬盘,win10系统电脑无法打开移动硬盘的详细步骤
- Linux下安装maven3.6.2遇到的问题
- android 内存uss rss,内存VSS/RSS/PSS/USS名词解释
- 极客日报:苹果或推出粉色款iPhone 13;拼多多再超阿里
- 数据通信与计算机网络A笔记
- snprintf函数的用法详解
- 基于逃逸鸟搜索算法的函数寻优算法