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 ...
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 ...
0118、安全开发篇(三):函数增强与封装入门
返回:C++ 面向对象基础目录 · 安全开发总目录
这一章一半是函数增强,一半是封装入门。函数增强让 C++ 接口更灵活;封装则把数据和行为放到一起,为后面的对象模型、构造析构和多态打基础。
3.2 默认参数默认参数让调用者可以省略常用值。
12345#include <iostream>void connect(const std::string &host, int port = 80) { std::cout << host << ":" << port << std::endl;}
复盘重点:默认参数通常写在声明处,不要在声明和定义里重复写不同默认值。
3.3 函数重载函数重载允许同名函数根据参数列表区分。
12int add(int a, int b) { return a + b; }double add(double a, double b) { return a + b; }
能否重载
原因
参数个 ...
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 ...
0240、Windows 逆向攻防:ETW 事件跟踪
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 13.6 - 14.3。ETW 是 Windows 里很重要的事件跟踪机制,适合从防护和审计角度观察进程、线程、模块、文件、网络、内核行为等事件。前面的攻防技术如果只看单点,很容易漏掉;ETW 的价值是把行为放进时间线。
1、内容范围
小节
主题
复盘重点
13.6
Event Tracing for Windows
Provider、Session、Event、Consumer 的基本关系
13.7
日志信息记录管理
日志格式、字段规范、时间戳和输出策略
13.8
主线程交互框架及初始化流程
命令输入、会话配置、启动停止和资源状态
13.9
事件跟踪记录初始化
选择 Provider、设置过滤条件和准备回调
14.0
管理事件启动与释放资源
开启会话、停止会话、释放句柄和异常清理
14.1
进程事件监听及回调消息处理
监听进程创建、退出和相关事件
14.2
监听回调派遣及 opcode 过滤
按事件类型、opcode 和关键字段分流
14.3
进程监听及 event 数据提取 ...
0242、Windows 逆向攻防:反调试机制总览
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 14.8 - 15.3。反调试不是一个单独技巧,而是一组围绕“程序是否处在调试环境中”的检测与干扰思路。学习时要先理解 Windows 调试模型:调试器如何附加进程、内核如何维护调试对象、调试事件如何派发、被调试进程和调试器之间有什么关系。
1、内容范围
小节
主题
复盘重点
14.8
调试器开发与静态动态反调试思路
调试器工作模型、静态检查与动态行为检查
14.9
调试器附加进程执行分析
附加进程后事件、线程和句柄关系的变化
15.0
内核调试对象创建及调试进程句柄
DebugObject、调试端口和内核对象关系
15.1
被调试进程与调试对象关联
被调试进程如何与调试器建立关系
15.2
调试消息封装派遣与调度机制
创建进程、异常、线程、模块加载等调试事件
15.3
应用层反调试思路及检测方向
PEB、API 查询、异常、断点、时间差等方向
2、逐节复盘14.8 调试器开发与静态动态反调试思路调试器的基本工作是接收目标进程产生的调试事件,并让用户观察或控制执行过程。反调试则试图 ...
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 可以用来查询系统对象,也可以订阅系统事件。常见对象包括进程、服务、驱动、网络适配器、系统版本等。安全分析里经常用它 ...
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++ 多态对象模型上。对象中通常保存虚表指针,虚表里保存虚函数地址。如果虚表指针或虚表项被替换,原本的虚函数调用就可能被导向新的逻辑。
项目
复盘重点
对象模型
对象地址、虚表指针、虚函数表项之间的关系
...





