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; printf(&quo ...
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 可以把二进制字节流解析成指令 ...
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++ 多态对象模型上。对象中通常保存虚表指针,虚表里保存虚函数地址。如果虚表指针或虚表项被替换,原本的虚函数调用就可能被导向新的逻辑。
项目
复盘重点
对象模型
对象地址、虚表指针、虚函数表项之间的关系
...
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 数据提 ...
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 是常见调试标志,很多样本会直接读取这个字段来判断是否 ...
0245、Windows 逆向攻防:异常与对象查询反调试
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 16.4 - 16.9。这一组内容把反调试从“看标志位、看断点”推进到“观察异常处理差异和系统对象查询”。异常类反调试的关键是:同一个异常,在有无调试器、不同调试器、不同异常处理链下,可能表现不同。
1、内容范围
小节
主题
复盘重点
16.4
异常反调试检测 1:Filter
异常过滤表达式、处理路径和返回值差异
16.5
异常反调试检测 2:Interrupt
中断类异常、调试器接管和事件表现
16.6
异常反调试检测 3:Interrupt
类似异常在不同上下文下的分发差异
16.7
异常反调试检测 4:Trap
Trap Flag、单步异常和调试器行为
16.8
异常反调试检测 5:Guard
Guard Page、访问异常和页保护状态
16.9
对象查询反调试检测
调试对象、调试端口和系统对象查询
2、逐节复盘16.4 异常过滤表达式异常过滤表达式决定异常是否被当前处理器接收。样本可能通过故意触发异常,再观察过滤器、调试器和系统分发路径来判断环境。
项目
说 ...
0244、Windows 逆向攻防:断点类反调试
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 16.0 - 16.3。断点是调试器的核心能力,反调试自然也会围绕断点做检测。学习重点是区分软件断点、硬件断点、内存断点的痕迹分别在哪里,以及样本如何通过异常或状态差异感知它们。
1、内容范围
小节
主题
复盘重点
16.0
硬件断点反调试检测
调试寄存器、线程上下文和异常事件
16.1
软件断点反调试检测
INT 3 字节、代码完整性和断点恢复
16.2
内存断点反调试检测
页保护、访问异常和内存监控
16.3
动态监测与反调试
运行时状态变化、时间窗口和事件关联
2、逐节复盘16.0 硬件断点反调试检测硬件断点依赖 CPU 调试寄存器。它不一定修改目标代码字节,但会改变线程上下文。复盘时要关注当前线程和相关线程的调试寄存器状态。
项目
说明
DR0-DR3
记录断点地址
DR6
记录断点命中状态
DR7
控制断点启用和类型
线程上下文
断点通常与具体线程有关
16.1 软件断点反调试检测软件断点常通过替换目标地址处的指令字节来触发异常。典型表现 ...
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 可以用来查询系统对象,也可以订阅系统事件。常见对象包括进程、服务、驱动、网络适配器、系统版本等。安全分析里经 ...
