4.25~~~~~

news2024/9/21 5:49:47

接着之前PE文件结构的预习

DOS 定位到NT 怎么操作的?

用的是e_lfanew,然后是相对于文件头的偏移量(也就是raw表示方法)

现在有个问题,为什么e_lfanew 这个变量不直接存储PE头 的绝对地址呢?

比如说,某样本,PE头偏移 是0x100,而且编译器在组合PE文件的时候也是可以知道PE头的绝对偏移的

换个问法,基址 + 偏移的方式的好处是什么?

基址 + 偏移的方式,最直接的好处就是不用管基址前面是什么东西
这种基址 + 偏移的方式,在Shellcode 的代码定位,包括汇编Opcode 中会大量的应用
在学习的汇编语言中,理解过段地址+偏移地址得到物理地址,这里的基址就是所谓的段地址吗,如果是的话,在8086CPU(16位架构中)只是因为
(1)运算器一次最多可以处理16位的数据;
(2)寄存器的最大宽度为16位;
(3)寄存器和运算器之间的通路为16位,8086除此之外8086CUP有20位地址总线,可以传送20位地址,达到1MB的寻址能力,所以用段地址和偏移地址
上面这个就是最典型的 基址 + 偏移的一个应用场景
这个地址计算方式,在操作系统的中很多地方,都存在,灵活性非常高
包括写攻击代码的时候,需要用到一些关联对象,或者关联内存的时候,整个 基址 + 偏移的表 就能完成寻址对象存取的工作

可以想象一下,PE文件,加载到内存后,绝对地址 也就是绝对偏移,是否还会有效?

我们可以看一条指令:.text:100035C2 E8 29 FF FF FF call sub_100034F0
该条指令的OPCODE E8 29 FF FF FF
E8为指令CALL的操作码, 后面的 FFFFFF29 就是这个代码地址距离该条指令的相对偏移
FFFFFF29 这个值是正数 还是 负数?
负数
E8 30 09 00 00 call sub_10003EC0 再看这条 CALL
后面的代码相对地址 偏移 00000930 就是正数
跳转到,该条地址 距离0x930个字节的位置

e_lfanew 的地址 到 PE 头地址 之间的内容是什么?

这块区域除了,提示语之外,还有一些其他的东西,而且在WIN32下,几乎就是一块真空地带
可以藏,代码,感染型病毒的感染标记,或者加密后的数据等等

第三个问题:X86 和 X64 PE 怎么区分?

比如我给你一个PE, 你把通过NT头大小判断PE X86 或者 X64的算法简单描述一下
1、读取PE到内存,使用DOS 头解析,得到NT头的位置
2、如何比较NT头第二部分的大小
通过代码的角度如何 完成 比较NT 头第二部分的大小
首先要明确一点,从文件中读出来的,只是一块数据内存
你使用32位NT头 ,或者64位NT头 去解析,都可以得到各个部分的值
在一个数据块,中只有明确知道数据边界才可能进行大小计算之类的操作
通过代码角度去实现,而不是人肉去看
目前的任务,我是给你一个PE文件
你怎么知道这个PE文件是32位,还是64位
是不是读到内存之后,需要用相关的结构去解析这块内存,从而拿到里面的值?
那你怎么知道是用32位的结构是对的,还是64位的结构是对的
只要不越界,所有的结构,套上去都有值
只不过这个值是否非法,有些是有校验难度的
其实通过 内存值,去判断差异是比较简单的,比如某个偏移 byte == xxx

所以最好的方式
NT头中的一个部分,如果值为0x014c就是 X86,值为0x8664就是X64
先从dos头读pe头,pe头读IMAGE_OPTIONAL_HEADER,再读Magic
IMAGE_FILE_HEADER结构体中的Machine

