资讯动态

滴水逆向三期课件:从汇编、调试器到动态跟踪的实战路线

发布时间:2026/10/13 10:49:17 来源:尧图企业网站定制
简介滴水逆向三期课件全套是一份面向逆向工程学习者的系统性配套资料适合跟随滴水逆向系列视频课程进行实战练习。资源包共收录二百一十二个文件压缩后约二十八兆其中八十七个表格课件便于梳理知识框架十二个源码文件与九个头文件对应课程示例工程十三个可执行程序可直接运行观察效果另有动态链接库、静态库、调试数据库等辅助文件覆盖从源码阅读到动态调试的完整链路。目前已有两千七百零二人学习下载。资源按课程阶段组织目录清晰配合视频讲解能快速定位每期重点通过源码与实验对照巩固操作思路。对于希望系统掌握逆向、函数调用、PE结构等核心内容的读者这套课件能大大节省整理笔记与搜索资料的时间下载后即可高效投入学习。1. 滴水逆向三期课件囤了不等于会了这套东西该怎么读滴水逆向三期课件在逆向入门这个圈子里流传了很多年查过逆向怎么入门的人手里多半都囤了一份。真正把整套跟完的没几个多数人停在第二个星期原因是它不适合看它是一套要照着敲、照着跟、照着画栈帧图的训练课。这套课件解决的是一个具体问题会写C语言但不懂程序内部机制的阶段怎么把汇编、调试器、内存模型和系统调用这条线一次打通。适合愿意拿出两到三个月做刻意练习的从业者不适合指望看视频就会、连调试器都不想开的人。跟完它未必能直接进安全岗但能把静态分析和动态调试两条腿都走起来。2. 课件到底在讲什么从汇编地基到调试器实战的知识脉络2.1 滴水三期课件的汇编基础与内存模型为什么比二期更重手工基本功滴水逆向三期课件通常被看作一个递进的三段体系先补汇编与内存再磨调试器操作最后回到C语言模型和系统层。和只看一遍视频的学法相比真正有价值的地方在它反复让学习者用手跟、用笔记而不是用眼睛扫。常见编排是拿出一段几十行的函数先让学员在调试器里单步再要求把每条指令翻译成对应的C语言写法这个动作看着枯燥恰恰是后面所有分析能力的底座。我一般不建议跳过汇编直接学调试。调试器窗口里每一行反汇编对应哪个寄存器、哪块内存心里如果没底后面所有看懂了都是幻觉。基础阶段真正要抓的是三件事寄存器怎么用、栈帧怎么建立和销毁、数据在栈和堆里的地址长什么样。寄存器不是背名字而是看它在一条指令执行前后的变化栈帧不是背图而是跟一个call/ret看ESP和EBP如何变化。主题关键概念调试器里对应位置常见误区寄存器EAX/RAX、EBP/RBP、ESP/RSP寄存器窗口以为EAX只用来存累加值栈帧push/pop、call/ret栈窗口忽略返回地址压在栈顶这一事实内存区栈、堆、全局区内存窗口分不清地址属于哪一段看表里的第三行很多人在调试器里看到一个地址张口就说它是堆上的实际用内存窗口看落点后发现是全局区。判断方法很简单看它出现在哪一次分配之后以及它所在页面的访问权限。全局区的地址在模块加载后就固定堆上的地址要等malloc或new之后才有。课件里的练习程序一般都会故意混用这两种情况让学员在单步时分辨。从三期课件的角度说汇编阶段更强调手工两个字。同一段C代码开不开优化生成的指令差异非常大。课件会拿关闭优化和开启优化两种编译结果做对照让学员看到编译器怎么把循环展开、怎么复用寄存器。这种对照练习在只看不练的情况下完全体会不到因为人脑很难在没亲手跟过一遍的情况下记住几十个指令变体。汇编打底之后接下来就是调试器本身的熟练度这也是三期课件里最耗时间、最能拉开差距的部分。2.2 调试器操作与动态跟踪看懂了不算学会跟完才算调试器操作本身不是难点难在建立一套稳定的跟读节奏。我见过很多同学打开调试器之后第一步就是按F8一路狂点程序跑完一圈脑子里只剩最后一行指令的影子。滴水三期课件在这里的典型导向不是让你快速跑完而是要求跟到哪记到哪。每到一个关键call至少要在注释里写三样东西这个call的入口参数是什么、出口结果放在哪里、它是由谁发起的。常见的跟读流程可以拆成四步。第一步在程序入口暂停确认当前处于主模块代码段而不是系统加载器代码。第二步用单步F8走几个简单的mov、add指令观察寄存器窗口的变化确认自己能看到每条指令改了哪个寄存器这个粒度。第三步遇到call按F7进入函数内部先把栈窗口打个标记看返回地址被压在哪里。第四步从函数返回之后对照栈窗口里的返回地址确认自己回到了调用点的下一行指令。这四步走完一个函数才算真的跟过。窗口主要看什么什么时候需要看寄存器窗口EAX/RAX变化、ECX/EDX传参每条指令执行后栈窗口返回地址、局部变量、参数call进入和ret返回时内存窗口缓冲区内容、结构体字段遇到读写内存时反汇编窗口指令流、跳转方向始终这四件事看着基础却决定了后面分析样本和漏洞利用时的效率。许多从业者工作几年后回头补课补的就是这种肌肉记忆。课件里有一类练习专门针对这个只给一个没有源码的二进制要求在十分钟内说出它调用了哪些系统API以及每个API的参数从哪来。能靠调试器独立完成这个练习才算过关。动态跟踪还有一个容易被忽略的细节别在一个循环里傻跟几百次。遇到循环先看循环计数寄存器判断总共要执行多少次用断点直接跳到最后几次或循环结束的下一条指令。课件到后面会强调这一点目的是让学员学会控制跟踪成本而不是无脑跟到尾。2.3 C语言与系统调用层课件后半段的含金量所在前半段把指令和调试器练熟后课件的重心会转向C语言模型结构体对齐、虚表调用、函数调用约定和系统API的调用点识别。这些内容对做过系统开发的从业者不陌生但对只写过业务代码的初学者来说是第一次看到函数调用在机器层面的完整面貌。调用约定是绕不开的一块。常见的三张面孔是cdecl、stdcall和fastcall。课件最常见的练习是给一个C程序让学员在反汇编里根据参数压栈和栈清理位置判断它属于哪种约定。调用约定参数传递栈清理责任典型场景cdecl从右往左压栈调用者清理printf这类可变参数函数stdcall从右往左压栈被调用者清理常见API、固定参数接口fastcall前两个参数走ECX/EDX其余压栈被调用者清理编译器优化场景这三者的辨析直接关系到在调试器里看参数窗口时能不能对上号。一个用stdcall导出的函数ret指令会带立即数比如ret 8而cdecl的ret不带立即数栈恢复要由调用方在call后面加add esp, 8。看到这些差异再去读反汇编效率完全不同。后半段的另一个重点是API调用点识别。以Win32程序为例导入表里能看到函数名但谁调了它、参数怎么构造需要动态跟踪才能确定。常见做法是在API入口下断点等断下来以后看栈窗口的返回地址返回地址所在函数就是调用者再由返回地址往前翻指令还原参数是从哪个变量、哪个偏移传入的。这一套反推参数来源的动作就是后面协议逆向和样本行为分析的地基。课件最后常带一小节壳的识别和入口点定位。我一般建议新手在这里只做练习壳用教学用的压缩壳练固定流程不要拿商业软件做目标。这一步不只是边界问题还关系到学习效果练习壳的入口特征明确能直接验证你对栈帧的理解是不是对的一上来就处理高强度壳只会把时间耗在反调试对抗上基础没牢之前没有任何增量收益。3. 学习节奏安排一阶段一目标配套练习怎么落地3.1 三条主线并行汇编、调试器、C语言模型把课件买回来顶多算拥有真正拉开差距的是学习节奏。常见的失败开局是每天看两集视频不做练习两周后前面全忘。更可靠的做法是三条主线并行汇编基础一条线、调试器操作一条线、C语言模型与系统调用一条线。每天先看课件里对应的一小段然后把同样内容在调试器里做一遍最后把结果写成注释或表格大约四十分钟到一小时。为什么三条线并行而不是一条线走完因为这三种知识是互相喂的。看汇编时如果没有调试器在旁验证寄存器变化很难留下印象看调试器操作时如果对栈帧没有概念按F7进入一个函数后根本不知道栈窗口里的返回地址意味着什么看C语言模型时如果不知道调用约定还原参数来源就无从下手。三条线同时推进每一条都能给另外两条提供反馈。阶段周期主线目标每天输出物第一阶段第1~7天寄存器、栈帧、内存区域30条指令的注释表第二阶段第8~14天断点类型、调试器窗口3个程序的跟读笔记第三阶段第15~30天结构体、虚表、API调用点2个模拟项目还原输出物这个要求很关键。没有输出物的学习很难检查自己是否真的看懂了。注释表不需要多工整只要能让一周后的自己看懂就行跟读笔记则要包括程序调用了哪些API、每个API的参数怎么来的这类结论而不是抄指令。第三阶段的模拟项目常见做法是从课件配套的测试程序里挑两个用调试器还原主要流程再写一段一百字以内的中文描述说明程序逻辑。如果能做到这一步基本可以认为你已经把前面两阶段的东西串起来了。3.2 单步跟不丢的练习法拿课件里的最小程序做手工分析单步跟丢是新手最高频的问题之一。跟丢不是程序跑飞了而是自己不知道当前这行指令处在哪个函数、哪个调用层级。要解决这个问题最有效的练习是构建一个可控的小程序从头到尾手工跟一遍不依赖任何自动分析。这里准备一个最小练习样本不算复杂但包含了函数调用、参数传递和栈帧切换足够用来练手。// 练习样本三层调用链用于单步跟踪和栈回溯 #include stdio.h int add(int a, int b) { return a b; // 在这里下断点观察EAX里的返回值 } void wrap(void) { int x add(3, 4); // 断在这里看两个参数怎么进栈/进寄存器 printf(%d\n, x); // 在printf处下断点看调用约定 } int main(void) { wrap(); // 程序入口断点先落在main return 0; }编译时用两个关键参数。-g保留调试符号让调试器能把地址映射到源码行-O0关闭优化避免编译器把add内联掉导致函数调用关系看不到。命令如下# Windows 的 MinGW 环境下编译 gcc -g -O0 -o practice1.exe practice1.c # 如果需要 32 位样本可以追加 -m32注意先装好 32 位运行库-o指定输出文件名不写默认叫a.out。练习32位逆向时-m32会比较麻烦因为要准备32位库文件这里先用本机默认位数即可重点在函数调用链的跟踪不在位数。跟读时按下面五步走第一步在main处下断点运行到main的第一行。第二步F8单步进入wrap前先看栈窗口记录当前栈顶地址。第三步遇到call wrapF7进入函数内部再看栈窗口确认返回地址被压入栈顶。第四步在wrap里单步到call add这行F7进入add观察汇编层面对a、b的引用。第五步从add返回到wrap后继续走到printf调用看printf的参数是怎么从右往左压栈的。这套流程完整走完一个函数调用的机器级影像基本就齐了。3.3 项目复现的取舍哪些直接做哪些先看再补课件里的测试程序难度不一如果每个都从头复现时间不够挫败感也强。我一般按三个等级取舍二十行以内的函数直接做必须亲手跟完六十行左右的模块值得做做完能覆盖一类完整逻辑超过百行且交互复杂的程序先看演示再选核心路径做不要想着全量复现。样本规模建议方式判断标准二十行以内直接跟完并写注释能说出每个call的参数来源六十行左右还原主流程能画出函数调用关系说明返回值去向百行以上复杂交互只跟核心路径能指出关键API和输入输出关系这个取舍的底层逻辑是逆向能力的增长靠完整闭环的小样本不靠看一遍复杂样本。小样本能让你同时练到单步、栈回溯和API识别复杂样本在你水平不够时基本只会消耗耐心收获非常有限。如果你已经开始接触第三阶段的项目建议先做说清模块职责这一步程序从用户输入到输出结果中间经过了哪几个函数每个函数处理了什么。说得出来再考虑深入还原内部实现。这个顺序能把有限时间花在刀刃上。4. 搭一套能跑通的最小工作台工具链、环境与常用命令4.1 调试器选型与基础设置x64dbg 为主、OllyDbg 只做对照做这个方向Windows平台的调试器主流选择是x64dbg。它是开源的支持32位和64位程序插件生态比老牌调试器更主动对新手的断点、内存窗口和脚本操作都比较友好。OllyDbg在32位老样本分析时仍有位置但它的更新节奏慢处理现代编译器的产物时误报和崩溃较多。我一般建议把x64dbg作为主调试器OllyDbg只留在需要对照老教程场景时用。安装之后先做两步基础设置。第一步进入选项→调试选项→事件取消系统断点暂停。系统断点是调试器刚附加到进程时的一次暂停对新手容易造成程序还没跑代码就在系统DLL里的错觉把它关掉后让程序直接跑到入口后续分析更干净。第二步在异常选项里把不关心的常见异常设为忽略并记录日志调试时不会被一堆C异常打断。提示设置完这两项后重新打开一个练习程序验证一下能直接停在主模块入口就是对的。4.2 环境搭建与编译命令从零跑通一个可调试的样本需要准备的不仅仅是一个调试器还要有一个能编译练习样本的C环境。Windows下常见是MinGW-w64安装完后在命令行验证。先确认gcc可用然后编译练习样本这两步是每次搭建工作台都要走的固定动作。# 确认 gcc 可用 gcc --version能看到版本信息就说明编译环境就绪。接着把上一章的practice1.c编译出来# 编译练习样本保留符号并关闭优化 gcc -g -O0 -o practice1.exe practice1.c-g参数保证调试符号存在-O0关闭优化这两个参数同时用调试器才能把汇编指令和源码行对上。没有-g也能调试但你会失去符号信息看到的是纯地址对新手不友好开了优化也不是不能跟但循环展开和内联会让栈帧关系非常难认基础阶段不建议用。x64dbg打开practice1.exe后常用的操作全部集中在几个快捷键里先记熟下面这张表快捷键/操作作用使用场景F2切换断点在感兴趣的地址暂停F7单步进入进入call内部F8单步跳过不进入call直接越过CtrlG跳到地址快速定位CtrlF搜索指令/常量/字符串找特征运行到用户代码从系统代码返回到主模块常用在API断点之后F7和F8的选择是新手最容易困惑的地方。原则很简单当一行汇编是call且你想看内部实现时按F7其余情况按F8。如果你在printf这类库函数里被带到系统DLL出不来就用运行到用户代码它会自动回到主模块的下一个断点或入口附近省去手动跟几百条库代码的麻烦。有一些细节会影响跟读体验。把调试选项→事件里的入口断点和系统断点分开理解入口断点是你需要的系统断点是不需要的。保持入口断点打开能让程序一加载就停在程序入口。另外x64dbg的32位和64位版本是两个独立程序双击打开时注意别选错这个错误极其常见症状是打开程序后一堆寄存器显示不全。4.3 静态分析兜底用反编译输出验证动态跟踪结果动态跟踪能告诉你程序在这个点做了什么但很难让你一眼看到全貌。所以工作台里还要配一个静态分析工具用反编译输出做验证常用的是跨平台的Ghidra。它不需要在目标机常驻自习阶段用来看流程再合适不过。用Ghidra配合动态跟踪的常见流程是这样第一步在Ghidra里导入目标程序语言选项选对架构比如64位gcc产物对应x86:LE:64:gcc第二步让自动分析跑完在符号树里找到main函数第三步在反编译视图里看main如何调用wrap、wrap如何调用add这段C风格伪代码和你在调试器里跟到的汇编是对得上的第四步遇到一个关键地址时用交叉引用功能查看谁引用了它确认调用来源。这里要特别说明顺序。不要一上来就开Ghidra做静态全量分析几万个函数会让你直接迷失。正确节奏是先用动态跟踪确认几个关键地址再回到静态窗口里看上下文。动态负责定位静态负责补全顺序反了就是给自己挖坑。5. 避坑与排查逆向新手最容易翻车的五个场景5.1 断点一设程序就崩溃现象在练习程序里挑了某个地址按F2继续运行时程序直接崩溃或者弹出一个说不清来源的异常。原因大多数情况是断点下在了模块加载前的位置或者下在了共享系统代码段。INT3断点本质是改写指令字节如果这个地址所在的模块还没有完成加载改写就会产生不一致在系统代码里下普通断点也可能触发完整性校验。解决先把系统断点暂停关掉让程序跑到入口确认停在主模块地址段后再下断。对API函数下断点时用条件断点代替普通断点条件可以设为寄存器等于某个特征值。这样既能让断点命中又不会因为每次调用都触发而干扰分析。实践里还有一个变体同一个断点位置在模块重载后失效重载后重新下断即可不要怀疑是调试器坏了。5.2 ESP定律用不灵现象课件里讲壳处理时提到了ESP定律自己照做却找不到入口点程序经常跑飞。原因ESP定律依赖标准栈帧特征传统壳的入口常用pushad再对ESP下断这个流程在遇到新壳或加了反调试机制的样本时不成立新壳不保留栈顶特征断点还没生效就被检测到。解决先用PE查看工具看壳类型判断是否适合这条路对练习壳可以按标准流程做对复杂目标则改用内存断点或硬件断点结合单步跟踪找入口。记住ESP定律只是一个技巧不是万能钥匙。判断边界很简单如果程序入口不是标准的pushad开头直接放弃这条路而不是反复调断点位置。5.3 跟完一遍回头什么也没记住现象花一晚上跟完一个程序第二天醒来只剩好像有个call细节全部丢失。原因没有边跟边记录全程靠记忆硬扛。人脑对几十个地址和参数的短期记忆撑不过一夜这在调试分析里非常正常不是脑子不行。解决在调试器里给关键指令加注释同时按函数维度做记录把入口参数→返回值→调用者列成表。每跟完一个函数暂停一次用一两句话概括这个函数做了什么、和上一个函数什么关系。形式上不用讲究关键是逼自己输出。地址指令摘要寄存器变化我的理解0x401005call 0x401030EAX变参进入add函数0x401040add eax, ebxEAX结果完成加法并返回哪怕只记三四行也比空手强。记录的意义在于给第二天留线索而不是写一份完美文档。5.4 字符串搜索搜不到关键词现象程序界面上的提示文字能在字节层面看到但在反汇编里搜索关键词却搜不到。原因字符串可能是UTF-16编码而搜索时按ASCII处理或者字符串被拆分、加密存放运行时才拼接还原。解决在调试器搜索类型里切换编码检查UTF-16也可以在Ghidra里让分析器先识别字符串再交叉引用。搜不到别急着怀疑工具先确认编码和跨模块搜索范围再考虑字符串是否被动态构造。还有一个细节有些提示文字来自外部配置文件或资源段根本不在程序代码段里搜索时要把范围扩大到整个模块。5.5 静态分析函数一片不知道该看哪个现象把程序导入Ghidra后看到上万个函数完全不知道从哪里入手。原因没有先用动态跟踪划定范围直接进入静态全量分析被函数数量淹没。上万个函数里真正和目标逻辑相关的可能只有几十个其余都是运行库和启动代码。解决先跑到目标程序的核心逻辑附近记下一个或几个关键地址再回Ghidra里看这些地址所在函数的反编译结果。顺着关键函数找交叉引用从谁调用了它反推出整个调用链。动态定位、静态补全这个顺序任何时候都不要反否则静态窗口会变成一座迷宫。6. 学完怎么验证用一次栈回溯把整套功夫串起来课件学完怎么知道自己是会了还是感觉会了我常用的自测项目是做一次完整的栈回溯拿一个不带源码的练习程序只靠调试器从某个API断点一路回到main。整个过程能把寄存器、栈帧、调用约定、API识别和静态验证串在一起。具体做法是还是用刚才那个三层调用的样本编译时去掉源码路径在调试器里对printf入口下断点。断下后先看栈窗口顶部确认返回地址接着顺着返回地址回到wrap函数内继续向上找是谁调用了wrap再结合反汇编窗口确认参数是通过寄存器还是栈传递。最后把这条链路在纸上写清楚写到返回地址→函数名→上一级函数的格式就行。验证标准有三条第一不看笔记能说出三层调用链的参数流向第二能解释为什么返回地址一定出现在栈顶而不是别的寄存器第三能在静态分析工具里通过交叉引用找到同一个调用点。三条都满足说明动态和静态已经形成闭环。我当年就是跳过了这个自测环节直接冲去跟一个更复杂的样本结果卡在返回地址怎么还原到调用者这个问题上回头补了两天才理顺。从那以后每学完一个专题都先写一个二十行以内的验证样本把最核心的一个概念跑瓷实。滴水逆向三期课件这套资料内容本身从来不是难难的是动手够不够动手够不够拿这个栈回溯自测一验就清楚。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