当前位置: 首页 > 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…...

关于PullToRefreshView下拉刷新失效问题

一、问题原因 昨天&#xff0c;突然一个问题丢在了我的头上&#xff0c;用户反馈说某某界面下拉刷新不好使啊&#xff0c;怎么回事。二话不说直接运行项目&#xff0c;经过测试&#xff0c;发现果然不好使。一看代码提交日期好家伙2020年&#xff0c;百思不得其解&#xff0c;…...

JAVA开发中的六大原则

JAVA开发中的六大原则&#xff0c;也被称为SOLID原则&#xff0c;是软件开发中常用的一组设计原则。这些原则提供了实现高质量、易于维护和可扩展软件的基本策略。 以下是JAVA开发中的六大原则以及它们的详细说明&#xff1a; 单一职责原则&#xff08;Single Responsibility…...

Matplotlib 安装

Matplotlib 安装 本章节&#xff0c;我们使用 pip 工具来安装 Matplotlib 库&#xff0c;如果还未安装该工具&#xff0c;可以参考python 怎么使用pip进行包管理。 安装 matplotlib 库&#xff1a; pip install matplotlib 安装完成后&#xff0c;我们就可以通过 import 来…...

CF - Li Hua and Pattern

题意&#xff1a;给出了矩阵&#xff0c;里面每个位置分为蓝色或红色&#xff08;数据上用1和0体现了&#xff09;&#xff0c;给出了一个操作次数&#xff0c;每次可以改变一个坐标的颜色&#xff0c;问能否通过操作使得图像旋转180度后不变。 解&#xff1a;很容易想到&…...

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来

在今天的 2023 阿里云合作伙伴大会上&#xff0c;阿里云智能云原生应用平台运营&生态业务负责人王荣刚宣布&#xff1a; “阿里云云原生合作伙伴计划”全新升级。他表示&#xff1a; 云原生致力于帮助企业客户最大限度的减轻运维工作&#xff0c;更好的实现敏捷创新&#x…...

OSCP-Escape(gif绕过)

目录 扫描 WEB 扫描 sudo nmap 192.168.233.113 -p- -sS -sVPORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) 8080/tcp open http Apache…...

iMazing2023最新免费版iOS设备管理软件

iMazing是一款功能强大的iOS设备管理软件&#xff0c;它可以帮助用户备份和管理他们的iPhone、iPad或iPod Touch上的数据。除此之外&#xff0c;它还可以将备份数据转移到新的设备中、管理应用程序、导入和导出媒体文件等。本文将详细介绍iMazing的功能和安全性&#xff0c;并教…...

Git上传文件代码到GitHub

删除线上git:删除GitHub仓库里的文件夹_阿巴资源站的博客-CSDN博客 1. 创建空文件夹 2. cd 到本文件夹 3. git init &#xff0c;初始化&#xff0c;在本地创建一个Git仓库 4. 同时按住“ Command Shift . ”三个按键&#xff0c;即可查看当下文件夹中的隐藏文件 5. 克隆…...

JavaScript概述二(Date+正则表达式+Math+函数+面向对象)

1.Date 1.1 new一个Date对象表示当前系统时间 var nownew Date(); console.log(now);1.2 根据传入的时间格式表示时间 var date1new Date(2023-4-20 00:16:40); console.log(date1); 1.3 传入时间毫秒数&#xff0c;返回从1900年1月1日8时&#xff08;东八区&#xff09;X分X…...

一个朋友弄来的,太牛了,特别是后面内容,不看不知道,一看吓一跳,电话,热线

一个朋友弄来的&#xff0c;太牛了&#xff0c;特别是后面内容&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;我也收藏一下&#xff1a; 工商银行 95588 建设银行 95533 农业银行 95599 中国银行 95566 交通银行 95559 浦发银行 95528 民生银行 95568 兴业银行 955…...