0120、安全开发篇(三):运算符重载、继承与多态
返回:C++ 面向对象基础目录 · 安全开发总目录
这一章是 C++ 面向对象最接近逆向分析的一部分:对象布局、继承层次、虚函数表和动态绑定都会在二进制里留下痕迹。学习时既要能写语法,也要能想象对象在内存中的样子。
6.6 - 7.6 运算符重载运算符重载让自定义类型也能使用 +、==、[]、<< 等语法。它应该让代码更自然,而不是制造难懂的副作用。
1234567891011121314151617181920212223#include <iostream>class Point {public: Point(int x, int y) : x(x), y(y) {} Point operator+(const Point &other) const { return Point(x + other.x, y + other.y); } bool operator==(const Point &other) const { re ...
0119、安全开发篇(三):构造析构与对象特性
返回:C++ 面向对象基础目录 · 安全开发总目录
构造析构是 C++ 对象生命周期的核心。对象什么时候出生、资源什么时候拿到、什么时候释放、复制时是深拷贝还是浅拷贝,这些都直接影响稳定性和安全性。
4.4 默认构造函数默认构造函数用于创建对象时不传参数。
1234567class Buffer {public: Buffer() : size(0) {}private: int size;};
4.5 带参构造函数带参构造可以在对象创建时建立有效状态。
1234567class User {public: explicit User(int id) : id(id) {}private: int id;};
explicit 可以避免一些隐式转换带来的误用。
4.6 拷贝构造函数拷贝构造在用一个对象初始化另一个对象时触发。如果类里有堆资源,默认浅拷贝可能出问题。
123456789class Person {public: Person(const Pers ...
0121、安全开发篇(三):项目:数据信息管理系统
返回:C++ 面向对象基础目录 · 安全开发总目录
这一部分是 C++ 面向对象基础的项目实践:做一个控制台数据信息管理系统。它的重点不是界面多复杂,而是把类、对象、容器、菜单、输入校验、数据存储和功能分支组织成一个能维护的小项目。
09.6 项目:数据信息管理系统项目可以按三层理解:
层次
内容
数据层
学生、用户、记录等实体对象
管理层
添加、删除、查询、分类、保存
交互层
菜单、输入、提示、错误处理
09.7 - 09.8 菜单设计菜单要清楚、稳定、可重复执行。每个选项对应一个功能,不要把所有逻辑塞进 main。
123456enum class MenuAction { Add = 1, Remove = 2, List = 3, Exit = 0};
复盘重点:输入不是永远合法,菜单必须处理非法选项。
09.9 功能分支流程处理功能分支可以用 switch,也可以用函数表或命令对象。入门阶段先把每个功能拆成函数。
1234void show_menu();void add_record();void r ...
0114、安全开发篇(二):指针进阶、文件与项目实践
返回:C/C++ 进阶提升目录 · 安全开发总目录
这一部分把进阶指针、字符串函数重构、变量生命周期、文件读写和控制台项目放在一起整理。它更像一章“把 C 语言基础变成项目能力”的复盘:既要懂指针,也要能把数据保存下来,还要能用链表或结构体维护程序状态。
4.0 指针数组步长指针数组是“数组里的每个元素都是指针”。常见于字符串列表、菜单项、回调表。
1234567891011#include <stdio.h>int main(void) { const char *items[] = {"add", "delete", "search"}; for (int i = 0; i < 3; ++i) { printf("%s\n", items[i]); } return 0;}
复盘重点:items 是数组,items[i] 是指针,items[i][0] 才是字符。
4.1 ...
0112、安全开发篇(二):调用栈与函数高级
返回:C/C++ 进阶提升目录 · 安全开发总目录
这一章从“函数能调用”推进到“函数到底怎么调用”。后面学逆向、调试、栈回溯、崩溃分析、Hook 参数读取时,调用栈和调用约定会反复出现。
2.0 汇编指令速览这节先把常见汇编指令当作调试语言来认识,不急着背全。最重要的是能在反汇编窗口里看懂大概:谁把数据放进寄存器,谁压栈,谁跳转,谁调用函数,谁返回。
指令
含义
复盘重点
mov
数据传送
看清源操作数和目的操作数
push / pop
压栈 / 出栈
观察参数、返回地址、寄存器保存
call
调用函数
会压入返回地址并跳到目标函数
ret
函数返回
从栈中取回返回地址
add / sub
加减运算
常用于调整栈顶和整数计算
cmp / jcc
比较和条件跳转
对应 if、循环和分支
2.1 函数调用堆栈函数调用时,栈里保存了返回地址、参数、局部变量和部分寄存器现场。调试时如果能看懂栈,就能知道“现在从哪里来、准备回哪里去、参数大概是什么”。
栈中内容
作用
返回地址
当前函数执行完 ...
0113、安全开发篇(二):内存管理与指针限定
返回:C/C++ 进阶提升目录 · 安全开发总目录
这一章围绕“指针到底能不能安全地访问内存”展开。C 语言给了很大的自由,也把边界检查的责任交给了程序员。后面做安全开发时,很多 bug 都会落在空指针、野指针、越界、重复释放和类型解释错误上。
3.0 内存属性探测内存不仅有地址,还有属性:能不能读、能不能写、能不能执行、属于栈还是堆、是否映射文件。安全分析时看到一个地址,第一反应应该是问:这个地址在哪个区域?权限是什么?为什么会被访问?
属性
复盘问题
可读
读这个地址是否会异常
可写
是否允许修改内容
可执行
是否可能被当成代码执行
私有/映射
来自堆、栈、模块还是映射文件
3.1 void * 指针void * 是“无类型指针”,可以保存任意对象地址,但不能直接解引用。它常用于通用接口,比如内存拷贝、回调参数、容器数据。
123456789101112#include <stdio.h>void print_int(void *data) { int *p = (int *)data; prin ...
0239、Windows 逆向攻防:VTable、VEH 与断点类 Hook
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 13.2 - 13.5。前面的 IAT Hook 和 Inline Hook 都比较容易从表项或代码字节中看到痕迹;这一组内容开始转向对象模型、异常分发和断点机制。复盘时重点看“调用路径被谁接管了”和“异常/断点为什么能改变控制流”。
1、内容范围
小节
主题
复盘重点
13.2
VTable Hook
C++ 虚函数表、对象首部、虚函数调用路径和表项完整性
13.3
VEH 异常注册处理拦截
向量化异常处理、异常分发顺序和回调链观察
13.4
硬件断点及无痕 Hook
调试寄存器、执行断点、线程上下文和检测难点
13.5
无痕钩子实现及瞬时执行
临时修改、短窗口执行、恢复状态和行为关联
2、逐节复盘13.2 VTable HookVTable Hook 建立在 C++ 多态对象模型上。对象中通常保存虚表指针,虚表里保存虚函数地址。如果虚表指针或虚表项被替换,原本的虚函数调用就可能被导向新的逻辑。
项目
复盘重点
对象模型
对象地址、虚表指针、虚函数表项之间的关系
...
0238、Windows 逆向攻防:反汇编引擎
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 12.5 - 13.1。反汇编引擎不是为了“炫技”,而是为了把一段原始机器码还原成可观察、可校验、可讨论的指令序列。前面 Hook 章节经常提到指令长度、边界对齐、RIP 相对寻址和中转跳转,这一组内容就是在补这个基础。
1、内容范围
小节
主题
复盘重点
12.5
Capstone
认识反汇编引擎的输入、输出和架构模式选择
12.6
用户数据交互及输入结构解析
把用户输入整理成明确的字节流、地址、架构和输出格式
12.7
数据转换及安全性检查
十六进制字符串、字节数组、长度、边界和非法字符校验
12.8
反汇编数据解析及格式输出
输出地址、机器码、助记符、操作数和错误信息
12.9
硬编码反汇编转换
对固定字节序列做结构化拆解,观察指令边界
13.0
反汇编引擎双版本兼容
兼容不同架构、不同库版本和不同输出字段
13.1
XEDParse
了解另一类解析方案,比较语法、准确性和适用场景
2、逐节复盘12.5 CapstoneCapstone 可以把二进制字节流解析成指令。复盘 ...
0243、Windows 逆向攻防:调试标志位反调试
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 15.4 - 15.9。调试标志位反调试是最常见、也最适合作为入门复盘的一类:它不一定复杂,但能帮自己建立“系统结构字段、API 查询、运行状态差异”之间的联系。
1、内容范围
小节
主题
复盘重点
15.4
调试标志位反调试检测 1
PEB BeingDebugged 这类直接标志
15.5
调试标志位反调试检测 2
DebugPort / DebugObject 等查询类信息
15.6
调试标志位反调试检测 3
进程信息查询与返回值差异
15.7
调试标志位反调试检测 4
系统调试状态、内核调试相关信息
15.8
调试标志位反调试检测 5
NtGlobalFlag、堆调试标志等结构字段
15.9
调试标志位反调试检测 6
Heap Flag、校验位和综合判断
2、逐节复盘15.4 PEB BeingDebugged 类标志PEB 是每个用户态进程都能访问的重要结构,里面保存了进程环境相关信息。BeingDebugged 是常见调试标志,很多样本会直接读取这个字段来判断 ...
0241、Windows 逆向攻防:WMI 事件监控
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 14.4 - 14.7。WMI 更偏系统管理和事件订阅,适合做进程、服务、系统信息和安全事件的观察入口。和 ETW 相比,WMI 更接近“查询与订阅”,学习重点是 COM 初始化、命名空间连接、查询语句和事件回调。
1、内容范围
小节
主题
复盘重点
14.4
Windows Management Instrumentation
WMI 的用途、命名空间、类和事件订阅
14.5
QueryInterface & Indication
COM 接口查询、事件指示对象和回调理解
14.6
CoCreateInstance & Connect
创建 WMI 服务对象并连接命名空间
14.7
InstanceCreationEvent
进程创建事件监听、字段提取和日志记录
2、逐节复盘14.4 Windows Management InstrumentationWMI 可以用来查询系统对象,也可以订阅系统事件。常见对象包括进程、服务、驱动、网络适配器、系统版本等。安全分析里经常用它 ...





