滴水逆向三期课件学习路线:从环境搭建到独立调试的完整实践

📅 发布时间:2026/10/13 22:50:44
滴水逆向三期课件学习路线:从环境搭建到独立调试的完整实践
简介滴水逆向三期课件全套资料面向逆向工程初学者和进阶开发者配合视频讲解可系统梳理程序逆向与调试分析的核心思路帮助零基础读者逐步建立逆向分析框架。压缩包共计二百一十二个文件大小约二十八点二七兆包含八十七个表格文件、十余个C源文件与头文件以及众多的可执行程序、目标文件、动态链接库和工程配置文档其中表格课件将知识点拆分为清晰条目源码与可执行文件用于动手验证和对照练习调试辅助文件和工程文件则支持深入观察程序运行逻辑方便边看视频边实际操作。整套资料组织有序从基础原理到典型实例层层递进能够帮助学习者理解程序内部结构、掌握常用调试工具的使用方法同时积累常见的逆向排错思路。目前已有两千七百余人学习下载是一份内容扎实、值得收藏的逆向学习配套资源。1. 网上流传的滴水逆向三期课件全套先别急着从第一集开始网上常说的滴水逆向三期课件全套不少人是当视频清单收藏的收藏完打开第一集跟到第五集就开始犯困。我带过几个从零入门的朋友最后能独立调通一个程序的都没有走这条“从第一集看到最后一集”的路。这套课真正有用的地方不是你有多少集视频而是你能不能顺着它的节奏把环境搭好、程序调通、思路亲手重放一遍。这篇文章按我实际过完一遍的路线来讲三期内容怎么拆、环境清单是什么、笔记怎么记、坑在哪。适合刚入门想找路的人也适合刷过一遍但没抓手的老手。2. 把三期课件放进逆向学习路线三个阶段到底在解决什么问题这套课件最常见的组织方式是三个递进阶段基础、逆向、专项。三个阶段不是三堆并列的视频而是三条能力台阶。我见过太多人把三期当连续剧追结果在第二阶段就跟丢问题就出在没搞清每一阶到底要练什么。阶段常见知识点学完能做什么基础篇C与汇编的映射、内存布局、栈帧、调用约定、PE结构对着编译产物说清一个函数怎么被调用、参数怎么传逆向篇调试器操作、断点技巧、静态分析、动态调试、函数定位给定一个程序能定位关键函数并还原主要逻辑专项篇壳原理、反调试、消息处理、文件协议面对带壳或带反调试的目标能拆解并提取核心代码2.1 基础篇先算清内存、栈和汇编的账基础篇的核心不是让你背指令而是把高级语言和机器状态之间的账算清楚。变量怎么进寄存器数组怎么寻址结构体怎么布局函数参数放在哪这些都要建立成画面而不是术语。我一般会建议新人在这个阶段做一件很土的事在纸上手推一次栈的变化。随便写一个有两个参数的函数把调用发生时的返回地址、参数、局部变量在栈上的排布画出来并写下 esp/ebp 每一步往哪移。推完三个函数再看调试器里的栈窗口就不再是看天书了。调用约定是三期课件里反复出现的东西也是新人最容易混的。下面这张表建议贴在笔记第一页调用约定参数传递方式栈平衡由谁负责cdeclC默认参数从右往左压栈调用方stdcallWin32 API常见参数从右往左压栈被调用方fastcall前两个参数入寄存器其余压栈被调用方多数场景这个阶段还要做的事是读 PE。不用深挖所有字段只把入口点、节表、导入表三样看清就够了。拿一个自己写的 exe用文件查看工具打开找到入口点再用调试器打开同一个程序对比入口地址两边对得上你对“程序是怎么被加载的”就有了实体感。基础篇的验收标准不是“看完了”而是能回答三个问题一个函数被调用时返回地址放在哪参数从右往左还是从左往右压栈导入表里的函数名对应程序加载时的哪个位置。答不上来就回头补别急着往下一篇走。2.2 逆向篇从静态读到动态调断点不是越多越好进入逆向篇分析对象从“自己写的代码”变成“不知道逻辑的编译产物”这才是三期课件的重头。这个阶段的核心能力是定位在茫茫反汇编窗口里找到那个关键函数。我的习惯是静态先行。先跑一遍程序观察输入输出用字符串提取工具看提示信息从导入表里看它调了哪些 API。这些信息能帮你画出一张粗糙的“哪里可能是关键代码”的地图。然后才打开调试器顺着地图下断点。断点不是下得越多越好下多了反而干扰判断。我把断点分成三层分别应对不同场景断点类型原理适用场景注意点普通断点int3改写指令首字节为中断指令函数入口、API调用易被反调试检测条件断点命中后再判表达式循环内定位特征值表达式语法因调试器而异内存断点对内存区域监控读写找数据被谁修改数量有限影响运行速度条件断点是这个阶段最值得练的。比如你要在一个循环里等某个变量变成特定值普通断点会让你按几千次继续条件断点直接帮你停在目标状态。写法上常见调试器里用“模块名偏移”表达地址判断式写成地址等于值或寄存器等于值。注意不同调试器的条件表达式语法略有差异练的时候先看它的帮助文档。这个阶段最容易翻车的地方是拿到程序就开调不看静态信息。反汇编窗口里上千行代码没有字符串和 API 做锚点你就是无头苍蝇。正确姿势是先把字符串交叉引用看一遍找出“提示错误信息”的位置从那里往前推往往就能找到校验函数。2.3 专项篇脱壳与反调试这里开始分人第三期是真正分人的阶段。脱壳、反调试、协议分析每一个都能单独成为一个方向。能跟到这一篇的人前面两期的栈帧和断点基础已经比较扎实再学这些才不会断片。反调试是最常见的坎。常见手段无非三类用 API 检测调试器是否在运行、用时间差检测单步行为、用异常扰乱正常流程。思路是“哪里检测就处理哪里”要么找到检测函数让它失效要么改变执行路径绕过检测。建议先拿自己编译的带反调试的小程序练手不要直接去调别人的样本否则环境问题和技术问题混在一起你会分不清是没学会还是工具没配对。脱壳的常见思路不是“硬脱”而是“带壳调”。在壳的跳转点下断等壳解密完代码跳到原始入口时再把控制权接过来。这里需要你对入口特征有感觉编译器生成的入口通常有固定模式壳程序的入口则往往是一堆花指令或推栈操作。专项篇不需要全做。课件给了你一个完整的框架但你要选一个方向做精。做恶意代码分析的重点是脱壳和反调试做程序行为研究的重点是消息处理和数据流追踪。我见过有人把三期全部过完每个专项都浅尝辄止最后能聊很多名词却调不出一个完整逻辑那是最亏的。3. 用三期配套环境跑通第一个逆向样例环境清单与最小验证步骤三期课件里每个实验都建立在“你能打开目标程序并调起来”的基础上。很多人卡在听懂了但调不起来根源就是环境没配对。这套环境不需要多高级但要能还原、能隔离、能随时回退。3.1 一套能跑通三期的环境清单系统、虚拟机与工具版本为什么必须上虚拟机两个原因。第一实验程序行为不可信你不知道它会改什么配置、碰什么文件第二调试过程本身容易把系统搞乱快照可以一键回到干净状态。我见过有人在物理机上直接跑实验程序系统被改得桌面都进不去只能重装那叫一个肉疼。角色需要什么用途要点宿主系统一套能跑虚拟机软件的桌面系统运行虚拟机、保存镜像不放实验样本虚拟机一个干净的 Win10/Win7 系统运行调试器和实验程序关闭自动更新/屏保/共享调试器x64dbg分 32/64 位动态调试位数和目标程序严格一致编译器gcc 命令行环境生成最小验证程序保留调试信息辅助工具文件查看/字符串提取工具静态观察用免费开源工具即可这里最容易踩的是位数不配对。程序是 32 位就用 32 位调试器64 位程序用 64 位调试器混用会连断点都下不上。装完工具按这个顺序打快照干净系统打一个快照装完运行库打一个装完调试器和辅助工具再打一个。每个实验前还原到最后一个快照实验做完再还原回干净状态保证每次开始都是确定的环境。提示快照是你的后悔药宁可多打一个也不要省。我一般会保留两个快照位一个纯净系统一个调试工具链齐全互不覆盖。3.2 用最小工程验证环境写一个会崩的样例调它环境装完不要急着开课件先造一个故意触发异常的小程序验证调试器能不能准确命中。这一步 20 分钟就能跑完但能帮你把“调试器能不能用”和“我能不能调”两件事分开。#include stdio.h int main(void) { volatile char *p (char *)0x401000; // 故意指向代码段附近 *p 0x90; // 触发写访问违规 return 0; }代码逻辑很简单volatile 是防止编译器优化掉这次写操作0x401000 在常见 exe 映像基址附近通常是只读的代码段往这里写一定会触发访问违规。我们的目的不是让它正常跑完而是让它在出错时被调试器精准抓住。编译命令用这个gcc -g -O0 -fno-stack-protector crash_demo.c -o crash_demo.exe参数说明-g 生成调试符号让调试器能显示源码行号-O0 关闭优化防止变量被改写-fno-stack-protector 关掉栈保护检查让调用关系更直白。编译完打开调试器加载 crash_demo.exe按这个顺序验证四件事第一步程序能停在入口而不是直接跑飞第二步在 main 函数下断点能命中第三步单步到 *p 0x90 这一行时寄存器窗口里能看到 p 的值是 0x401000第四步继续执行后调试器报告访问违规并停在那条写入指令上。这四步全通你的调试链路就是通的再往后跟着课件走就不用在环境上继续耗。3.3 环境出问题先看什么先查三个地方调试器打不开程序或者附加不上90% 是三个原因。按顺序查别乱试。第一个是位数不匹配。32 位程序用 64 位调试器加载直接提示无效文件格式。确定方式很简单看程序的架构或看它在任务管理器里有没有“32 位”标注。第二个是权限问题。调试器没以管理员身份运行时附加到某些进程中会失败右键调试器图标选“以管理员身份运行”就能解决。第三个是系统干扰。虚拟机的自动更新、实时监控、屏保网络共享都可能改变程序行为或拖慢调试器。做实验前把这些都关掉能少很多莫名其妙的“玄学故障”。还有一个我反复踩的坑实验文件路径不要带中文和空格。调试器加载带特殊字符路径的程序符号解析经常失败反汇编窗口里函数名全变成地址非常影响判断。4. 把课件从“看过”变成“会做”复现式学习法与你该记的笔记这章的标题就是三期课件最大的秘密怎么才能不白刷。答案不是更努力地看而是更刻意地做。4.1 复现式学习每节课结束前亲手重放一遍关键路径课件里老师做的事情你要在自己机器上重新做一遍目标是结果一致。不一致的每一处都是你的知识缺口。具体分三步。第一遍跟着课边看边调只求结果跑通这一遍的用途是熟悉操作路径第二遍合上视频凭笔记把路径重放一遍卡住的地方做标记这一遍才是真正属于你的第三遍换一个输入条件重新调比如改参数、改文件名、改内存里的数据观察程序行为怎么变。第三遍最容易被省略但恰恰是它帮你把“背步骤”变成“懂逻辑”。我见过有人第二遍都能跑通第三遍换个输入就找不着北说明他还是靠记住路径而不是理解路径。这个阶段要培养一个习惯把未知函数当黑匣子。先看输入从哪里来、输出往哪里去再决定要不要拆内部逻辑。别一上来就逐行读反汇编那是低效的。黑匣子思维能帮你在面对陌生程序时快速画出骨架而不是陷进细节里。4.2 笔记结构按“输入→操作→输出”记不按 PPT 抄看课件最容易的摸鱼方式就是抄板书。等你回头再看满页的名词解释就是不知道当时是怎么调出来的。正确的记法是把笔记写成“实验报告”按输入、操作、输出、结论四段来组织。记什么怎么记作用实验目标一句话说清要调出什么防止迷失静态观察字符串、API、导入表信息决定断点位置动态路径断点位置、单步过程、栈回溯复现依据结论与踩坑关键函数位置、逻辑判断形成长期记忆记录断点位置时记“模块名偏移”不要只记绝对地址。程序重启后基址可能变化绝对地址会失效模块名偏移在任何一次加载中都能换算出来。这是三期课件里最实用的记录习惯之一。笔记模板可以直接用 Markdown 存成文件# 实验记录模板 ## 目标 一句话描述 ## 静态观察 程序输入输出、可疑字符串、导入表 ## 断点与动态路径 1. 断点位置 2. 单步过程 3. 关键寄存器/栈变化 ## 结论 关键函数在哪、逻辑是什么 ## 踩坑 现象、猜测、解决办法笔记的价值要过两周才能体现。等第三期学完再翻第二期的笔记你一眼就能看出当时哪里理解错了哪些经验还成立哪些已经被新认识推翻。这种“自我复核”的能力才是课件真正想培养的。4.3 每周自测做一次不看课件的独立调试看得懂的假象太多了。唯一能戳破它的是关掉课件打开调试器给自己计时独立调一道题。我建议每周末抽一道本周围绕过的实验题按“五问法”自测程序入口在哪关键函数在哪个模块输入从哪来结果怎么校验我凭什么能证明自己的结论。前四问靠调最后一问靠表达。能答出第五问说明你真的懂了而不是追到了某个地址。自测不用太久40 分钟调不出来就停标记薄弱点回看对应章节。这里的关键是“不看课件、不看笔记”全靠手感和调试器信息推进。第一次自测可能很挫败但坚持四周后你会发现从“看到题意没头绪”到“主动列出可能的断点位置”这个跨越只有亲手做才能发生。5. 滴水逆向三期课件的避坑清单环境、断点、符号表与开头顺序下面这五条是我带人时反复遇到的现场事故每一条都对应一个具体的坑。按“现象→原因→解决”写清楚你可以直接拿去对照。5.1 跳过基础篇直接开调试器第一周就翻车现象寄存器窗口看不懂栈窗口里的返回地址读不出来单步几行就跟丢目标。 原因把调试器当“视频播放器”用跳过汇编和内存布局直接开调调试器展示的是机器状态而机器状态背后是内存模型。 解决回补三块就行不用全面重启栈帧排布、调用约定、PE 导入表。补到能回答问题“参数怎么传、返回地址在哪、栈平衡由谁做”再回去看逆向篇。5.2 实验样本把系统改坏只能重装虚拟机现象跑完一个样本后系统配置变了文件被删网络异常只能重装系统。 原因在没有快照的虚拟机上直接跑不可信样本相当于在悬崖边上走路还不系绳。 解决装完工具立刻打“干净快照”每个实验前还原到干净快照。实验结束后再还原一次保证系统始终是已知状态。5.3 反汇编窗口全是地址函数名一个都看不到现象调试器加载程序后反汇编窗口全是 sub_401000 这种匿名符号没法按名定位。 原因程序被裁剪了符号信息或调试器的符号文件没配置好。 解决自己编译的实验文件加 -g 生成调试信息分析外部程序时用字符串和 API 调用作为锚点记住“模块名偏移”比记裸地址靠谱得多。5.4 乱下断点触发反调试程序退出现象断点一下程序立刻退出或走了完全不同的分支。 原因普通断点会改写指令首字节这个改动本身就可能被检测或者断点下在反调试时机之前。 解决改用硬件断点效果不修改指令字节不容易被常规检测发现或者把断点下在反调试逻辑完成之后的位置。硬件断点数量有限别贪多一次一个用最关键的。5.5 只看视频不亲手调等于没学现象看课的时候都懂周末自己打开调试器面对反汇编窗口发愣。 原因逆向是手感技能视频给的是路径不是肌肉记忆。 解决给自己定规矩每节课至少 30 分钟亲手重放结论以调试器显示为准。做不完就标记不进入下一节。这个规矩能拦住你 80% 的“虚假进度”。6. 三期课件二刷的正确姿势用一题多解验证知识边界课件刷第二遍目的不是“再看一遍”而是验证你到底有几条路能走到同一个答案。以“定位一个校验注册码是否合法的函数”为例。第一遍你可能只用一种方法搜字符串。第二遍建议换三个思路对比着来。方法A是字符串搜索。找到错误提示字符串右键“查找交叉引用”直接跳到比较代码的位置。这个方法最快也最依赖程序是否把提示信息写死在代码里。方法B是 API 断点定位。如果程序从对话框或文件里读注册码在取输入的 API 上下断断下后看调用栈回溯顺着调用链就能找到调用者函数。这个方法能练栈回溯的熟练度。方法C是内存访问断点。先在关键数据区下内存断点等程序读取该数据时停住再往前推是谁在读、为什么读。这个方法能帮你理解数据流但速度慢运算量大适合定位数据被频繁改写的场景。三种方法消耗的时间和产出不同。二刷时每道题换着用直到你能根据程序形态预判哪种方法最合适。这比重复第一遍的方法更能暴露知识边界。我自己的习惯是给每道题写“定位路径”只记路径不记答案。两周后再打开同一个程序不看笔记看能不能把路径重新走通。走得通说明形成了长期记忆走不通那页笔记就是最精准的薄弱点清单。还有一个验证方式是换平台重调。把 x86 编译的样例放到 x64 环境下重新调一遍你会发现参数传递方式、寄存器用法、栈布局全变了对调用约定的理解会再深一层。这三件事做完三期课件才真正长在你身上。如果用一句话总结我这几年带人过课件的教训第一遍别赶进度第二遍别复读细节每一遍都逼自己“独立调出来”一次。课件只是原料亲手调出来的程序才是你自己的证据。希望帮到你。本文还有配套的精品资源点击获取