if (imageNtHeaders.FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
        {
        return 32;
        }
    if (imageNtHeaders.FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 ||
        imageNtHeaders.FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
        {
        return 64;
        }

machine 是X86 Magic 必须也是X86 才能保证 这个PE ,能正常加载
而且,可选头里面包含 PE 加载器用到的很多参数
在这里插入图片描述
PE 加载器,会根据这些信息,去实际初始化进程中的可执行模块的内存布局

如果修改这些值之后,能不能大小,减少程序运行内存的目的?或者产生,程序运行异常等问题?

要记得,所有能影响加载器 的参数,都有可能被利用,至于干好事还是坏事,看你们的需求了
各种各样类型的文件:PDF,PE,ELF,DOC,XLS,JPG,BMP,ICO等等,都是有结构成员能影响该类文件的加载器的
攻击方,或者防守方,对于内存这块能怎么玩?
所有的程序或者系统,正常运行的前提是资源足够的情况下,那么在极端资源的情况下,不稳定的代码就会出现很多
比如,漏洞攻击中的,堆喷,就是通过不停的申请大量的内存,以求达到特定的内存布局,从而搞事情
除了内存申请,其实在文件加载的时候,也可以影响系统的内存资源
其实逻辑很简单,只要能影响系统资源的东西,就能作为备用的一个点

上面大部分内容在预习部分其实已经解决了
细看
https://blog.csdn.net/m0_72827793/article/details/130231662

下节课内从

通过代码,调试 RUNPE 源码,体会一下,PE 加载的过程
https://github.com/aaaddress1/RunPE-In-Memory

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python 基础语法学习之变量与运算符

一、注释 注释: 就是对代码的解释,方便阅读,被注释的代码不执行 分类 单行注释 # 1.单行注释 以#号开头 ,右边的所有东西都被当做说明文字 ,程序不进行编译运行。 print(hello world)多行注释 # 2.多行注释 三个单引号 或…

学习日记(刷题,学java)

先看看题目 给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 示例 1&…

Chapter 4 :Constraining I/O Delay(ug903)

4.1 About Constraining I/O Delay 要在设计中准确地建模外部时序上下文,必须为输入和输出端口提供时序信息。由于XilinxVivado集成设计环境(IDE)只能识别FPGA边界内的时序,因此必须使用以下命令来指定超出这些边界的延迟…

Linux 系统文件权限管理(参考菜鸟教程)

一、查看文件用户,用户组,其他用户的文件权限,属主,属主用户组等信息 ls -l如图所示:  1、第一个字符代表这个文件是目录、文件或链接文件等等。 当为 d 则是目录当为 - 则是文件;若是 l 则表示为链接…

SpringBoot+Shiro+Jwt+Vue+elementUI实现前后端分离单体系统Demo

记录一下使用SpringBoot集成Shiro框架和Jwt框架实现前后端分离Web项目的过程,后端使用SpringBoot整合ShiroJwt(auth0),前端使用vueelementUI框架,前后端的交互使用的是jwt的token,shiro的会话关闭,后端只需要使用Shiro…

Sqlmap Tamper 编写/改写 学习

sqlmap的 --tamper 参数可以引入用户自定义的脚本修改注入时的payload ,达到sql注入时对一些敏感字符的一些绕过 下载 sqlmap 自带的 tamper 脚本就在 /sqlmap/tamper 目录下,是用 python 编写的,所以我们可以用 python 语言自己编写一些脚本…

bismark和bsmap比对原理

1,bismark比对方法比较简单粗暴,它制作两种类型的基因组:1),将所有的C转化为T的基因组;2),将所有的G转化为A的基因组。它将bisulfate(重chong硫酸盐)处理后的…

【Kafka】面试题总结

Kafka 1、什么是消息队列2、消息队列有什么用3、Kafka 的多分区以及多副本机制有什么好处呢4、Zookeeper 在 Kafka 中的作用知道吗5、Kafka 如何保证消息的消费顺序6、Kafka 如何保证消息不丢失7、Kafka 如何保证消息不重复消费7、Kafka为什么快/吞吐量大 1、什么是消息队列 我…

