逆向题在 CTF 里属于那种「一票否决」的题型:你读得懂汇编、找得到校验分支,分数就是你的;读不懂,看着别人交 flag,你只能盯着 IDA 的伪代码发呆。很多人卡在这里不是因为不会编程,而是因为缺了几块具体能力——不会看 smali、不知道 frida 挂在哪、没碰过符号执行、遇到非 C 语言的题目直接放弃。这门课针对的就是这些缺口,不绕弯子,缺什么补什么。

它到底解决什么问题

先说最直白的一句话:它解决的是「知道逆向是什么,但真正拿到样本无从下手」的问题。CTF 逆向和普通的软件破解不太一样,它往往是一个小体积、单一逻辑、故意设置校验的程序,考的是你能不能快速定位关键判断、还原算法、写脚本跑出正确答案。所以它不要求你会写几万行工程代码,但要求你熟悉工具链、熟悉常见语言编译出来的产物长什么样、熟悉动态调试和 hook 的手感。这门课把这几个环节拆开讲,一块一块过。

第二个要解决的问题是覆盖面窄。不少人只刷过 C/C++ 的逆向题,一遇到 Python 打包的、Go 编译的、C# 写的 Unity 游戏、或者 Android 上的 App 就懵了。这恰恰是现在比赛和实际工作里越来越常见的形式。课程里专门分出了 Python、C#、Golang 几个板块,还给了 Android 的 Java 层与 Native 层逆向内容。不是让你每样都精通,而是让你碰到时至少知道从哪切进去、用什么工具、往哪个方向跟。

第三个问题是工具只会点按钮。IDA 打开、F5 一按,这是起点不是终点。真正拉开差距的是 Python 脚本、符号执行、约束求解这些「让机器替你算」的手段。课程里有专门的杂项板块处理这块,包括 z3 求解等式、angr 做符号执行、以及 capstone/keystone/unicorn 这套反汇编、汇编、模拟执行的组合。这些工具一旦用熟,很多需要手推的题能直接交给脚本。

适合什么基础来看

如果你完全没写过代码,这门课不适合你,先去把 Python 和一门编译型语言写熟。比较合适的起点是:能读懂 C 语言、知道指针和数组是什么;对汇编有一点印象,哪怕只认得常见的 mov、cmp、jmp、call;会用 Python 写小脚本,字符串处理和循环没问题。有这些,你就能跟上大部分内容。汇编部分如果生疏,可以在讲 C 语言逆向的段落里慢慢补,边看边查指令含义,不必先啃完一本汇编教材再来。

另一类适合的人是转岗或补课的在职人员。你可能写过几年业务代码,对底层没什么概念,现在想往安全方向靠,或者单纯想把「程序到底怎么跑」这件事搞清楚。这门课的价值在于它拿真实样本说话,你会看到编译后的程序长什么样、加壳之后怎么脱、反调试怎么绕。这些经验在普通的应用开发里学不到。需要提醒的是,它偏实战,不讲太多理论推导,想系统学编译原理或者操作系统底层的,还得另外找材料。

还有一类是已经打过几场比赛、但分数总在逆向题上卡住的人。你应该跳过基础介绍,直接从自己薄弱的那块切入:是 Android 不会,就从 Java 层逆向开始;是不会写求解脚本,就去看 angr 和 z3 那部分;是遇到 Go 就退,就顺着 Golang 逆向过一遍。带着具体问题看,效率比从头播完高得多。

建议先看哪几块

如果按依赖关系排,C 语言逆向这块应当先过。它会带你熟悉 IDA 的基本操作、看反汇编和伪代码、理解控制流,这是所有逆向工作的地基。紧跟着的杂项部分把符号执行和约束求解讲清楚,angr 和 z3 是 CTF 逆向里出镜率极高的两样东西,早点学会,后面遇到复杂校验的题会轻松很多。这两块看完,你才算真正有了「能动手」的状态。

之后再按兴趣或比赛需要挑语言分支。Python 打包的程序在题目里很常见,pyc 和字节码那两节讲的是怎么从编译产物倒推源码逻辑,pyinstaller 打包的拆解方式也在这里。Golang 和 C# 属于「遇到了不至于投降」的类型,前者带你快速入门语言特性再看示例程序,后者涉及普通 C# 程序和 Unity 游戏两种情况,Unity 那两节值得单独留意,因为游戏类题目近年在增加。

