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元素地址 = 数组基址 + 下标 * 元素大小
反汇编中常看到:
1mov eax, [base ...
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 执行的机器指令,而是给汇编器看的说明。
类型
例子
作用
标识符
main, buffer
给地址或数据起名
助记符
mov ...
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][...] ...
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
标志寄存器
RFLAGS
3 ...
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、入口地址
加载 DLL
模块基 ...
0205、Windows 逆向入门:寄存器、标志位与内存基础
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分开始真正进入 CPU 状态:寄存器保存当前执行环境,标志位保存运算结果特征,内存保存代码和数据。逆向时看懂这三类信息,就能知道程序“现在执行到哪里、刚才算出了什么、接下来会跳到哪里”。
1、内容范围
小节
内容
复盘点
02.5
寄存器
通用寄存器、段寄存器、指令指针寄存器
02.6
通用寄存器对应关系
EAX/AX/AH/AL、RAX/EAX/AX/AL 的包含关系
02.7
寄存器包含关系测试
修改低位寄存器对高位的影响
02.8
段寄存器特性
CS/DS/SS/ES/FS/GS 的基本用途
02.9
指令指针寄存器
EIP/RIP 保存下一条指令地址
03.0 - 03.8
标志寄存器
CF、PF、AF、ZF、SF、DF、OF 与 EFLAGS
03.9 - 04.4
内存基础
内存特性、内存管理、端序、读写和寻址
2、通用寄存器寄存器是 CPU 内部速度最快的小容量存储区域。入门阶段先掌握常见用途,不必一开始背完整架构手册。
x86
常见用途
x64 ...
0206、Windows 逆向入门:汇编框架与基础指令
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分把汇编从“单条指令”放回“程序框架”里看。逆向时不只要知道 add 是加法,还要知道代码段、数据段、入口点、调用 API 和程序退出之间的关系。
1、内容范围
小节
内容
复盘点
04.5
C 语言控制台程序
高级语言程序的入口、调用和退出
04.6
汇编程序框架
数据段、代码段、入口点、调用 API
04.7
程序指令集
指令、操作数、寄存器和内存
04.8
工作模式
实模式、保护模式、用户态理解
04.9
动态调用与函数声明
API 声明、导入与调用
05.0 - 05.3
段定义与入口周期
数据段、代码段、入口点
05.4 - 06.5
算术与位运算
ADD、SUB、MUL、DIV、AND、OR、XOR、NOT
06.6 - 06.8
操作数与调试
操作数类型、课程路线和 VS 调试
2、C 控制台程序与汇编框架C 程序通常从 main 开始,但真正的进程入口还包括运行库初始化。入门阶段可以先把它简化成:
1程序入口 -> 初始化运行环境 -> ...
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 只是搬运数据,不关心语义。真正决定语义的是宽度和后续使用方式。
12 ...
0208、Windows 逆向入门:DBG/IDA 与函数结构分析
返回:Windows 逆向入门篇 · Windows 逆向总目录
这一部分从“看指令”进入“用工具复盘函数结构”。IDA 偏静态分析,DBG/x64dbg/WinDbg 偏动态调试。两者结合,才能把函数边界、交叉引用、参数、返回值和调用栈看清楚。
1、内容范围
小节
内容
复盘点
08.0
代码堆栈回溯栈帧
从栈帧定位调用链
08.1
模块符号信息解析
PDB、符号名和模块信息
08.2
DBG 工具下载与配置
调试器环境、符号路径、插件
08.3 / 09.0
DBG 逆向调试技巧
断点、单步、内存、寄存器
08.4
IDA 交叉引用回溯
Xref、函数调用关系
08.5 - 08.9
函数参数与返回分析
栈参数、寄存器返回、调用约定
09.1 - 09.3
还原思路与堆栈逃逸
控制流、栈异常、线程栈信息
2、IDA 静态分析IDA 更适合先看整体结构。
功能
用途
Functions
查看函数列表
Strings
查找字符串入口
Imports
查看导入 API
Xrefs
追踪谁引用了某个函数/字符串
...
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/RBP 局部变量低地址
x86/x64 下栈通常向低地址增长。
...
