FileBuffer转ImageBuffer【滴水逆向三期43笔记】

简介: FileBuffer转ImageBuffer【滴水逆向三期43笔记】

一.FileBufffer与ImageBuffer的区别

我们知道从文件直接读取数据是将文件在硬盘中直接复制过来,计算机是不能直接执行的,如果要让程序执行,必须要有一个“拉伸”的过程,也就是课程中所说的ImageBuffer,但是ImageBuffer是不能直接执行的,但是它已经具备了执行的条件,再执行之前,要将ImageBuffer放入到程序独立的4GB运行空间中,这里给出FileBuffer与ImageBuffer的图:

二.SizeOfRawData一定大于Misc.VirtualSize吗?

我们知道在区块中,VirtualSize存储的是节没有对齐前的实际大小。SizeOfRawData是该节在磁盘文件中对齐后的大小,但是SizeOfRawData一定大于VirtualSize吗?答案是否定的,我们在反汇编中不难发现:在声明了变量后,如果没有进行初始化,那么在内存中是不会有任何操作的,只是告诉了编译器这个变量,那我们不妨设想一下:如果在该节中有许多未初始化的变量,计算机会分配内存吗?当让不会,如果某一个节中存在已经被定义过但还未初始化的数据,那么文件在硬盘上不会显式的留出空间SizeOfRawData中不会算上未初始化数据的空间;但是此节的Misc.VirtualSize为加载到内存中时节的未对齐的大小,那么这个值就需要算上给未初始化留出来空间后的整个节的大小,故在内存中的节本身的总大小可能会大于硬盘中的此节文件对齐后的大小。

三.RVA转FOA

在ImageBuffer中我们已知了一个数据的地址,成为RVA那么我们如何在ImageBuffer中找到该数据的地址(FOA)呢?

这里给出简要思路:

1.计算该数据对ImageBase的偏移大小

2.计算该数据在第几个节(通过循环节表的PointToRaw和SizeOfRawData)

3.计算该数据相对该节的PointToRawData偏移量

4.通过第三步计算出来的偏移量在磁盘文件中找到该数据。

这一节课程没有很多的知识点,但是很重要,主要体现在课后作业中:

1.写一个程序,实现从FileBuffer到ImageBuffer再从ImageBuffer到FileBuffer

2.写一个程序,实现从RVA转化为FOA

在本专栏中下一章我会将写出的程序源码分享给大家

文章中可能有许多不准确或者是我理解不到位的地方,非常希望大家指出,我会虚心学习,希望我们共同进步!

相关文章
|
架构师 Java
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
266 0
|
安全 Linux 网络安全
2022-渗透测试-git提权(Linux)
2022-渗透测试-git提权(Linux)
2022-渗透测试-git提权(Linux)
|
10月前
|
机器学习/深度学习 人工智能 PyTorch
DeepSeek开源周第四弹之一!DualPipe:训练V3/R1的双向流水线并行技术,计算与训练完全重叠,训练效率提升200%
DeepSeek 开源的 DualPipe 技术通过双向流水线并行设计,显著提升大规模深度学习模型的训练效率,优化计算与通信重叠,降低内存峰值需求,适用于推理加速、多模态数据处理等场景。
710 1
DeepSeek开源周第四弹之一!DualPipe:训练V3/R1的双向流水线并行技术,计算与训练完全重叠,训练效率提升200%
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
670 5
Mybatis-plus-generator代码自动生成工具
Mybatis-plus-generator代码自动生成工具
268 0
|
安全 小程序 Java
Java“AccessControlException”报错解决
Java中的“AccessControlException”通常发生在尝试访问受安全策略限制的资源时。解决方法包括:1. 检查安全策略文件(java.policy)配置;2. 确保代码具有足够的权限;3. 调整JVM启动参数以放宽安全限制。
873 1
|
数据采集 人工智能 运维
智能运维:AI在IT基础设施管理中的应用与挑战
随着人工智能技术的飞速发展,其在IT基础设施管理领域的应用日益广泛。本文将探讨AI技术在智能运维中的作用,分析其带来的优势与面临的挑战,并展望未来的发展趋势。
|
弹性计算 Linux Apache
部署并使用Docker(CentOS 8)
本场景带您体验如何在Centos 8.5 64位操作系统的云服务器上部署并使用Docker。
|
Java Maven Spring
4. 成功解决:Spring Boot Configuration Annotation Processor not configured
在 Spring Boot 项目中,添加一个配置文件时,会提示“Spring Boot Configuration Annotation Processor not configured”
4185 1