Android 部分建议放在有一定基础之后再碰,它内部又有层次。先看 Java 层的静态分析和 smali 指令、修改与回编译,把 smali 读顺了再进 frida hook;然后再往 Native 层走,学动态调试、代码隐藏技巧和 hook,最后才是加壳脱壳、反逆向对抗、以及 unidbg 这类进阶手段。这个顺序不要打乱,跳着看很容易在某一步卡死。每一节都建议跟着动手,光看不练等于没看。

学完能独立做什么

最直接的检验标准是:拿到一道没见过的逆向题,你能判断它是什么语言写的、用什么工具打开、关键的输入校验点在哪里,并且能写出一段脚本把答案算出来。这中间包括静态分析、动态调试、下断点、改内存、hook 函数、必要时用符号执行绕开复杂逻辑。这套流程走通一次,你就从「看别人解题」变成了「自己解题」。

再往上一层,合上课程之后你应该能回答这些问题:smali 里常见指令分别对应什么操作,怎么改完回编译还能跑;frida 在 Java 层和 Native 层的挂法有什么区别;程序加壳的原理是什么,常见的脱壳思路有哪几类;反调试有哪些常见手段,对应的绕过方式是什么;angr 适合什么样的题目、什么时候不该用它。如果你对这些能说清楚而不是含糊带过,说明学到位了。答不上来的,就回到对应板块再看一遍。

更实际一点,Android 那部分的收获是你能独立对一个 App 做基础的静态与动态分析:看懂它的 Java 逻辑、跟踪关键调用、必要时进到 so 层看 Native 实现。这不是让你去做违规的事,而是理解移动端程序的结构和安全边界。很多做移动开发的人学完这块,对自己写的代码被逆向时会暴露什么,会有一层新的认识。

资料怎么配合练习

我的建议是「一节内容配一道题」。看完某个知识点,立刻去找对应类型的题目练手,比如学完 z3 就找一道等式约束的题,学完 smali 就找一道纯 Java 层的 Android 题。不用贪多,一道题吃透比刷十道看题解强。做题时先自己卡一卡,卡到实在没思路再看别人的思路,然后关上题解自己复现一遍。这个复现的过程才是真正长本事的环节。

练习环境要提前搭好:IDA、Python 环境、frida、angr、z3 这些工具装齐,Android 部分还需要模拟器或真机加调试环境。工具装不上的坑往往比题目本身还磨人,建议在正式看课之前就把环境跑通,别一边看一边装,很容易被打断节奏。有条件的话准备一台独立的机器或虚拟机,避免工具之间互相干扰。

最后一点,别指望看完就等于会。逆向是靠手感堆出来的手艺,看十小时视频不如动手调一小时。把课程当成地图,用题目当练习场,哪个点模糊了就回去翻哪一段。带着问题看,带着题目练,一圈下来你会发现自己看汇编不慌了、遇到陌生语言不退了、写脚本也顺手了——这时候再看那些曾经卡住你的题目,就知道缺口填上了。

课程目录

