003、安全开发篇(一):项目搭建第一个 C 语言程序
返回:安全开发篇(一)目录 · 上一篇:002、Visual Studio 安装与配置 · 下一篇:004、C 语言程序架构
对应视频:1.2 基础-项目搭建第一个C语言程序.mp4
1、学习目标这一节要完成第一个 C 语言控制台程序。重点不是 Hello World 本身,而是理解一个程序从源文件到可执行文件的大致流程。
目标清单:
创建空项目;
添加 .c 源文件;
写出最小 C 程序;
编译并运行;
能说明源代码、编译和运行结果之间的关系。
2、创建空项目初学阶段建议创建 空项目,不要直接使用自动生成大量文件的模板。空项目最干净,能让每一个源文件都看得见来龙去脉。
项目命名可以按实验主题来:
场景
示例
第一个程序
hello_c
函数实验
function_demo
数组实验
array_demo
指针实验
pointer_demo
字符串实验
string_demo
不要把所有实验都塞进同一个工程。一个主题一个小项目,后面复盘、定位错误和整理笔记都会清楚很多。
3、添加源文件空项目本身没有代码,需要手动添加源文件。
文件 ...
002、安全开发篇(一):Visual Studio 安装与配置
返回:安全开发篇(一)目录 · 上一篇:001、课程体系与学习路线 · 下一篇:003、项目搭建第一个 C 语言程序
对应视频:1.1 环境-Visual Studio安装与配置.mp4
1、学习目标这一节的目标是把 C/C++ 实验环境搭好。安全开发后续会大量依赖编译、运行、断点、调用栈、反汇编和内存窗口,所以 IDE 不是摆设,而是观察程序行为的工具。
需要完成的事情:
安装 Visual Studio;
勾选 C++ 桌面开发相关组件;
能创建空项目;
能找到编译、运行和调试入口。
2、安装重点Visual Studio 安装时最关键的是选择 使用 C++ 的桌面开发。如果没有这个工作负载,后面可能会出现找不到编译器、无法新建 C++ 项目、无法编译 .c/.cpp 文件等问题。
项目
建议
IDE
Visual Studio 2019 或更新版本
工作负载
使用 C++ 的桌面开发
权限
安装器建议以管理员身份运行
组件
MSVC 编译工具、Windows SDK、CMake 可按需保留
安装路径
尽量避免中文、空格过多或层级太深
...
001、安全开发篇(一):课程体系与学习路线
返回:安全开发篇(一)目录 · 下一篇:002、Visual Studio 安装与配置
对应视频:1.0 前言-课程体系与学习路线.mp4
1、学习目标这一节先确认整门课为什么从 C/C++ 开始,以及它和后续 Windows 逆向、安全工具开发、漏洞理解之间的关系。
学习 C/C++ 的目的不是只会写语法题,而是建立三种能力:
能写出最小可运行程序;
能理解变量、数组、指针和函数如何落到内存;
能把代码层面的现象连接到调试、反汇编和漏洞成因。
2、课程位置安全开发可以先拆成三层:
层次
内容
作用
语言基础
C 语言、C++ 基础、指针、结构体、函数、文件、内存
能写小程序,也能读懂后续示例代码
系统基础
Windows 程序、API、编译链接、调试、进程和内存
能理解程序如何在系统上运行
安全连接
逆向分析、漏洞成因、内存边界、注入和防护思路
把开发能力转成安全分析能力
前期内容看起来像 C 语言基础,但不要跳太快。后面的缓冲区、指针、函数栈、返回地址、PE、ShellCode 和逆向分析,都会默认你理解“代码如何组织”和“程序如何运行”。
...
000、安全开发篇(一):C/C++ 基础入门目录
本页作为 安全开发篇(一):C/C++ 基础入门 的目录页。后续单篇笔记从 001 开始,000 只负责汇总课程结构、学习进度和跳转入口。
1、当前学习位置当前从 第 1 阶段:安全开发篇(一)C/C++ 基础入门 开始。此前旧版 Windows 逆向基础笔记已经放入 old 目录归档,当前学习顺序以这里的新编号为准。
这一阶段的课程共 81 节,从课程体系、Visual Studio 环境与 C 程序框架起步,依次学习数据、运算、控制流、数组、字符串、结构体、指针与函数。学习重点不只是记住语法,还要能够通过调试、内存观察和反汇编理解代码的实际执行过程。
2、已整理笔记
编号
对应视频
笔记
001
1.0 前言:课程体系与学习路线
001
002
1.1 环境:Visual Studio 安装与配置
002
003
1.2 基础:项目搭建第一个 C 语言程序
003
004
1.3 基础:C 语言程序架构
004
005
1.4 基础:注释方式
005
006
1.5 基础:#include 预处理指令
006
007
1.6 基础:程序入口点 ...
2026.08.17 刻舟求剑:我们都在用静止的记忆对抗流动的无常
返回:🌠 Summary And Schedule。
小时候读《刻舟求剑》,只觉得那个楚国人愚不可及。剑明明掉进了江心,船又已经向前走了那么远,他却还在船舷上刻下记号,想着靠岸以后从那里下水找剑。
那时候我们站在故事之外,嘲笑他的迂腐,也确信自己绝不会犯下如此荒谬的错误。
后来在岁月的长河里走得久了才发现,那个楚国人并不是别人。他正是许多个站在岸边、不愿承认船已走远的我们。
1、小时候看见的是愚蠢,长大后看见的是执念刻舟求剑最荒谬的地方,不是楚国人不知道剑掉在哪里,而是他忽略了一个最简单的事实:船在走,水在流,一切都在变化。
他把记号刻得很深,以为只要坐标还在,失去的东西就仍然停留在原处。
可我们这一生,又何尝不是在重复这个动作?
我们记住某年某月某日,记住一个人曾经怎样对我们笑,记住一段关系最好的模样,也记住某件事给过自己的温暖与伤害。然后在很多年后,仍试图沿着这些记号回到过去,仿佛位置找对了,一切就能复原。
只是记忆是静止的,人生却从未停船。
2、故地重游,寻找的从来不是那条街我们以为故地重游只是怀旧,其实很多时候,那也是一种刻舟求剑。
回到熟悉的街道,走进曾经常去的小店,点 ...
018、反汇编代码的重建与编译
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:全书总览 · 上一章:WannaCry 分析
重建的目标重建不是追求编译出完全相同的机器字节,而是恢复一个在关注输入范围内行为等价、结构清晰、可验证的实现。
三种目标要分清:
目标
关注点
阅读伪代码
帮助理解原程序
行为重实现
输入、输出与副作用等价
二进制级复现
编译器、ABI、布局和构建选项高度一致
多数学习场景以第二种为主。
从边界开始第一步不是立刻写 C++,而是建立可靠边界:
模块和节区。
函数起止地址。
基本块与控制流边。
调用点与返回点。
全局数据、常量和导入函数。
间接调用的候选目标。
边界错误会让后续类型和控制流全部错位。
恢复函数原型对每个函数记录:
12345678候选名称:调用约定:参数数量与位置:参数访问宽度:返回值:this / 隐藏返回缓冲区:修改的外部状态:所有调用点是否一致:
调用者说明“怎样传”,被调用者说明“怎样用”,两边一致 ...
017、WannaCry 勒索病毒的防御性分析
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:全书总览 · 上一章:远控样本分析 · 下一章:代码重建
本章是历史事件的防御性复盘,不提供漏洞利用、传播或加密破坏的实现细节。样本分析必须在获得授权的隔离实验室中进行。
事件定位WannaCry 是 2017 年大规模爆发的勒索蠕虫事件。分析时应把它拆成几个问题:
初始执行与环境检查。
勒索组件的部署和文件处理。
服务与进程行为。
基于 SMBv1 漏洞面的横向传播。
赎金界面、说明文件和恢复影响。
案例学习的重点是“组件如何协作、证据如何关联、事件如何遏制”,而不是复现传播链。
组件化观察样本可能释放或启动多个文件与进程。阅读反汇编时先建立组件表:
组件
记录内容
初始载荷
入口、环境检查、释放或启动动作
服务组件
服务名称、命令行、启动与停止行为
勒索组件
文件枚举、扩展名筛选、密钥与界面逻辑
传播组件
网络扫描和 SMB 相关证据,仅做行为定性
辅助资源
...
016、远控木马的防御性逆向分析
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:全书总览 · 上一章:OllyDbg 原理 · 下一章:WannaCry 分析
本章只用于授权环境中的防御研究、取证和检测。不要在宿主机运行未知样本,不连接真实互联网,不复现控制端、传播或持久化功能。
分析目标面对远程控制类恶意程序,防御分析的目标不是“把每条指令都读完”,而是尽快回答:
样本如何进入与启动?
如何保持驻留?
与哪些进程、文件、注册表、服务交互?
是否建立外部通信,通信证据是什么?
能执行哪些能力?
如何检测、隔离和修复?
安全实验环境最低要求:
使用专用虚拟机并在分析前创建快照。
与个人文件、密码、浏览器会话和生产网络隔离。
默认断网;需要观察网络时使用可控的模拟服务。
禁用宿主机共享目录、共享剪贴板和自动挂载。
记录样本哈希、来源、时间、分析人员和授权范围。
样本本身永远视为不可信输入,分析工具、脚本和转储文件也要放在受控环境中处理。
静态初筛先建立不运行样本也能取得的证 ...
015、OllyDbg 的工作原理
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:全书总览 · 上一章:PEiD 原理 · 下一章:远控样本分析
调试器的核心循环用户态调试器不是“每条指令都由调试器执行”,而是让目标进程正常运行,在调试事件发生时接管控制。
123456创建或附加目标进程 -> WaitForDebugEvent -> 解析事件并暂停相关线程 -> 读取/修改内存和线程上下文 -> ContinueDebugEvent -> 等待下一个事件
Windows 会报告进程、线程、DLL、调试字符串、异常和退出等事件。
创建与附加两种常见模式:
以调试标志创建新进程,从启动阶段开始观察。
附加到已运行进程,接收后续调试事件。
调试器需要维护:
被调试进程句柄。
每个线程的句柄和状态。
已加载模块的基址、大小和路径。
断点原始字节和命中状态。
符号、反汇编和用户标注。
软件断点x86/x64 常用 INT 3,单字节操作码为 ...
014、PEiD 的工作原理
🎨 颜色标记说明
粉色:特别重要、主线必掌握、优先复盘的内容。
蓝色:核心概念、术语、分类名。
橙色:需要关注的边界、易错点、注意事项。
绿色:解释类内容、帮助理解知识点。
返回:全书总览 · 上一章:异常处理 · 下一章:OllyDbg 原理
PEiD 在做什么PEiD 是经典的 Windows PE 识别工具,主要通过签名和 PE 特征判断程序可能由什么编译器、链接器、安装器、壳或保护工具生成。
它解决的是“快速分类”,不是“证明样本一定属于某家工具”。
入口点签名许多编译器启动代码和壳入口具有相对稳定的指令片段。签名通常描述:
1固定字节 + 通配字节 + 匹配位置
例如相对地址、绝对地址和构建相关立即数需要用通配符忽略,保留较稳定的操作码与结构。
160 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? ?? ??
这只是签名形式示意,不代表某个具体产品。
匹配流程123456读取 DOS/NT 头 -> 定位 AddressOfEntryPoint -> 把入口 RVA 映射到文件偏移 -> 读取入口附近字节 -> 遍历签名库 ...






