移动应用逆向分析
学习使用Jadx逆向工具,掌握移动应用逆向工程流程与技术
实验目标
- 理解并掌握移动应用的逆向工程流程与技术,提高对移动应用结构和功能的认知与评估能力;
- 学习使用安卓逆向工具 Jadx,并熟练运用其对安卓应用进行逆向分析。
前置准备
1. 理论知识学习
进行本 Lab 前请先完成教材第5章的学习。
2. Jadx 逆向工具
Jadx(Dex to Java Decompiler)是一款开源的反编译器,主要用于将安卓应用程序的 DEX 和 APK 文件转换成 Java 源代码。
根据用户的操作系统和偏好,安装 Jadx 可以通过几种不同的方法进行。以下是一些常见的安装方法:
- 下载预编译的二进制文件:适用于 Windows、macOS、Linux。
- 下载及解压:访问 Jadx主页,在 Release 部分下载对应系统的预编译压缩包并解压。
-
运行可执行文件:解压后在 bin
目录下可使用
jadx(命令行)和jadx-gui(图形界面)。 -
通过包管理器安装:Arch Linux
使用
sudo pacman -S jadx,Debian/Ubuntu 使用sudo apt-get install jadx,macOS 使用brew install jadx,Flathub 使用flatpak install flathub com.github.skylot.jadx。 -
从源代码编译:安装 JDK 11+
后执行
git clone https://github.com/skylot/jadx.git、cd jadx、./gradlew dist(Windows 使用gradlew.bat)。构建后的脚本位于build/jadx/bin。
任务描述
任务1 分析所有组件
找出 APK 中包含的所有应用组件,搜集每个组件的基本信息:组件在 AndroidManifest.xml 文件中的声明、组件的类定义、调用该组件的代码位置。
请注意,你需要将找到的组件及其信息记录在实验报告中。为了帮助整理信息,每个组件建议按如下格式记录:
| 组件名 | LoginActivity |
|---|---|
| 组件在 AndroidManifest.xml 文件中的声明 | |
| 组件的类定义 | |
| 调用该组件的代码位置 |
任务2 补全项目代码
"source code"目录下提供了用于编译"lab2.apk"的原始项目代码,但是,有4个 Java 函数的代码不完整。通过比较原始代码和逆向分析后的代码,找出这4个不完整的函数并补全。
- 通过比较原始代码和逆向分析后的代码,找出这4个不完整的函数;
- 在原始项目中补全这4个函数;
- 编译项目并生成新的 APK 验证修改是否正确。
在进行代码补全时,请注意以下几点:
-
Android 使用类 R
中的常量标识资源,例如
R.id.button1在编译后会变成类似0x7F080057的值; - 需要将这些常量恢复为正确的类变量;
- 可以在 Android Studio 中打开并编译源项目检查代码正确性。
结果提交形式
- lab2_code.zip:本次实验中 TaskB 的实验代码,包括五个 Java 文件以及你编译的 APK 文件
- lab2.docx:本次实验的实验报告
评分标准
1. 完成任务1(20%)
5个组件,每个正确分析占4%
2. 完成任务2(50%)
4个函数每个正确获得10%,成功编译 APK 并运行获得10%
3. 实验报告(30%)
内容完整性和原创性(20%)
- 报告包含实验目的、详细步骤、结果、总结思考等关键部分
- 代码设计遵循代码规范,有必要的解释说明
报告撰写和表达(10%)
- 报告格式规范,语言表达清晰
- 能够适当使用图表等辅助说明报告内容
实验资源
Lab2 实验资源包
包含本次实验所需的全部资源文件
资源包内容
lab2.apk
taskA 需要逆向的 APK 文件
source code/
taskB 需要补全的源码文件夹