0234、Windows 逆向攻防:特征码搜索
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 09.2 - 10.0,主题是特征码搜索。它既可以用于逆向定位,也可以用于防护检测。复盘时不要只看“匹配到了什么”,还要看特征是否稳定、误报是否可控、扫描范围是否合理。
1、内容范围
小节
主题
09.2
硬编码数据基本格式及可变量
09.3
通配符与模糊搜索
09.4
程序框架设计与数据管理
09.5
文件结构扫描解析
09.6
特征码字符串提取转换
09.7
Pattern 匹配数组封装
09.8
扫描模式与回调过滤
09.9
匹配结果写回
10.0
结果解析和效率测试
1.1、逐节复盘
小节
主要内容
复盘点
09.2
认识特征码中固定字节和可变量的区别
记录哪些字节稳定、哪些字段会随版本或地址变化
09.3
使用通配符表达模糊匹配
关注误报率、匹配长度和上下文校验
09.4
设计扫描工具的数据结构和结果管理方式
重点记录输入、范围、规则、命中结果和错误信息
09.5
针对文件结构做扫描解析
分清文件偏移、RVA、VA 和节区范围
...
0235、Windows 逆向攻防:Hook 基础与 IAT Hook
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 10.1 - 10.5,从 Hook 概念进入 IAT Hook。Hook 可以用于调试、监控和兼容,也可能被滥用。这里重点复盘 PE 导入表、函数指针替换和检测一致性。
1、内容范围
小节
主题
10.1
Hook 基本概念及分类
10.2
IAT Hook 构建思路及 PE 关联
10.3
API 调用拦截测试及安装卸载
10.4
IAT Hook 检测手法
10.5
拦截 IAT 修改事件与双向监听
1.1、逐节复盘
小节
主要内容
复盘点
10.1
认识 Hook 的分类和共同目标
重点分清 IAT、Inline、VTable、VEH、断点类 Hook 的痕迹位置
10.2
从 PE 导入表理解 IAT Hook 的作用点
复盘导入描述符、IAT 表项、目标模块和函数地址
10.3
观察 API 拦截测试和安装卸载状态变化
记录原表项、新表项、恢复状态和调用结果
10.4
设计 IAT Hook 检测手法
检查 IAT 地址是否落在合法模块导出范 ...
0236、Windows 逆向攻防:Inline Hook 框架
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 10.6 - 11.4。Inline Hook 直接影响函数开头指令,比 IAT Hook 更接近代码执行路径,因此复盘重点是指令完整性、跳转覆盖范围、中转函数和恢复机制。
1、内容范围
小节
主题
10.6
Inline Hook 底层逻辑
10.7
函数参数拦截与传统钩子
10.8
标准模板化钩子框架
10.9
转发函数判断与指令完整性
11.0
指令边界对齐及破坏修复
11.1
中转函数与通用拦截
11.2
任意函数拦截测试
11.3
常规 API 转发
11.4
框架优化与卸载处理
1.1、逐节复盘
小节
主要内容
复盘点
10.6
理解 Inline Hook 直接修改函数入口的底层逻辑
关注入口字节、页属性、跳转目标和原始字节备份
10.7
从参数拦截理解中转函数的观察价值
复盘调用约定、参数位置、返回值和副作用
10.8
将 Inline Hook 整理成模板化框架
记录初始化、安装、转发、恢复、卸载等状态
10.9
判断转 ...
0237、Windows 逆向攻防:x64 Hook 与指令解析
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 11.5 - 12.4。x64 Hook 比 x86 更强调调用约定、寄存器参数、跳转距离、栈对齐和指令解码。复盘重点不是写 Hook,而是理解为什么 x64 环境下更容易因为上下文破坏而崩溃。
1、内容范围
小节
主题
11.5
x64 万能跳转方案及环境保护
11.6
x64 通用模板框架
11.7
x64 Stub 环境保存
11.8
寄存器参数获取与堆栈定位
11.9 - 12.0
汇编中转与模板化框架完结
12.1
MinHook
12.2
自旋锁与多线程兼容
12.3
HDE 反汇编
12.4
SIB Base/Index/Scale
1.1、逐节复盘
小节
主要内容
复盘点
11.5
理解 x64 长跳转、寄存器保存和栈对齐问题
重点观察跳转距离、入口覆盖长度和上下文破坏风险
11.6
将 x64 Hook 抽象成通用模板
记录参数、目标函数、中转区、恢复逻辑和错误处理
11.7
使用 Stub 保存执行环境
复盘保存了哪些寄存 ...
0233、Windows 逆向攻防:反射式 DLL 加载
返回:Windows 逆向攻防篇 · 网络安全学习主页
这一节对应 08.6 - 09.1。反射式加载的核心不是“神秘技巧”,而是在正常加载器之外,部分模拟 PE 映射、导入修复、重定位修复和入口执行过程。复盘时必须回到 PE 结构本身。
1、内容范围
小节
主题
08.6
ReflectiveDLL
08.7
注入主框架与导出函数执行
08.8
定位执行地址并回溯模块头
08.9
哈希计算、匹配和导出表数据对接
09.0
映像动态拉伸、拷贝和导入表修复
09.1
重定位修正和入口点执行
1.1、逐节复盘
小节
主要内容
复盘点
08.6
理解 ReflectiveDLL 的核心:模块自己完成加载准备
只记录 PE 加载关系、修复对象和检测痕迹
08.7
观察注入主框架和导出函数执行的职责划分
关注入口、导出函数、参数和日志
08.8
从当前执行地址回溯模块头部
复盘内存中 PE 头、节表和地址范围是否可信
08.9
使用哈希匹配导出函数并对接导出表数据
记录哈希规则、名称表、序号表和函数地址表关系
09.0
理 ...
0223、Windows 逆向攻防:前置、注入概念与控制台框架
返回:Windows 逆向攻防篇 · Windows 逆向总目录 · 网络安全学习主页
攻防篇第一部分先不急着做具体技术细节,而是把“为什么会有注入”“注入和 PE 加载有什么关系”“一个安全实验工具应该怎么组织输入、输出、校验和日志”这些基础问题整理清楚。
这篇笔记只用于个人复盘、授权实验和防护理解。凡是涉及跨进程执行、内存修改、ShellCode 或规避检测的内容,后续都只记录概念、痕迹和边界,不写成可直接照抄运行的流程。
01.0 Windows 逆向攻防篇前置要求(一)攻防篇默认前面两篇已经补过一遍。
前置内容
需要掌握到什么程度
C/C++ 基础
能读懂结构体、指针、函数指针、内存申请和文件读写
Windows API
知道进程、线程、模块、句柄、权限和错误码是基本对象
PE 结构
能理解 DOS 头、NT 头、节表、导入表、重定位和入口点
汇编基础
能看懂调用、跳转、栈帧、寄存器和常见 x64 调用约定
调试工具
能使用 VS、x64dbg、IDA 观察模块、线程、内存和调用栈
安全边界
只分析自写程序、课程样本和明确授权目标
...
0216、Windows 逆向提升:PE 前置与头结构
返回:Windows 逆向提升篇 · Windows 逆向总目录 · 网络安全学习主页
提升篇的第一块先不急着写复杂项目,而是把 PE 文件当成一个可以拆开的二进制对象来看:文件里每个字段在哪里,加载到内存后地址怎么变化,工具显示的偏移和代码里拿到的指针怎么对应。
这一部分的目标很明确:以后看到一个 .exe 或 .dll,至少能先找到 DOS 头、NT 头、文件头、可选头和节表,知道哪些字段是加载器真正关心的,哪些字段更偏兼容、标识或辅助信息。
01.0 逆向工程提升篇前置知识进入 PE 结构之前,需要先把几类基础知识接起来。
前置知识
需要能做到什么
C/C++ 结构体
能理解结构体字段顺序、大小、对齐和指针转换
指针和数组
能用“基址 + 偏移”定位二进制文件里的结构
十六进制
能习惯用 0x 表示偏移、地址、标志位和字段值
小端序
能看懂文件中低位字节在前的整数存储方式
汇编与调试
能用 VS、DBG 或 IDA 观察模块基址、入口点和内存窗口
文件读写
能把 PE 文件读入内存缓冲区,再按结构体解析
PE 解析最核心的动作其实只有 ...
0204、Windows 逆向入门:环境、语言映射与数据表示
返回:Windows 逆向入门篇 · Windows 逆向总目录 · 网络安全学习主页
1.3 概念—机器语言 & 汇编语言
amd - intel - 指令集 - CPU机器语言
机器语言:CPU 唯一能够直接识别和执行的语言,由二进制(0/1)组成。
汇编语言:使用助记符(ADD、SUB 等)代替机器语言(0111…),提高程序可读性。
机器语言 ⇄ 汇编语言:一一对应(1:1),汇编语言需经过汇编器转换后才能被 CPU 执行。
关系:汇编语言(ADD) → 汇编器(Assembler) → 机器语言(011100…) → CPU 执行
1.4 概念—汇编语言 & 高级语言
高级语言(如 C 语言)更接近人的思维,易于编写和维护。
编译器(Compiler)负责将高级语言翻译成汇编语言或机器语言。
执行流程:高级语言 → 编译器(Compiler)→ 汇编语言 → 汇编器(Assembler)→ 机器语言 → CPU
12345678910#include <stdio.h>int main(){ int a = 0; int ...
0123、安全开发篇(四):模板基础
返回:安全开发篇(四)汇总 · Ferry 学院安全开发总目录 · 网络安全学习主页
这一部分先整理 C++ 模板基础。
模板是 C++ 泛型编程的核心。它让我们写一份逻辑,适配多种类型;但模板不是运行时的“万能函数”,而是编译期根据实际类型生成对应代码。理解这一点,后面看 STL、容器、迭代器和模板错误信息会轻松很多。
1.0 泛型编程概念泛型编程关注的是“算法和类型分离”。同样的逻辑,不希望为 int、double、std::string 分别写一遍。
比如交换两个变量:
12345678910111213void swap_int(int &a, int &b){ int temp = a; a = b; b = temp;}void swap_double(double &a, double &b){ double temp = a; a = b; b = temp;}
这两个函数逻辑完全一样,只是类型不同。模板可以把类型抽象出来。
1234567template &l ...
0116、安全开发篇(三):C++ 入门与命名空间
返回:安全开发篇(三)汇总 · Ferry 学院安全开发总目录 · 网络安全学习主页
这一部分先从 C++ 的入口知识开始。
如果说 C 更接近“函数 + 数据 + 内存”,那么 C++ 在这个基础上加入了更强的组织能力:命名空间、引用、类、对象、构造析构、继承和多态。第一部分先不急着进入类,先把 C++ 程序的基本框架、输入输出、命名空间和自动类型推断整理清楚。
1.0 C++ 特性C++ 可以看成是在 C 的基础上增加了面向对象、泛型编程、异常处理、标准库和更强类型系统的语言。
方向
C++ 补充的能力
代码组织
namespace、类、访问权限、成员函数
面向对象
封装、继承、多态、构造函数、析构函数
内存管理
new/delete、RAII、智能指针
函数能力
默认参数、函数重载、内联函数、模板、回调
类型系统
引用、const、auto、类型推导
标准库
iostream、string、容器、算法、迭代器
和 C 的关系C++ 不是把 C 扔掉,而是保留了大量 C 的语法和底层能力。指针、数组、结构体、函数、内存布局这些内容仍然重 ...