【JavaScript】对象继承精华提炼

继承机制 每个函数都有一个prototype属性,指向一个对象,该对象是原型对象;构造函数生成实例时,该属性会自动成为实例对象的原型;原型对象上的所有属性和方法,都能被实例对象共享继承;原型对象的…

使用HALCON标定板快速标定,纠正成像畸变

使用HALCON标定板快速标定,纠正成像畸变 1生成标定板描述文件 gen_caltab (7, 7, 0.00375, 0.5, caltab.descr, caltab.ps)gen_caltab ( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 为具有矩形排列标记的标定板生成标定板描述文…

Linux环境下安装RocketMQ(单机、集群)

目录 前置要求: 一、下载RocketMQ 二、上传解压 三、配置rocketmq的环境变量 四、查看rocketmq的目录结构 五、启动 5.1 启动nameserver 5.2 启动broker 六、测试发送消息 七、关闭 八、RocketMQ集群搭建 8.1 RocketMQ集群模式介绍 8.2 搭建 8.2.1 准…

海康机器视觉Visionmaster-VM3D常见问题及解决方法

软件及环境问题 第一个问题:软件获取问题 官网获取 第二个问题:环境配置类问题 1.软件打不开,加密狗灯不亮,6报错:加密狗未检测到或异常。解决方法:安装3DVM的驱动。 安装后加密狗无法识别&#xff0c…

SLAM论文速递:SLAM—— MID-Fusion:基于八叉树的对象级多实例动态SLAM—4.26(1)

论文信息 题目: MID-Fusion:Octree-based Object-Level Multi-Instance Dynamic SLAMMID-Fusion:基于八叉树的对象级多实例动态SLAM 论文地址: https://ieeexplore.ieee.org/abstract/document/8794371发表期刊: 2019 International Conf…

LVS-NAT模式

什么是群集? 多台主机组成的一个整体,提供一个ip访问通道,所有的主机干一件事 提供同样的服务。 群集有哪些类型? ①负载均衡群集(LB): 提高系统的响应能力,处理更多的访问请求&am…

Linux进程(1)

目录 ⛹🏽进程简介⛹🏽查看进程⛹🏽系统调用🚴🏽获取进程标示符🚴🏽创建进程 ⛹🏽进程状态🚴🏽孤儿进程:🚴🏽进程优先级 ⛹…

一次使用netcat的经验记录

1.netcat安装 参考:https://my.oschina.net/u/3530967/blog/1560985 2.netcat使用 参考:https://zhuanlan.zhihu.com/p/83959309 3.创建udp服务 (1)使用:nc -l -u -p 8810 创建udp服务端监听8810端口 在另一台机…

基于信度感知的半监督医学图像分类对比自集成

文章目录 Reliability-Aware Contrastive Self-ensembling for Semi-supervised Medical Image Classification摘要本文方法Reliability-Aware Contrastive Mean TeacherWeight FunctionReliability-Aware Consistency LossReliability-Aware Contrastive LossObjective Functi…

windows 安装mysql5.7

确认是否安装了mysql winr 输入services.msc , 找mysql 下载 链接:https://pan.baidu.com/s/1zPuvzjWovky3MrpNlIt9uw 提取码:y52i 安装 https://blog.csdn.net/u012318074/article/details/124042756 家目录下新建配置文件 my.ini 注意路径中 // &a…

企业进行数字化转型的优劣势分别有哪些?

数字化转型是指将数字技术融入企业的方方面面,从而导致企业运营方式和为客户创造价值的方式发生根本性变化。企业数字化转型既有优势也有劣势,概述如下: 优点: 提高效率和生产力:数字化转型使企业能够自动化和简化业…

Session服务端会话追踪

1. Session基本使用 将数据(cookie)保存在客户端不安全,因为客户端在不停的进行着网络传输,所以把数据存储在服务端。 存储的对象就是session,例如AServlet往session中存数据,BServlet往session中读数据。 …