配套实验资源

《移动安全》教材配套实验,涵盖从环境配置到高级安全技术的完整实践体系

Lab2 安全分析

移动应用逆向分析

学习使用Jadx逆向工具,掌握移动应用逆向工程流程与技术

实验目标

  1. 理解并掌握移动应用的逆向工程流程与技术,提高对移动应用结构和功能的认知与评估能力;
  2. 学习使用安卓逆向工具 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.gitcd jadx./gradlew dist(Windows 使用 gradlew.bat)。构建后的脚本位于 build/jadx/bin

任务描述

任务1 分析所有组件

找出 APK 中包含的所有应用组件,搜集每个组件的基本信息:组件在 AndroidManifest.xml 文件中的声明、组件的类定义、调用该组件的代码位置。

请注意,你需要将找到的组件及其信息记录在实验报告中。为了帮助整理信息,每个组件建议按如下格式记录:

组件名 LoginActivity
组件在 AndroidManifest.xml 文件中的声明
组件的类定义
调用该组件的代码位置

任务2 补全项目代码

"source code"目录下提供了用于编译"lab2.apk"的原始项目代码,但是,有4个 Java 函数的代码不完整。通过比较原始代码和逆向分析后的代码,找出这4个不完整的函数并补全。

  1. 通过比较原始代码和逆向分析后的代码,找出这4个不完整的函数;
  2. 在原始项目中补全这4个函数;
  3. 编译项目并生成新的 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 需要补全的源码文件夹