墨锋
Published on 2025-03-23 / 15 Visits
0
0

[翻译]FRIDA官方文档-教程-Android

Android

在本教程中,我们将展示如何在 Android 设备上进行函数跟踪。

设置你的 Android 设备

在开始之前,你需要先对设备进行 root(如果你还没有这样做的话)。从技术上讲,也可以在不 root 设备的情况下使用 Frida,例如通过重新打包应用程序以包含 frida-gadget,或使用调试器实现相同的目标。但在本教程中,我们将专注于最简单的情况:已 root 的设备。

另外请注意,我们最近的测试主要在运行 Android 9 的 Pixel 3 上进行。较旧的 ROM 可能也可以工作,但如果你遇到一些基本问题,例如 Frida 在启动应用程序时导致系统崩溃,这是由于 ROM 特定的问题。我们无法在所有可能的设备上进行测试,因此我们依赖你的帮助来改进这一点。然而,如果你刚刚开始使用 Frida,强烈建议使用运行最新官方软件的 Pixel 或 Nexus 设备,或者使用尽可能接近 AOSP 的设备。另一个选择是使用模拟器,最好是使用 Google 提供的 Android 9 模拟器镜像(arm 或 arm64)。(x86 也可能有效,但测试较少。)

你还需要 Android SDK 中的 adb 工具。

首先,从我们的 发布页面 下载适用于 Android 的最新 frida-server 并解压缩。

 $ adb shell getprop ro.product.cpu.abilist # 检查设备的 CPU 类型
 ​
 $ unxz frida-server.xz

现在,让我们在设备上运行它:

 $ adb root # 可能需要
 $ adb push frida-server /data/local/tmp/
 $ adb shell "chmod 755 /data/local/tmp/frida-server"
 $ adb shell "/data/local/tmp/frida-server &"

某些应用程序可能会检测到 frida-server 的位置。将 frida-server 二进制文件重命名为随机名称,或将其移动到其他位置(例如 /dev)可能会解决问题。

在最后一步中,请确保以 root 身份启动 frida-server,即如果你在已 root 的设备上执行此操作,可能需要使用 su 并从该 shell 中运行它。

在生产版本上使用 adb

如果在运行 adb root 后出现 adbd cannot run as root in production builds 错误,你需要在每个 shell 命令前加上 su -c。例如:adb shell "su -c chmod 755 /data/local/tmp/frida-server"

接下来,确保 adb 能够识别你的设备:

$ adb devices -l

这还将确保 adb 守护进程在你的桌面上运行,无论你是通过 USB 还是 WiFi 连接设备,Frida 都能发现并与之通信。

快速测试

现在,在你的桌面上,确保基本功能正常工作。运行:

$ frida-ps -U

这应该会给你一个类似于以下的进程列表:

   PID 名称
  1590 com.facebook.katana
 13194 com.facebook.katana:providers
 12326 com.facebook.orca
 13282 com.twitter.android
 …

很好,我们可以开始了!

跟踪 Chrome 中的 open() 调用

好了,让我们来玩点有趣的。在你的设备上启动 Chrome 应用,然后回到桌面并运行:

 $ frida-trace -U -i open -N com.android.chrome
 上传数据...
 open: 自动生成的处理器 …/linker/open.js
 open: 自动生成的处理器 …/libc.so/open.js
 开始跟踪 2 个函数。按 Ctrl+C 停止。

现在只需在 Chrome 应用中随意操作,你应该会看到 open() 调用不断出现:

 1392 ms open()
 1403 ms open()
 1420 ms open()

你现在可以实时编辑上述 JavaScript 文件,同时阅读 man open,并开始深入挖掘你的 Android 应用程序。

构建你自己的工具

虽然像 fridafrida-trace 等 CLI 工具确实非常有用,但有时你可能希望构建自己的工具,利用强大的 Frida API。为此,我们建议阅读关于 函数消息 的章节,并且在你看到 frida.attach() 的地方,只需将其替换为 frida.get_usb_device().attach()


原文链接:Android | Frida • A world-class dynamic instrumentation toolkit

翻译来源:DeepSeek


Comment