配套实验资源

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

Lab4 高级技术

Frida动态插桩

学习Frida动态插桩工具,对Java层代码进行动态Hook

实验目标

  1. 学习和理解 adb 调试工具的基本使用方法,能够熟练使用 adb 工具的常用命令;
  2. 熟悉 Frida 动态插桩工具的基本使用方法,能够根据需求使用 Frida 对 Java 层代码进行动态插桩。

前置准备

1. 知识学习

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

2. adb 环境配置

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

常用命令如下:

ADB 命令 描述
adb devices 查看手机设备
adb install package 安装应用
adb shell 连接终端的 shell
adb shell pm list packages -3 查看手机里所有的第三方包名
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 工具传输到手机,赋予可执行权限并启动。

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 值。

结果提交形式

  • lab4_code.zip:本次实验中的实验代码,每个任务编写一个 Frida 函数,并将通过该任务的 Frida 代码写在该函数内,第一个任务对应函数名为 hookLogin、第二个为 hookChall1、第三个为 hookChall2,第四个为 hookChall3
  • lab4.docx:本次实验的实验报告,包括实验环境配置、实验步骤、实验结果和实验心得等内容

评分标准

1. 完成任务1(10%)

通过注入实现任意用户名和密码登录

2. 完成任务2(20%)

成功修改变量值

3. 完成任务3(20%)

成功调用函数修改文本

4. 完成任务4(20%)

成功获得正确的 Flag 值

5. 实验报告(30%)

内容完整性和原创性(20%)
  • 报告包含实验目的、详细步骤、结果、总结思考等关键部分
  • 代码设计遵循代码规范,有必要的解释说明
报告撰写和表达(10%)
  • 报告格式规范,语言表达清晰
  • 能够适当使用图表等辅助说明报告内容

实验资源

Lab4 实验资源包

包含本次实验所需的全部资源文件

下载资源包
资源包内容
FridaLab.apk

本实验的分析目标 APK 文件