📁 15 Android逆向
072.杂项-unidbg进阶使用(2).mp4  [204.3 MB]
071.杂项-unidbg进阶使用(1).mp4  [182.8 MB]
070.杂项-unidbg入门.mp4  [216.3 MB]
069.杂项-加壳原理与脱壳.mp4  [217.3 MB]
068.杂项-对抗反逆向手段(2).mp4  [197.8 MB]
067.杂项-对抗反逆向手段(1).mp4  [180.1 MB]
066.Native层逆向-frida hook(2).mp4  [156.5 MB]
065.Native层逆向-frida hook(1).mp4  [120.6 MB]
064.Native层逆向-常见代码隐藏技巧.mp4  [209.8 MB]
063.Native层逆向-动态调试.mp4  [148.5 MB]
📁 14 Android逆向
062.Java层逆向-frida hook(2).mp4  [184.2 MB]
061.Java层逆向-frida hook(1).mp4  [168.4 MB]
060.Java层逆向-静态分析技巧及操作.mp4  [382.2 MB]
059.Java层逆向-smali修改及回编译.mp4  [127.3 MB]
058.Java层逆向-常用smali指令.mp4  [147.7 MB]
057.基础知识-2.mp4  [193.8 MB]
056.基础知识-1.mp4  [150.6 MB]
📁 13 其他语言逆向-Golang
055.例题讲解与练习.mp4  [464.4 MB]
054.逆向示例程序.mp4  [182.0 MB]
053.Go语言快速入门.mp4  [164.2 MB]
📁 12 其他语言逆向-C#
052.Unity游戏-2.mp4  [332.9 MB]
051.Unity游戏-1.mp4  [204.3 MB]
050.普通C#程序.mp4  [186.8 MB]
📁 11 其他语言逆向-Python
049.pyinstaller打包拆解.mp4  [401.9 MB]
048.pyc文件.mp4  [189.5 MB]
047.字节码介绍.mp4  [155.6 MB]
📁 10 其他语言逆向-C++
046.汇编层面分析实例代码.mp4  [241.1 MB]
045.扩充语法及面向对象.mp4  [120.9 MB]
📁 09 C语言逆向-杂项
044.等式问题与z3的使用.mp4  [378.4 MB]
043.capstone、keystone与unicorn-2.mp4  [213.6 MB]
042.capstone、keystone与unicorn-1.mp4  [152.9 MB]
041.符号执行框架angr-2.mp4  [261.1 MB]
040.符号执行框架angr-1.mp4  [144.4 MB]
📁 08 C语言逆向-杂项
039.迷宫及数独问题-2.mp4  [179.0 MB]
038.迷宫及数独问题-1.mp4  [151.2 MB]
037.MFC图形化界面-2.mp4  [223.4 MB]
036.MFC图形化界面-1.mp4  [129.4 MB]
035.elf文件运行流程.mp4  [237.8 MB]
034.IDAPython常用函数介绍.mp4  [174.3 MB]
📁 07 C语言逆向-对抗保护混淆
033.ollvm-2.mp4  [151.4 MB]
032.ollvm-1.mp4  [137.5 MB]
031.指令虚拟化-2.mp4  [144.1 MB]
030.指令虚拟化-1.mp4  [128.1 MB]
029.自修改代码-2.mp4  [256.6 MB]
028.自修改代码-1.mp4  [179.5 MB]
027.反调试.mp4  [151.3 MB]
026.花指令.mp4  [162.4 MB]
025.upx压缩壳及其变种.mp4  [214.4 MB]
024.x64dbg工具使用.mp4  [187.7 MB]
📁 06 C语言逆向-常见算法识别
023.RSA与大数运算-2.mp4  [155.8 MB]
022.RSA与大数运算-1.mp4  [148.2 MB]
021.分组加密算法-2.mp4  [187.6 MB]
020.分组加密算法-1.mp4  [152.8 MB]
019.TEA系列加密算法-2.mp4  [120.1 MB]
018.TEA系列加密算法-1.mp4  [177.0 MB]
017.MD5摘要算法.mp4  [153.5 MB]
016.RC4加密算法.mp4  [157.0 MB]
015.base家族编码.mp4  [135.0 MB]
014.hex编码.mp4  [131.1 MB]
📁 05 C语言逆向-小试牛刀
013.提升IDA操作熟练度.mp4  [184.0 MB]
012.入门赛题带做.mp4  [176.2 MB]
📁 04 IDA使用
011.Linux虚拟机安装和Linux远程调试.mp4  [198.6 MB]
010.静态分析技巧及操作.mp4  [169.1 MB]
📁 03 x86架构
009.x86架构基础知识-4.mp4  [151.3 MB]
008.x86架构基础知识-3.mp4  [136.4 MB]
007.x86架构基础知识-2.mp4  [149.4 MB]
006.x86架构基础知识-1.mp4  [135.7 MB]
📁 02 C语言
005.常用语法和编程练习.mp4  [271.3 MB]
004.基本数据类型.mp4  [154.8 MB]
003.开发环境搭建mp4  [127.0 MB]
📁 01开班第一课
002.快速入门-Python.mp4  [189.6 MB]
001.开班第一课.mp4  [112.9 MB]