【逆向工程】十六进制编辑器与反编译的手写PE文件格式(详细教程)

news2024/11/13 9:37:37

原理

(1)程序如何在本地生成注册码

1.打开文件并写入MZ头部:打开一个二进制文件以进行写入操作。写入MZ头部,即前64字节,通常以字节序列 4D 5A 开始。

2.写入PE头部:PE头部紧随在MZ头部之后,其位置由MZ头部中的偏移地址 0x3C 指示。写入PE头部,即字节序列 50 45 00 00,表示ASCII字符 'P'、'E' 的ASCII码的十六进制表示,后跟两个空字节(0x00 0x00)。

3.写入其他PE文件头和节表等信息:根据PE文件格式的规范,可以写入其他必要的PE文件头信息,例如文件头部分、可选头部分等。还需要写入节表信息,包括节表项的描述和节数据。

4.计算注册码:注册码的生成可能涉及到各种算法,例如基于文件内容的哈希算法、加密算法等。通过对文件的特定部分进行计算,并结合密钥或其他参数,生成唯一的注册码。

5.将注册码写入文件中的特定位置或输出到控制台:注册码通常会被写入到文件中的特定位置,例如在PE文件的数据段之后,或者在文件的末尾添加一个特定的标记来存储注册码。另外,注册码也可以直接输出到控制台或保存到一个单独的文件中。

工具

1.windows环境

2.010editor

(1)分析pe文件格式中各重要字段值的过程,尤其是dos头、pe文件头、各区块头以及区块数据

1、MS-DOS:MZ头部

DOS MZ header:所有PE文件(甚至32位的DLLs) 必须以一个简单的DOS MZ header 开始。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随MZ header 之后的DOS程序。以此达到对Dos系统的兼容。(DOS MZ header总共占用64byte)

MZ头部是Windows可执行文件的一部分,用于标识文件类型和指向PE头部(Portable Executable)的位置。它位于可执行文件的开头,通常以"4D 5A"这对字节开头。这个头部包含了一系列字段,其中大部分是保留字段,其值为0。最重要的字段之一是指向PE头部的偏移地址,它告诉系统在文件中找到PE头部的位置。 PE头部包含了更多关于文件结构和可执行代码的信息。

2.PE结构:

PE文件标识:

PE头部位于MZ头部之后,是PE文件的主要标识。它包含了PE文件的一些基本信息,比如文件类型、CPU架构、节表的位置等。PE头部通常是一个20字节的结构,以"PE"开头。PE文件标识是指在PE文件头部的起始位置处的一组字节,用于标识该文件为PE格式的可执行文件。在大多数情况下,这组字节的值为 "PE\0\0"(即 ASCII 字符 "P"、"E",后跟两个空字节)。这个标识是PE文件格式的基本特征之一,操作系统和其他相关工具通过检查这个标识来确认文件是否符合PE格式。 PE文件标识的存在使得操作系统能够正确地识别和处理PE格式的可执行文件。

PE文件头:

PE文件头是Windows可执行文件的核心部分,包含了标识、机器类型、节表数量、时间戳、符号表信息等重要字段,用于识别和加载文件。它的信息包括文件类型、架构、创建时间等,对于操作系统和开发者都至关重要。

PE可选头:

PE文件可选头部跟随在PE头部之后,包含了一些可选的信息,比如数据目录、程序入口点地址等。这个头部通常是一个224字节的结构。

Text头部:

"Text" 头部是PE文件中存储实际执行指令的部分,包含代码段起始地址、大小、属性等信息。它定义了程序的执行逻辑和入口点,对程序的执行至关重要。

Rdata头部:

Rdata头部是PE文件中的一个节表头部,存储只读数据,如常量、字符串等。它指示了该节在内存中的位置和大小,对于程序的安全性和性能至关重要。

Data头部:

