当前位置: 首页 > news >正文

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) 证明略 最大公约数-欧几里得求解 &#xff08…...

【故障诊断】用于轴承故障诊断的性能增强时变形态滤波方法及用于轴承断层特征提取的增强数学形态算子研究(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(超堆栈&#xff…...

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的基本用法 | 定义格式

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras

深度学习论文分享&#xff08;二&#xff09;Data-driven Feature Tracking for Event Cameras&#xff08;CVPR2023&#xff09; 前言Abstract1. Introduction2. Related Work3. Method3.1. Feature Network3.2. Frame Attention Module3.3. Supervision 4. Experiments5. Con…...

蛇优化算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 蛇优化算法算法流程图初始化进化操作搜索阶段&#xff08;无食物&#xff09;——全局搜索搜索阶段&#xff08;有食物&#xff09;——局部搜索战斗模式交配模式 备…...

循环神经网络(RNN)简单介绍—包括TF和PyTorch源码,并给出详细注释

文章目录 循环神经网络&#xff08;RNN&#xff09;入门教程1. 循环神经网络的原理2. 循环神经网络的应用3. 使用keras框架实现循环神经网络3.1导入对应的库及加载数据集3.2.数据预处理3.3定义RNN模型3.4训练模型3.5测试模型 4.使用PyTorch框架实现上述功能—注释详细5.结论 循…...

Struts2 快速入门

Struts2 是一个基于 MVC 设计模式的 Java Web 应用程序框架&#xff0c;它可以帮助我们更加有效地开发 Web 应用程序。Struts2 采用了前端控制器模式&#xff0c;通过核心控制器 DispatchServlet 将所有请求进行集中处理&#xff0c;然后将请求分发到指定的 Action 中&#xff…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...