安卓逆向这门手艺,学的人不少,但真正能把 APK 拆开、看懂、改掉、再装回去的人不多。多数人卡在同一个地方:工具会用,原理说不清。反编译出来的 Smali 像天书,看到 ELF 结构就划走,动态调试断点打上去却不知道停在哪。这门课要解决的就是这些具体的卡点——不是带你逛一圈工具菜单,而是逼你把底层的几块硬骨头啃下来。
先确认你是不是需要补这一块
如果你现在的状态是下面几种之一,这门课的内容对你就是刚需:
- 能用 jadx 或 apktool 出结果,但 Smali 里跳转一多就理不清寄存器怎么传递。
- 知道 adb 能装能卸,但遇到要抓 FD、看文件描述符、连 Charles 抓包就接不上。
- 想做动态调试,却分不清 Dalvik 虚拟机层和 Native 层的断点各管什么。
- 看到 so 文件就绕开,觉得 ARM 汇编跟自己没关系。
这些缺口不是靠多看几篇博客能补上的。它们属于同一个能力面:你得同时理解 Android 的运行机制和二进制文件本身的样子。课程从 Dalvik 虚拟机和 Smali 的关系切进去,再往 ELF 文件结构、ARM 汇编指令延伸,这条线是有意为之的——先让你看懂字节码,再让你看懂机器码。
Smali 和 Dalvik 这块,别只当语法背
课程里 Smali 的学习分了几讲,这说明它不是一次性丢给你一堆指令表。Dalvik 虚拟机那讲是前提:你要先明白 Android 为什么不用 JVM 那套、寄存器架构和栈架构差在哪,后面看 Smali 里的 .registers、move-result、invoke- 系列才不会靠死记。学完这部分,你应该能回答:一段 Smali 里方法调用的返回值到底被放进了哪个寄存器,以及为什么改一个判断分支有时候要连改好几行。
配套练习的方向也很直接:拿一个自己写的小 APK,反编译后找到某个按钮的点击逻辑,改掉它的跳转条件重新打包签名,让行为反过来。做得到,这关就算过了。
ELF 和 ARM 汇编,是分水岭
课程把 ELF 文件结构和 ARM 汇编指令放在靠后的位置,不是为了凑深度,而是因为这两块决定你能不能碰 Native 层。ELF 那部分讲的是文件本身的组织方式——段、节、符号表、程序头,这些名词你大概听过,但真正要问的是:一个 so 被加载时,哪些部分进了内存、哪些留在磁盘上。想清楚这个,后面看 IDA 里的地址才不会是孤立的数字。
ARM 汇编那讲是配套的。你不必写到能编译的程度,但至少要能读:函数序言怎么保存寄存器、参数从哪几个寄存器传、返回值放哪。看完这一节,你能回答的问题应该包括:为什么同一个函数在 ARM 和 Thumb 模式下反汇编结果不一样。
调试、抓包和 adb,是把手上的活干完
动态调试分讲展开,说明它有反复练的过程。断点打在哪、怎么跟寄存器、怎么观察调用栈,这些是纯手上功夫。FD 的介绍和 Charles 的安装放在一起,指向的是另一类场景:你想看一个 App 到底往外发了什么,光靠静态分析不够,得从文件描述符和网络流量两头对。adb 常用命令那讲是基础工具,别跳过——后面调试和抓包都会反复用到它。
看完你该能回答的问题
- 一个 APK 从 dex 到 Smali,方法和字段是怎么对应上的?
- ELF 里哪些节区在运行时才会被映射进内存?
- 动态调试时,Dalvik 层断点和 Native 层断点分别适合解决什么问题?
- 改了一处 Smali 之后,为什么有时候要重新签名才能装?
- 抓包抓不到数据,可能跟 FD 或证书校验的哪一环有关?
如果这些问题你现在答不上来,那就按课程顺序走,别跳。缺什么补什么,这几块补完,安卓逆向才算真正入门。
安卓逆向系列课程、
深入安卓底层,掌握逆向技巧
编辑点评
系统讲解安卓逆向技术,从ELF文件结构到Smali代码,实战性强。
⭐ 编辑推荐
本课程深入浅出地讲解了安卓逆向技术,涵盖ELF文件结构、Smali代码、动态调试等多个方面,适合对安卓逆向感兴趣的初学者和进阶者。
课程亮点
课程目录
📁 27-第二十七课 ELF是什么 ELF的文件结构的介绍
27-第二十七课 ELF是什么 ELF的文件结构的介绍.mp4 [245.0 MB]
📁 08-第八课 Smali代码的学习(一)
08-Smali代码的学习(一).mp4 [80.0 MB]
📁 19-第十九课 动态调试代码方法(一)
19-第十九课 动态调试代码方法(一).mp4 [202.6 MB]
📁 10-第十课 Smali代码的学习(三)
10-第十课 Smali代码的学习(三).mp4 [94.1 MB]
📁 28-第二十八课 ARM汇编指令的认识
28-第二十八课 ARM汇编指令的认识.mp4 [311.0 MB]
📁 24-第二十四课 FD的介绍与使用与Charles的安装
24-第二十四课 FD的介绍与使用与Charles的安装.mp4 [194.0 MB]
📁 12-第十二课 adb一些常用命令的介绍使用
12-第十二课 adb一些常用命令的介绍使用.mp4 [133.7 MB]
📁 07-第七课 认识Dalvik虚拟机与Smali代码
07-第七课 认识Dalvik虚拟机与Smali代码.mp4 [69.7 MB]
📁 29-第二十九课 ARM汇编指令速成学习
29-第二十九课 ARM汇编指令速成学习.mp4 [144.0 MB]
📁 13-第十三课 JAVA反编译工具的了解介绍
13-第十三课 JAVA反编译工具的了解介绍.mp4 [249.1 MB]
📁 06-第六课 DEX文件的了解
06-第六课 DEX文件的了解.mp4 [225.9 MB]
📁 26-第二十六课 app自定义算法分析用易语言实现算法实战
26-第二十六课 app自定义算法分析用易语言实现算法实战.mp4 [209.2 MB]
📁 03-第三课 工具的介绍与简单使用
03-第三课 工具的介绍与简单使用.mp4 [191.5 MB]
📁 04-第四课 APK的结构介绍与解析
04-4.APK的结构介绍与解析.mp4 [77.2 MB]
📁 11-第十一课 Smali代码的学习(四)
11-第十一课 Smali代码的学习(四).mp4 [139.4 MB]
📁 25-第二十五课 从FD抓APP程序的数据到算法分析实战
25-第二十五课 从FD抓APP程序的数据到算法分析实战.mp4 [247.8 MB]
📁 21-第二十一课 实例讲解动态调试定位查找关键点
21-第二十一课 实例讲解动态调试定位查找关键点.mp4 [117.0 MB]
📁 23-第二十三课 游戏内购实战(二)
23-第二十三课 游戏内购实战(二).mp4 [291.0 MB]
📁 05-第五课 简单初试一个APK的修改
05-第五课 简单初试一个APK的修改.mp4 [121.8 MB]
📁 22-第二十二课 游戏内购实战(一)
22-第二十二课 游戏内购实战(一).mp4 [387.9 MB]
📁 16-第十六课 实战APP程序的Smali代码修改(二)
16-第十六课 实战APP程序的Smali代码修改(二).mp4 [458.5 MB]
📁 09-第九课 Smali代码的学习(二)
09-第九课 Smali代码的学习(二).mp4 [152.8 MB]
📁 18-第十八课 初探APP签名验证并尝试SO层的修改
18-第十八课 初探APP签名验证并尝试SO层的修改.mp4 [241.0 MB]
📁 17-第十七课 实战APP程序的Smali代码修改(三)
17-第十七课 实战APP程序的Smali代码修改(三).mp4 [283.7 MB]
📁 01-第一课 JAVA环境搭建与系统变量配置
01-我要说的一些话.mp4 [91.1 MB]
01-1.JAVA环境搭建与系统环境变量配置.mp4 [64.0 MB]
📁 02-第二课 SDK与一些工具的安装与配置
02-第二课 SDK与一些工具的安装与配置.mp4 [119.6 MB]
📁 14-第十四课 尝试修改程序逻辑达到破解目的
14-第十四课 尝试修改程序逻辑达到破解目的.mp4 [235.9 MB]
📁 15-第十五课 实战APP程序的Smali代码修改(一)
15-第十五课 实战APP程序的Smali代码修改(一).mp4 [207.5 MB]
📁 20-第二十课 动态调试代码方法(二)
20-第二十课 动态调试代码方法(二).mp4 [153.4 MB]
00-夸克网盘免费领1T空间教程(新、老用户均可).pdf [446.2 KB]适合人群
- 安卓开发爱好者
- 逆向工程师
- 安全研究人员
学习收获
祝您学习愉快!
学有所成,前程似锦!






