教材介绍 配套实验

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

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



Lab4 Frida动态插桩

一、实验目标

1. 学习和理解adb调试工具的基本使用方法,能够熟练使用adb工具的常用命令;

2. 熟悉Frida动态插桩工具的基本使用方法,能够根据需求使用Frida对Java层代码进行动态插桩。

二、前置准备

1. 知识学习

进行本实验前请先完成教材第2章、第5章和第6章的学习,主要包括2.2.2节安卓应用调试环境搭建,5.1.1节逆向工具Jadx的使用。

2. web服务搭建

安卓官方安装adb工具,并将其添加到环境变量。

常用命令如下:

ADB命令 描述
adb devices 查看手机设备
adb install package 安装应用
adb shell 连接终端的shell
adb shell pm list packages -3 查看手机里所有的第三方包名,如果已经在shell,则不需要加adb shell
adb push D:/xx.text /sdcard/xx.text 将主机上的文件发送到手机
adb pull /sdcard/xx.text D:/xx.text 将手机上的文件下载到主机
adb shell am start -n 包名/类的全名 启动导出的活动
adb logcat 查看log日志
adb shell dumpsys activity top | grep ACTIVITY 查看当前运行的Activity
adb shell getprop ro.product.cpu.abi 查看手机的abi

3. Frida环境配置

pip3 install frida pip3 install frida-tools pip3 show frida 查看frida的版本,默认安装最新的16.2.1

首先需要配置python3环境,之后使用pip/pip3下载Frida相关的包

下载与frida版本一致的frida server,例如arm64的设备下载frida-server-16.2.1-android-arm64。将server通过adb工具传输到手机,赋予可执行权限并启动。

以frida-server-16.2.1-android-arm64为例:

adb shell su cd /data/local/tmp chmod 777 frida-server-16.2.1-android-arm64 ./frida-server-16.2.1-android-arm64

4. Frida脚本自动补全

1. 从NodeJs官网安装Node.js

2. 编写JS脚本可参考Frida官网的JS API,为了方便编写,可结合VS Code配置脚本自动补全功能。使用cnpm/npm i @types/frida-gum将模块安装到当前目录。

3. 使用VS Code打开该目录,创建test.js之后即可使用Frida代码补全功能。

5. Frida基本使用

使用流程:编写注入脚本,注入指定进程

frida -U XXX -l frida_1.js XXX是包名、进程名 -l 后跟注入的脚本

frida -U -p[pid] -l frida_1.js 指定进程id注入,可根据frida-ps -U | grep “xxx” 寻找进程id

frida -U --no-pause -f XXX -l frida_1.js 使用spwan模式启动,注入时机较早

编程语法:注入java层的代码在Java.perform下编写,具体格式如下:

function hook_java() { Java.perform(function () { ... }); }

其他使用方法可参考官网API,或网上的学习资料。推荐阅读

三、任务描述

本实验的任务需要使用Frida工具对Java层进行Hook,完成以下四个任务,最终获取Flag。

任务1 修改返回值

启动应用是一个登录页面,需要输入用户名和密码。使用Frida Hook相关函数,实现任意用户名密码登录。

任务2 修改变量的值

登录后进入第二关,需要修改变量让自己成为VIP,并且设置cnt的值大于100。

任务3 主动调用函数

根据页面提示,使用Frida主动调用相关函数,设置文本显示框的值为Secret的值。

任务4 动态加载dex的Hook

通过验证,获取Flag值。

四、结果提交形式

1. lab4_code.zip:本次实验中的实验代码,每个任务编写一个Frida函数,并将通过该任务的Frida代码写在该函数内,第一个任务对应函数名为hookLogin、第二个为hookChall1、第三个为hookChall2,第四个为hookChall3

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

五、评分标准

1. 完成任务1(10%):通过注入实现任意用户名和密码登录

2. 完成任务2(20%):成功修改变量值

3. 完成任务3(20%):成功调用函数修改文本

4. 完成任务4(20%):成功获得正确的Flag值

5. 实验报告(30%):

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

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

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

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

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

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

六、附件内容说明

1. FridaLab.apk:本实验的分析目标

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