4.25~~~~~
接着之前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
相关文章:
4.25~~~~~
接着之前PE文件结构的预习 DOS 定位到NT 怎么操作的? 用的是e_lfanew,然后是相对于文件头的偏移量(也就是raw表示方法) 现在有个问题,为什么e_lfanew 这个变量不直接存储PE头 的绝对地址呢? 比如说&…...
Android 9.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能
1.前言 在android9.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度,旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现,接下来就来分析实现…...
Python数据结构与算法-欧几里算法(p95)
一、欧几里算法原理 欧几里得公式 欧几里得算法:gcd(a,b) gcd(b, a mod b) ; mod是指模,即a/b取余数。 运算示例: gcd(60,21) gcd(21,18) gcd(18,3)gcd(3,0) 证明略 最大公约数-欧几里得求解 (…...
【故障诊断】用于轴承故障诊断的性能增强时变形态滤波方法及用于轴承断层特征提取的增强数学形态算子研究(Matlab代码实现)
💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …...
水羊转债,超达转债,晓鸣转债上市价格预测
水羊转债 基本信息 转债名称:水羊转债,评级:A,发行规模:6.94987亿元。 正股名称:水羊股份,今日收盘价:13.94元,转股价格:13.71元。 当前转股价值 转债面值 /…...
从数据管理到数据资产管理
数据已经与土地、劳动力、资本、技术并称为五种生产要素,数据的价值是毋庸置疑的。数据甚至成为了国家的基础性战略资源,数字经济也正在成为经济增长的强大创新动力。那么—— 数据到底指的是什么? 数据管理又是怎么回事? 数据如何…...
RabbitMQ【#1】是什么,有什么用
RabbiMQ是什么? RabbitMQ是一种开源的消息队列软件,它实现了高级消息队列协议(AMQP)并支持多种编程语言。它可以用于将消息从一个应用程序传递到另一个应用程序或进程,并支持分布式系统中的异步消息通信。RabbitMQ的主…...
RabbitMQ防止消息丢失
生产者没有成功把消息发送到MQ 丢失的原因 :因为网络传输的不稳定性,当生产者在向MQ发送消息的过程中,MQ没有成功接收到消息,但是生产者却以为MQ成功接收到了消息,不会再次重复发送该消息,从而导致消息的丢…...
ImageJ用户手册——第二部分(ImageJ操作)
ImageJ用户手册-第二部分 ImageJ的使用4. 使用键盘快捷键5. 查找命令6. 撤消和重做7. 图像类型和格式原生格式非原生格式 8. 堆栈、虚拟堆栈、超堆栈Stacks(堆栈)Virtual Stacks(虚拟堆栈)Hyperstacks(超堆栈ÿ…...
Java中Lambda表达式(面向初学者)
目录 一、Lambda表达式是什么?什么场景下使用Lambda? 1.Lambda 表达式是什么 2.函数式接口是什么 第二章、怎么用Lambda 1.必须有一个函数式接口 2.省略规则 3.Lambda经常用来和匿名内部类比较 第三章、具体使用场景举例() …...
2023年淮阴工学院五年一贯制专转本数字电子技术考试大纲
2023年淮阴工学院五年一贯制专转本数字电子技术考试大纲 一、考核对象 本课程的考核对象是五年一贯制高职专转本电子科学与技术专业普通在校生考生。 二、考试目的及总体要求 通过本课程的考试,检查学生对掌握数字电路的基础理论知识的掌握程度,是否…...
使用 GO 编写 Web 应用:学习如何使用 GO 语言编写 Web 应用,包括使用 HTTP 路由、模板引擎等。
GO 语言是一个高效、可靠和简洁的编程语言,越来越多的开发者开始选择 GO 语言来编写 Web 应用。本文将介绍如何使用 GO 语言编写 Web 应用,并且将重点关注使用 HTTP 路由和模板引擎。 使用 HTTP 路由 HTTP 路由是 Web 应用中非常重要的一个概念。它可以帮助我们将请求路由到…...
Leetcode-day4【88】【167】【125】【345】
文章目录 88. 合并两个有序数组题目解题思路解题思路【学习】尾插入法 167. 两数之和 II - 输入有序数组题目解题思路 125. 验证回文串题目解题思路 345. 反转字符串中的元音字母题目解题思路 88. 合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums…...
【IoT】如何使用软件加密(文件夹加密工具.exe),并破解工具
目录 第一步:显示隐藏的文件。 第二步:将隐藏文件变成文件夹。 第三步:解密文件。 有时候出差或者有些商务场合,需要对一些敏感文件做一下简单的加密,这样在分享内容的时候,可以起到初步的保护作用。 当…...
Spring Boot——优雅的参数校验
🎈 概述 当我们想提供可靠的 API 接口,对参数的校验,以保证最终数据入库的正确性,是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数,写了一大堆的 if else 进行校验,或者基础校…...
【c语言】typedef的基本用法 | 定义格式
创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...
深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras
深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras(CVPR2023) 前言Abstract1. Introduction2. Related Work3. Method3.1. Feature Network3.2. Frame Attention Module3.3. Supervision 4. Experiments5. Con…...
蛇优化算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 蛇优化算法算法流程图初始化进化操作搜索阶段(无食物)——全局搜索搜索阶段(有食物)——局部搜索战斗模式交配模式 备…...
循环神经网络(RNN)简单介绍—包括TF和PyTorch源码,并给出详细注释
文章目录 循环神经网络(RNN)入门教程1. 循环神经网络的原理2. 循环神经网络的应用3. 使用keras框架实现循环神经网络3.1导入对应的库及加载数据集3.2.数据预处理3.3定义RNN模型3.4训练模型3.5测试模型 4.使用PyTorch框架实现上述功能—注释详细5.结论 循…...
Struts2 快速入门
Struts2 是一个基于 MVC 设计模式的 Java Web 应用程序框架,它可以帮助我们更加有效地开发 Web 应用程序。Struts2 采用了前端控制器模式,通过核心控制器 DispatchServlet 将所有请求进行集中处理,然后将请求分发到指定的 Action 中ÿ…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
