0222、Windows 逆向提升:PE 修改器与 CE 扫描器项目
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分是提升篇项目实践:PE 修改器和类似 CE 的内存扫描器。这里按授权实验、工具设计和防护复盘整理,只记录结构、边界和检测视角,不写未授权修改第三方程序的流程。
1、内容范围
小节
内容
复盘点
21.5 - 24.2
PE Modifier
删除 DOS Stub、新增节、扩大节区、移动导入/导出表、入口点修改、ShellCode 框架边界
24.3 - 26.4
CE 扫描器项目
进程列表、附加进程、模块/内存区间、首次扫描、二次扫描、结果修改
26.5 - 26.7
路线规划
Windows 平台开发、逆向体系、攻防篇前置
2、PE 修改器项目PE 修改器的核心是“修改字段前先理解字段之间的联动”。不能只改一个值,还要同步相关大小、偏移、对齐和目录项。
操作
联动字段
新增节
节数量、节表、SizeOfImage、对齐
扩大节区
VirtualSize、SizeOfRawData、文件大小
移动导出表
DataDirectory、RVA、相关字 ...
0218、Windows 逆向提升:导出表、导入表与重定位
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分是 PE 数据目录里最常用的三块:导出表、导入表、重定位表。导出表回答“我提供什么函数”,导入表回答“我依赖什么函数”,重定位回答“加载地址变了,哪些地方要修正”。
1、内容范围
小节
内容
复盘点
05.6 - 07.0
导出表
DLL 导出、导出地址表、名称表、序号表、GetProcAddress
07.1 - 07.7
导入表
IAT/INT、导入名称、序号导入、导入地址修复
07.8 - 08.6
重定位
基址差值、重定位块、重定位项、模拟修复
2、导出表导出表让别的模块能通过名称或序号找到 DLL 中的函数。
结构
作用
Export Directory
导出表总入口
AddressOfFunctions
函数地址表
AddressOfNames
函数名称表
AddressOfNameOrdinals
名称对应序号表
三表联动是导出表复盘重点:名称 -> 序号 -> 函数 RVA。
3、GetProcAddress 原理GetP ...
0220、Windows 逆向提升:资源、图标、异常与证书
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分继续展开 PE 数据目录:资源目录保存图标、对话框、版本信息等;异常目录支持 x64 异常展开;安全证书用于签名校验。这些内容不是主代码,但对分析软件身份、界面资源和异常处理很重要。
1、内容范围
小节
内容
复盘点
12.2 - 14.4
资源与图标
资源目录层级、GUI SDK、图标组、ICO 提取
14.5 - 16.5
异常机制
SEH、VEH、x64 UNWIND、Runtime Function
16.6 - 16.8
安全证书
证书目录、特殊地址和模块证书解析
2、资源目录层级资源目录通常是三层:
1类型 -> 名称/ID -> 语言 -> 数据
常见资源类型:
类型
内容
ICON
图标数据
GROUP_ICON
图标组
VERSION
版本信息
DIALOG
对话框
STRING
字符串表
3、图标资源提取应用程序图标往往由图标组和多个图标图像组成。复盘时要区分:
项
说明
图标组
描述有哪些尺寸/ ...
0212、Windows 逆向入门:C++ 对象模型逆向
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分专门复盘 C++ 对象在二进制里的样子。源码里的类、继承、多态、虚函数,进入反汇编后会变成对象地址、成员偏移、虚表指针、间接调用和构造析构序列。
1、内容范围
小节
内容
复盘点
16.7 - 16.9
对象模型与 thiscall
对象存储、成员偏移、this 指针
17.0 - 17.3
对象传参返回
调用约定、类对象返回、编译器优化
17.4 - 17.9
构造析构与拷贝
构造触发、堆对象、全局对象、深拷贝
18.0 - 18.2
构造限制与常成员
默认参数、静态成员、const 成员函数
18.3 - 18.7
继承对象模型
单继承、多继承、菱形继承
18.8 - 19.4
多态与虚表
虚函数指针、虚表、多态调用、纯虚对象
19.5 - 19.6
模板使用与特化
模板实例化、特化和代码拷贝
2、对象模型普通 C++ 对象通常只保存成员变量;成员函数在代码区。调用成员函数时会传入 this 指针。
12345对象内存:[成员变量 1][成员变量 2][...]成员函 ...
0215、Windows 逆向入门:调试器项目
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分是入门篇项目:做一个简化调试器。目标不是替代成熟调试器,而是理解 Windows 调试事件如何流转,进程、线程、模块、异常、断点和日志如何组织。
1、内容范围
小节
内容
复盘点
26.4 - 26.9
调试器框架
打开/附加进程、调试事件、用户交互
27.0 - 27.9
调试事件处理
创建进程、退出、异常、日志、转储
28.0 - 28.9
线程信息
线程上下文、TEB、栈、时间、模块定位
29.0 - 29.9
模块信息
模块结构、文件映射、导入导出、卸载、异常派发
30.0 - 31.1
异常与断点
SEH/VEH、断点设置/移除、单步执行
31.2 - 31.5
路线收尾
开发篇、逆向篇、调试篇和提升方向
2、调试器基本循环简化模型:
12345启动/附加目标进程等待调试事件识别事件类型记录日志或处理事件继续目标进程
3、常见调试事件
事件
复盘内容
创建进程
目标路径、入口点、主线程
创建线程
线程 ID、入口地址
...
0213、Windows 逆向入门:MASM 汇编基础
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分用 MASM 把汇编从“反汇编阅读”推进到“能写最小实验”。写汇编不是为了替代 C/C++,而是为了更准确理解数据定义、调用约定、结构体布局和伪指令。
1、内容范围
小节
内容
复盘点
19.7 - 19.9
MASM 基础
保留字、标识符、伪指令、操作数格式
20.0 - 20.9
数据定义
DB/DW/DD、EQU、地址计数器、OFFSET、ALIGN
21.0 - 21.8
过程与参数
TYPE/LENGTHOF/SIZE、PROTO、INVOKE、ADDR、USES、LOCAL
21.9 - 22.7
条件和循环
.IF、.WHILE、.REPEAT、JCC
22.8 - 23.3
STRUCT/UNION/MACRO/API
结构体、联合体、宏和 Win32 API 调用
2、标识符与伪指令MASM 里伪指令不是 CPU 执行的机器指令,而是给汇编器看的说明。
类型
例子
作用
...
0214、Windows 逆向入门:x64 基础与系统机制
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分从 x86 过渡到 x64。x64 不只是寄存器变宽,还涉及调用约定、栈布局、虚拟地址、WOW64、权限级别和页表转换等系统机制。
1、内容范围
小节
内容
复盘点
23.4 - 23.9
x64 路线与架构差异
指令拓展、WOW64、寄存器、虚拟地址、调用约定
24.0 - 24.5
x64 栈与地址
参数传递、栈空间、长跳、全局变量、指针宽度
24.6 - 24.9
手册与权限
Intel 手册、CPUID、Ring0/Ring3、标志寄存器
25.0 - 25.9
段/控制/调试寄存器
段选择子、描述符、CR0/CR2、页表、调试寄存器、地址大小
26.0 - 26.3
断点和动态调试
断点类型、单步、基础路线收尾
2、x64 寄存器x64 增加了寄存器数量和宽度。
类型
示例
通用寄存器
RAX、RBX、RCX、RDX、R8-R15
指针寄存器
RSP、RBP、RIP
SIMD 寄存器
XMM、YMM
标志寄 ...
0211、Windows 逆向入门:数组、指针与结构体逆向
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分把高级语言数据结构翻译成内存布局。数组、指针、结构体和对象成员,在反汇编里最后都会变成地址计算、偏移访问和间接调用。
1、内容范围
小节
内容
复盘点
14.0 - 14.4
数组逆向
数组布局、寻址公式、多维数组、越界覆盖
14.5 - 14.8
移位与数据转换
SHL/SHR/SAL/SAR、二进制转换、数据完整性
14.9 - 15.2
数组地址与多维数组
数组地址传递、返回、指针数组、二维数组
15.3 - 16.1
指针逆向
指针赋值、解引用、运算、多级指针、安全性
16.2 - 16.4
函数指针与段机制
CALL 编码、函数指针、段选择子
16.5 - 16.9
结构体与 this
结构体布局、对象模型、成员偏移、thiscall
2、数组内存布局一维数组是连续内存。
1int nums[4] = {1, 2, 3, 4};
寻址公式:
1元素地址 = 数组基址 + 下标 * 元素大小
反汇编中常看到:
1m ...
0207、Windows 逆向入门:堆栈、CALL/RET 与函数逆向
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分围绕“函数怎么被调用、参数怎么传、返回地址怎么保存”。理解堆栈之后,调试器里的调用栈、返回地址、局部变量、参数、异常回溯就都能串起来。
1、内容范围
小节
内容
复盘点
06.9
线程栈结构
栈顶、栈底、增长方向和线程私有栈
07.0 - 07.3
PUSH/POP/PUSHAD/POPAD/PUSHFD/POPFD
保存数据、寄存器和标志位
07.4
CALL 与 RET
返回地址、函数入口、返回流程
07.5
MOV
数据移动和参数/局部变量访问
07.6
REP 与 STOS
字符串/批量内存操作
07.7 - 07.9
函数调用堆栈图
栈帧、嵌套调用、回溯
08.5 - 08.9
参数、返回值和调用约定
参数位置、返回寄存器、还原代码
2、线程栈结构每个线程都有自己的栈。栈常用于保存函数参数、返回地址、局部变量和保存现场。
1234567高地址 ... 参数 返回地址 保存的 EBP/R ...
0209、Windows 逆向入门:数据、全局变量与编码逆向
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分专门复盘“数据如何在二进制里表现”。同一串字节,可能是整数、小数、字符、指针、结构体字段或机器指令。逆向时要结合上下文解释字节,而不是看到十六进制就直接下结论。
1、内容范围
小节
内容
复盘点
09.4
整数类型数据传输 MOV
数据宽度、寄存器和内存
09.5
有符号整数存储与端序
补码、小端序、符号解释
09.6
整数数据溢出
截断、回绕、标志位
09.7
MOVZX / MOVSX
零扩展和符号扩展
09.8
全局变量与局部变量特征
地址区域、访问方式、生命周期
09.9
PE 节区转文件数据并修改
文件偏移和内存地址关系
10.0 - 10.3
小数编码与指令
IEEE、FPU、SSE、AVX 入门
10.4 - 10.8
字符编码与字符串指令
区域设置、截断、MOVS/STOS/LODS
10.9 - 11.1
数字与字符安全
编码、校验和安全边界
2、MOV 与数据宽度mov 只是搬运数据,不关心语义。真正决定语义的是宽 ...