Data头部是PE文件中用于存储各种类型数据的节表头部之一。常见的数据节包括存储已初始化变量的".data"节和存储未初始化变量的".bss"节。每个数据节都有自己的头部,包含节的起始地址、大小和属性等信息。

3.text区块:

text 区块通常是可执行文件中存储程序代码的部分。在可执行文件中,程序的指令集合会被存储在 .text 区块中。这个区块包含了程序的机器代码,即由处理器直接执行的指令序列。

在一个典型的可执行文件中,.text 区块是一个只读区块,因为程序的代码在运行时通常不会被修改。这个区块的属性通常被设置为可执行和可读,但不可写。

.text 区块是程序执行的起点,当程序被加载到内存并开始执行时,处理器会从 .text 区块的起始位置开始执行代码。

4.rdata区块:

.rdata 区块通常是可执行文件中存储只读数据的部分。在 Windows 操作系统中,它经常用于存储程序中的只读全局变量、常量以及其他只读数据。这些数据在程序运行时不能被修改,因此它们被放置在一个只读的区块中,以保证数据的完整性和安全性。(2)重点分析rdata区块的十六进制数填写过程

  1. 首先确定rdata段的起始地址,这里是600h。
  2. 确定导入表的相关信息。
  3. 填写数据目录数组的第二个元素导入表目录结构成员:

成员1:指向IMAGE_THUNK_DATA结构数组的RVA,映射后的值为“4C200000”。

成员2、成员3:用零填充。

成员4:指向DLL名字的RVA,即“user32.dll”的RVA为“6A200000”。

成员5:指向IMAGE_THUNK_DATA结构数组的RVA,映射后的值为“08200000”。

  1. 填写第二个数组元素的有关kennel32.dll信息的成员:

成员1:指向IMAGE_THUNK_DATA结构数组的RVA,映射后的值为“54200000”。

成员2、成员3、成员4、成员5:依次填写为“00000000”、“00000000”、“84200000”、“00200000”。

  1. 在IMAGE_IMPORT_DESCRIPTOR结构数组后面填写导入函数名称的RVA:

对于user32.dll,只有一个导入函数MessageBoxA,其RVA为“5C200000”,紧接着以“00000000”结束。

对于kennel32.dll,只有一个导入函数ExitProcess,其RVA为“76200000”,紧接着以“00000000”结束。

  1. 对齐.rdata段的剩余部分,用零填充。
  2. 最终得到的rdata区块为:

000600  A2 CA 81 7C 00 00 00 00 8A 05 D5 77 00 00 00 00

000610  4C 20 00 00 00 00 00 00 00 00 00 00 6A 20 00 00

000620  08 20 00 00 54 20 00 00 00 00 00 00 00 00 00 00  

000630  84 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00

000640  00 00 00 00 00 00 00 00 00 00 00 00 5C 20 00 00  

000650  00 00 00 00 76 20 00 00 00 00 00 00 9D 01 4D 65

000660  73 73 61 67 65 42 6F 78 41 00 75 73 65 72 33 32

000670  2E 64 6C 6C 00 00 80 00 45 78 69 74 50 72 6F 63

000680  65 73 73 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C  

000690  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

0006A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

(3)完整的pe文件即exe文件以及其对应的十六进制数完整截图 (30分)

本文深入研究了PE(Portable Executable)文件格式,这是Windows操作系统下的一种常见的可执行文件格式。通过分析PE文件的各个重要字段值,包括DOS头、PE文件头、各区块头以及区块数据,加深了对PE文件结构的理解。了解到PE文件以MZ头部开头,这是为了在DOS系统下执行时能够被识别。然后,PE头部紧随其后,包含了PE文件的一些基本信息,如文件类型、CPU架构等。接着,可选头部包含了一些可选的信息,如数据目录、程序入口点地址等。在分析各个区块时,关注了.rdata区块,这是存储只读数据的部分。在Windows操作系统中,.rdata区块通常用于存储只读全局变量、常量等数据,保证了程序运行时这些数据的完整性和安全性。

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

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

