IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 自动化实现加密数据(1--RVA和FOA关系以及基本搭建) -> 正文阅读

[系统运维]自动化实现加密数据(1--RVA和FOA关系以及基本搭建)

需求拆解:

  1. 能够把内存地址转换为硬盘文件,即RVA = > FOA的转换
  2. 能够记录和编辑加密代码重定位问题
  3. 能够自动对加密代码写入跳转数据
  4. 游戏扩展插件能够自动加载释放保护数据

RVA:内存相对地址(相对模块基址VA - BASE)

VA :内存里的地址

FOA:硬盘里的地址(文件偏移)

内存制作工艺和硬盘制作工艺不一样的,内存有这自己的对齐规范多出的就补零

硬盘也有自己的对齐方式(有的程序也有一样的)对齐的字节不一样,这样的对齐方式可以实现快速访问。内存通常是比硬盘对齐的字节打一些,PE文件格式里就指明了硬盘和内存对齐的大小

PE是一种组织文件,组织数据的一种格式,本身不是什么技术,就是微软规定好的一种格式,这种格式主要有exe可执行文件,动态链接库dll,src,sys...都是PE文件,都遵守PE的文件规范

PE里有一个文件叫做PE的头,在PE头文件里就会给我们提供PE组织文件的的基本数据。

一个文件一开始就是它的PE头,头后面就是它的表,节... 我们的代码,资源,常量等就放在节里。节还有名字

我们把EXE文件双击加载到内存里,应该来讲直接把这个数据拷贝到内存里就可以了,但因为对齐粒度不同,他就会放大,都得补到1000的倍数,就会有拉伸放大的效果。

根据是怎么拉伸的,最后求出对应的地址在硬盘里是什么,这就是RVA=>FOA的换算

?一打开就这样的,这个叫做DOS头,它是为了兼容DOS程序 ,因为windows有一个发展历程,会向下兼容。当时这个东西已经不用了。

DOS头结构体:

?只要范访问e_lfanew就能指向NT头(+DOS头)

?唯一重要的就是这个偏移数据。因为在DOS头后面紧跟了一个结构体,这个结构体名字叫NT头,NT头就在DOS头加这个偏移就是NT头。所以用780000+118就到了NT头

?NT头定义:

?这儿有一个ascii的PE,就是所谓PE头(无模块化技术抹掉PE头就是这个PE头)

文件头定义:

?

最重要的就是这个:表示有多少个节(里面放的是核心的数据和代码等等)

我们的VA是通过某一个节的FOA映射过来的

?选项头定义:

重要的有入口点:?

?

模块默认加载基址: (加载到了指定位置就不需要重定位)

?

?能精确加载到这个位置也就应用程序可以,我们的模块不见得可以精确的加载到这个位置,因为模块有可能会冲突

内存和文件里的对齐粒度

?不够的填充为0,有些程序也会填充成CC

NT头结束的第一个位置就是节

根据DOS头加偏移得到NT头,NT头大小加上NT头位置得到第一个节的地方

节:

?用之前写的登录器启动,打开OD,看我们自己的模块?,这就是之前多开检测自己定义的一个节

?

当时我们是放了一个int变量4字节,但这个数据有时候不准,不采纳了已经?

节在硬盘里大小是200(对齐粒度200)

有了这些数据,就可以做换算了。

FOA? - 》 ROA?

先求RVA与节开始的差距? RVA - virtualAddess[2]可以得到偏移 再加上文件中第二个节的起始地址就得到了在硬盘中的地址

基本定义:

class PEProtecter
{
	unsigned Base;
	unsigned SecCount;//节数量
	PIMAGE_SECTION_HEADER SecArays;
private:
	char* _data{};
public:

	bool LoadFile(wchar_t* _file);
	unsigned VAtofoa(unsigned va, unsigned _base=0);
	char* ReadDataByVA(unsigned va, unsigned _base =0);
	~PEProtecter();
};

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:23:53  更:2022-02-04 11:24:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 8:49:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码