教材介绍 配套实验

    感谢您关注我们的《移动安全》教材。如果您想要相关资源以及答案,请将您的姓名、教育邮箱、学校及学院信息发送至 xxxxx@xxx.com。

    请您放心,我们承诺将严格保护您的信息安全。感谢您的信任与支持!



Lab2 移动应用逆向分析

一、实验目标

1. 理解并掌握移动应用的逆向工程流程与技术,提高对移动应用结构和功能的认知与评估能力;

2. 学习使用安卓逆向工具Jadx,并熟练运用其对安卓应用进行逆向分析。

二、前置准备

1. 理论知识学习

进行本Lab前请先完成教材第5章的学习。

2. Jadx逆向工具

Jadx(Dex to Java Decompiler)是一款开源的反编译器,主要用于将安卓应用程序的DEX和APK文件转换成Java源代码。根据用户的操作系统和偏好,安装Jadx可以通过几种不同的方法进行。以下是一些常见的安装Jadx的方法:

• 下载预编译的二进制文件:适用于所有主流操作系统(Windows、macOS、Linux)

• 下载及解压:访问Jadx主页,在“Release”部分找到最新版本,下载适用于用户操作系统的预编译压缩文件(如.zip或.tar.gz)并解压文件到用户选择的目录

• 运行可执行文件:解压完成后,在解压目录的bin文件夹下,有两个文件,jadx(命令行版本应用程序)和jadx-gui(图形界面版本应用程序)。通过直接运行可执行文件(在Windows上是.bat文件,在Linux和macOS上是.sh文件)即可启动Jadx

• 通过包管理器安装:适用于部分操作系统

• 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

这些命令会自动下载和安装Jadx及其所有依赖项,安装好的Jadx会被添加到系统路径下,可以从任何位置通过命令行直接启动。对于某些操作系统(如macOS),系统路径可能不会自动更新,可能需要手动将Jadx的安装路径添加到系统的环境变量中

• 从源代码编译

如果需要使用最新的开发版本或添加自定义功能的Jadx,可以选择从源代码编译,其步骤如下:

• 安装JDK:确保安装了11版本或以上的Java Development Kit (JDK)

• 克隆Jadx的GitHub仓库:git clone https://github.com/skylot/jadx.git

• 进入克隆的仓库目录:cd jadx

• 编译并构建项目:./gradlew dist(注:在Windows上,使用gradlew.bat而非gradlew)

• 构建完成后,用于运行jadx的可执行脚本位于build/jadx/bin,并打包到build/jadx-\.zip。

三、任务描述

任务1 分析所有组件

Android应用的组件是构成应用的基础,它们提供了系统或用户与应用交互的入口。在本任务中,你需要对提供的“lab1.apk”文件进行逆向分析。你需要做的第一件事是找出APK中包含的所有应用组件(注意,这里不包括安卓库中的组件)。接下来,你需要搜集每个组件的基本信息,这包括:

• 组件在AndroidManifest.xml文件中的声明

• 组件的类定义

• 调用该组件的代码位置

请注意,你需要将找到的组件及其信息记录在实验报告中。为了帮助你整理信息,我们已经准备了一个示例表格。每个组件的信息都应该使用单独的表格来记录。

记录格式:

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

任务2 补全项目代码

“source code”目录下提供了用于编译“lab2.apk”的原始项目代码,但是,有4个Java函数的代码不完整。为了完成这个任务,你需要:

1. 通过比较原始代码和逆向分析后的代码,找出这4个不完整的函数

2. 在原始项目中补全这4个函数

3. 编译项目并生成一个新的APK,以验证你的修改是否正确

在进行代码补全时,请注意以下几点:

• Android使用类R中的常量来标识资源,例如,“R.id.button1”在源代码中代表一个按钮,编译后会变成类似于0x7F080057的值

• 你需要将这些常量恢复为正确的类变量

• 你可以在Android Studio中打开并编译源项目,以检查你的代码是否正确

四、结果提交形式

1. lab2_code.zip:本次实验中TaskB的实验代码,包括五个Java文件以及你编译的APK文件

2. lab2.docx:本次实验的实验报告,包括实验环境配置、实验步骤、实验结果和实验心得等内容

五、评分标准

1. 完成任务1(20%):5个组件,每个正确分析占4%

2. 完成任务2(50%):4个函数每个正确获得10%,成功编译APK并运行获得10%

3. 实验报告(30%):

• 内容完整性和原创性(20%)

• 报告包含实验目的、详细步骤、结果、总结思考等关键部分

• 代码设计遵循代码规范,有必要的解释说明

• 报告撰写和表达(10%)

• 报告格式规范,语言表达清晰

• 能够适当使用图表等辅助说明报告内容

六、附件内容说明

1. lab2.apk:taskA需要逆向的apk文件

2. source code文件夹:taskB需要补全的源码

地址:上海市杨浦区淞沪路2005号复旦大学江湾校区二号交叉学科楼六楼、七楼              复旦大学系统软件与安全实验室              联系邮箱:wanqi_zhang@fudan.edu.cn