相关文章

构建稳固与安全的网络环境:从微软蓝屏事件看软件更新流程与应急响应

“微软蓝屏”事件暴露了网络安全哪些问题? 近日,由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅让科技领域为之震动,更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件源于美国电脑安全技术公司“众击”的一…

GIT新手提交操作

1、创建一个本地分支 进入Xshell已经拉取的该项目的项目代码路径下执行git checkout -b 姓名全拼音,例如:git checkout -b xiewei,当前显示已创建。 cuihengyidell-PowerEdge-T550:~/SVN/Git_R11/R11_V4.02.0_Source$ git checkout -b cuih…

数据库之PHP联动

目录 一、软件安装 二、软件讲解 三、搭配环境 四、编辑软件配置 五、成果展示 如果有人问:为什么非要用xampp、VS code编辑软件?不用phpstudy等其他工具。 那么我只想说:因为xampp、VS code编辑软件免费(ಡωಡ)hiahiahia 一、软件安装 下载连…

S-HTTP协议:确保网络通信安全的重要基石

随着互联网技术的飞速发展,网络通信安全已成为一个不可忽视的重要议题。在众多保障网络通信安全的协议中,S-HTTP(Secure Hypertext Transfer Protocol)以其独特的加密和认证机制,成为保护数据传输安全的重要工具。本文…

SpringBoot 数据访问操作

目录 一.SpringBoot整合Mybatis与Mybatis-Plus 二.SpringBoot切换druid数据源 3.1DRUID配置参数 3.2Druid监控平台 一.SpringBoot整合Mybatis与Mybatis-Plus 步骤&#xff1a; 1.坐标 <dependency><groupId>com.baomidou</groupId><artifactId>myb…

实现自动化采购:食堂采购系统源码开发详解

本篇文章&#xff0c;笔者将详细介绍食堂采购系统的开发过程&#xff0c;从需求分析、系统设计到实现和测试&#xff0c;为您全面解析如何构建一个高效的自动化采购系统。 一、需求分析 1.采购计划管理 2.供应商管理 3.订单管理 4.库存管理 5.财务管理 6.数据分析与报告 …

Power App学习笔记以及基础项目管理demo

Power App学习笔记以及基础项目管理demo 最近学习了一点Power App&#xff0c;感觉挺有意思。配置式组件开发。浅浅记录一下自己实现的项目管理系统&#xff08;即Excel数据的增删改查&#xff09;关于函数的一点皮毛认识。 效果图 筛选数据 编辑 详情 数据源 PowerApp 网…

杰发科技Bootloader(2)—— 基于7840的Keil配置地址

序 在7840的sample代码里面有一个简单的Boot跳转APP的示例 PFlash地址从0开始 DFlash的地址从1000000开始 Boot解析 他的boot地址配置为0 Boot的代码主要是这几行&#xff0c;主要作用就是Flash的跳转 int main(void) {SystemClock_Config();InitDebug();printf("demo…

分布式搜索引擎ES-DSL搜索详解

1.DSL搜索-入门语法 建立索引&#xff1a; xxx(自定义名称) 自定义mapping: POST /shop/_mapping {"properties": {"id": {"type": "long"},"age": {"type": "integer"},"username": {&quo…

数据结构之判断完全二叉树详解与示例(C,C++)

文章目录 一、判断完全二叉树的思路二、C语言实现三、C语言实现四、总结 完全二叉树是一种特殊的二叉树&#xff0c;它满足以下两个条件&#xff1a; 每一层&#xff08;除了最后一层&#xff09;都被严格地填充了节点。 最后一层的节点都尽可能地靠左对齐。 本文将详细介绍如…

数据结构 —— B+树和B*树及MySQL底层引擎

数据结构 —— B树和B*树及MySQL底层引擎 B树B*树B树的应用B树在MySQL中的应用MyISAMInnoDB 我们之前学习了B树的基本原理&#xff0c;今天我们来看看B树的一些改良版本——B树和B*树。如果还没有了解过的小伙伴可以点击这里&#xff1a; https://blog.csdn.net/qq_67693066/ar…

