003、认识启动函数,找到用户入口
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:全书总览 · 上一章:基本数据类型 · 下一章:表达式求值
PE 入口不等于 mainPE 可选头中的 AddressOfEntryPoint 指向映像的入口 RVA:
1入口虚拟地址 = ImageBase + AddressOfEntryPoint
Windows 把控制权交给入口后,通常先执行 C/C++ 运行库启动代码,而不是立刻进入用户编写的 main。
逆向时要区分加载器入口、CRT 启动函数和用户入口三个层次。
CRT 启动代码负责什么典型职责包括:
初始化安全 Cookie 和运行库状态。
初始化全局及静态 C++ 对象。
准备命令行参数和环境变量。
选择并调用 main、wmain、WinMain 或 wWinMain。
处理返回值、退出函数和清理逻辑。
12345PE 入口 → CRT 初始化 → 全局构造 → 用户入口 → 全局析构与退出
寻找 main 的方法从入口 ...
002、基本数据类型的表现形式
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:全书总览 · 上一章:工具与环境 · 下一章:启动函数与用户入口
类型不会完整保存在机器代码里反汇编通常只能直接告诉我访问宽度和指令语义,不能自动还原源码类型。
1mov eax, dword ptr [ebp+8]
这里只能确定读取 4 Byte。它可能是 int、unsigned int、指针、枚举或浮点数的原始位模式,必须结合后续使用判断。
类型恢复是一组证据的交叉验证,不是由单条 MOV 指令决定。
整数与符号有符号和无符号整数采用相同位模式,差异体现在解释和指令选择上。
线索
有符号倾向
无符号倾向
扩展
MOVSX
MOVZX
除法
IDIV
DIV
乘法
IMUL
MUL
大小比较
JL/JG
JB/JA
整数溢出时:
CF 主要描述无符号进位或借位。
OF 主要描述有符号结果超出范围。
浮点数浮点数采用 IEEE 754 编码。常见观察点:
x ...
001、熟悉工作环境和相关工具
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:全书总览 · 下一章:基本数据类型
工具不是主角逆向分析的主线是提出假设并验证,工具只是观察程序的不同窗口。
工具
主要用途
适合回答的问题
Visual Studio
编译、源码调试、查看编译器输出
一段 C++ 会生成什么代码
GCC / MinGW
对比不同编译器和 ABI
同一语法在不同工具链下是否相同
OllyDbg
经典 32 位用户态动态调试
指令执行时寄存器和栈如何变化
x64dbg
x86/x64 用户态动态调试
断点、模块、内存和调用跟踪
WinDbg
用户态、内核态和转储分析
异常、线程、符号和系统结构
IDA
静态反汇编、函数识别、交叉引用
程序整体结构和调用关系是什么
静态分析负责建立全局地图,动态调试负责验证某一次真实执行。
建议实验矩阵同一份最小代码至少保留四个构建:
12x86 Debug x86 Releasex64 ...
000、《C++反汇编与逆向分析技术揭秘》读书笔记总览
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:读书拾贝 · 知识库首页
这组笔记怎么用这组内容以第二版 18 章目录为骨架,属于我阅读前使用的结构化底稿。笔记不是原书正文的替代品,也不代表作者原话;阅读时需要结合书中示例、自己的编译结果和调试记录不断修正。
最有效的阅读方法是:先读一节,再亲自编译最小示例,最后关闭源码只看反汇编复述语义。
推荐每章完成四轮:
看目录和本章问题,建立预期。
阅读原书,标记与笔记不一致或遗漏之处。
使用 Debug、Release、x86、x64 四种组合观察差异。
把自己的截图、地址变化和结论补回笔记。
正版电子书
得到电子书:第2版
当当云阅读:第1版
豆瓣阅读:第1版
公开笔记与校对资料这些资料主要用于交叉核对章节结构、实验思路和旧版反汇编现象,不直接复制原文。多数内容基于第 1 版、VC6 或 32 位环境,阅读时需要结合当前编译器重新验证。
Aye’s house:第5~10章整合笔记
博客园:构 ...
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 原理Ge ...
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、图标资源提取应用程序图标往往由图标组和多个图标图像组成。复盘时要区分:
项
说明
图标组
描述有哪 ...
0221、Windows 逆向提升:PDB、TLS 与加载风险评估
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分把 PE 分析延伸到符号、线程局部存储和加载风险评估。PDB 能让地址恢复成更可读的符号;TLS 能在线程创建/退出等时机执行回调;加载风险评估则把前面解析到的字段整理成安全报告。
1、内容范围
小节
内容
复盘点
16.9 - 18.7
DEBUG / PDB
调试目录、PDB 结构、DIA SDK、符号、类型、函数、变量
18.8 - 20.3
TLS
线程创建、同步互斥、TLS 静态/动态、TLS 回调
20.4 - 21.4
DRAW / LOAD
PE 结构图、加载风险评估、检测手法和报告汇总
2、调试目录与 PDBPE 的调试目录可能记录 PDB 路径、GUID、Age 等信息。PDB 保存符号、类型、函数、源文件等调试信息。
数据
作用
PDB 路径
编译时符号路径
GUID/Age
匹配正确 PDB
函数符号
地址到函数名
类型信息
结构体、类、枚举
源码行号
地址到源文件位置
3、DIA SDKDIA SDK 可用于读取 P ...
0219、Windows 逆向提升:无模块加载与模块隐藏原理
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分涉及无模块加载、反射式加载、模块隐藏等双用途内容。这里只按 PE 加载机制、防护分析和检测复盘来整理,不写成可直接用于隐蔽加载的实现流程。
1、内容范围
小节
内容
复盘点
08.7 - 10.0
无模块加载
文件缓存、内存映像、导入修复、重定位修复、自加载流程
10.1 - 12.1
模块隐藏
反射式注入思路、私有映像、跨进程数据、远程入口点
2、文件状态与内存映像PE 文件不能简单按文件字节直接执行,加载器会按节表把文件状态转换成内存状态。
状态
特点
文件缓存
按 FileAlignment 排列
内存映像
按 SectionAlignment 排列
节区映射
每个节从文件偏移映射到 RVA
3、手动加载需要处理什么合法加载器会完成很多工作。复盘手动加载思路时,要理解这些工作点:
工作
说明
映像拉伸
把文件节映射到内存布局
导入修复
加载依赖 DLL,填充 IAT
重定位修复
基址变化时修正绝对地址
入口调用
满足前置 ...
0217、Windows 逆向提升:PE 解析框架与节区
返回:Windows 逆向提升篇 · Windows 逆向总目录
这一部分把 PE 头结构继续推进到“能写解析框架”。核心是:从文件缓冲区出发,安全地找到 DOS 头、NT 头、可选头、节表,并能在 RVA、VA、FOA 之间转换。
1、内容范围
小节
内容
复盘点
02.5 - 03.1
PE 解析工具框架
控制台初始化、用户指令、二进制写入、DOS/NT 定位
03.2 - 04.4
NT / OptionalHeader
FileHeader、Magic、ImageBase、RVA、OEP、Alignment、SizeOfImage
04.5 - 05.5
SECTION 节区
节区定位、属性、对齐、RVA_TO_FOA、文件/内存状态转换
2、解析框架PE 解析工具建议先拆成这些模块:
模块
作用
文件读取
把 PE 文件读入缓冲区
头部校验
检查 MZ、PE 签名和边界
结构定位
定位 DOS、NT、Optional、Section
地址换算
RVA、VA、FOA 互转
指令交互
输入命令查看字段
日志输出
...
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、相关字符串和表
...