【启明智显分享】基于国产Model3芯片的7寸触摸屏助力智慧医疗,电子床头屏提升护理交互

未来医院必然是以信息化为基础&#xff0c;以物联网为特征&#xff0c;以医疗为核心的服务型医院。病房作为医院的重要服务场所&#xff0c;成为智慧医院建设的重要一环。 为提高医护人员与患者的互动交流&#xff0c;给医疗注入智慧元素&#xff0c;让患者享受智能服务&#…

Ins云手机在运营Instagram账号的优势

在数字时代&#xff0c;Instagram成为全球数亿用户的重要社交平台&#xff0c;其超过10亿的用户数量&#xff0c;为企业提供了广阔的营销空间。对于希望拓展海外市场的企业来说&#xff0c;使用Instagram进行引流和推广是一个高效且安全的选择。为了更高效地管理和运营多个Inst…

C#知识|账号管理系统:修改登录密码界面的UI设计

哈喽,你好啊!我是雷工! 本节记录添加修改登录密码界面的过程,以下为练习笔记。 01 效果演示 演示跳转打开修改登录密码子窗体效果: 02 添加窗体 在UI层添加一个Windows窗体,命名为:FrmModifyPwd.cs; 03 设置窗体属性 按照下表的内容设置窗体的相关属性: 设置属性 …

HCIP之PPP协议(PAP认证,CHAP认证)、GRE、MGRE综合实验

实验过程 一、IP配置 [r1]interface Serial 4/0/0 [r1-Serial4/0/0]ip ad 15.1.1.1 24 [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip ad 192.168.1.1 24 r2]interface Serial 4/0/0 [r2-Serial4/0/0]ip ad 25.1.1.2 24 [r2]interface GigabitEthernet 0/…

Web漏洞扫描工具(AWVS、Goby)

一、背景 想针对自己项目或者小公司的Web安全做相关扫描&#xff0c;自己做漏洞进行自查工作&#xff0c;能够减少自身系统的安全风险&#xff0c;提高系统的安全性。但是没有找到一些开源性质的、扫描质量比较高的相关工具&#xff0c;使用安全公司的专业产品价格又承受不起。…

生成式人工智能之路,从马尔可夫链到生成对抗网络

人工智能&#xff08;Artificial intelligence&#xff0c;AI&#xff09;技术在过去几年中取得了显著进展&#xff0c;其中生成式AI&#xff08;Generative AI&#xff09;因其强大的内容生成能力而备受关注。生成式AI可以创建新的文本、图像、音频、视频、代码以及其他形式的…

Java中定时任务执行的三种方式

Java中定时任务执行的三种方式 1. 普通线程死循环1.1 优点1.2 缺点1.3 示例代码片段 2. 使用定时器 Timer2.1 优点2.2 缺点2.3 示例代码片段 3. 使用定时调度线程池 ScheduledExecutorService3.1 优点3.2 缺点3.3 示例代码片段 &#x1f496;The Begin&#x1f496;点点关注&a…

Vue使用FullCalendar实现日历/周历/月历

Vue使用FullCalendar实现日历/周历/月历 需求背景&#xff1a;项目上遇到新需求&#xff0c;要求实现工单以日/周/月历形式展示。而且要求不同工单根据状态显示不同颜色&#xff0c;一个工单内部&#xff0c;需要以不同颜色显示三个阶段。 效果图 日历 周历 月历 安装插件…

Spring之Spring Bean的生命周期

Spring Bean的生命周期 通过BeanDefinition获取bean的定义信息调用构造函数实例化beanBean的依赖注入处理Aware接口&#xff08;BeanNameAware、BeanFactoryAware、ApplicationContextAware&#xff09;Bean的后置处理器BeanPostProcessor-前置初始化方法&#xff08;Initiali…