15. Frida 入门与实战教程:动态 Hook 与逆向分析全面指南

1 frida介绍

Frida 是一个强大的动态二进制插桩(dynamic instrumentation)工具,主要用于逆向工程、安全研究、App 调试和分析等领域。

它允许你在运行时对本地应用程序(包括 Android、iOS、Windows、macOS、Linux 的原生和托管程序)进行动态修改或观察,无需修改原始二进制。

其主要功能如下:

  • 动态 Hook:可以在运行时 hook 任何函数(Java, native C/C++, Obj-C)
  • 跨平台支持*:支持 Android、iOS、Windows、Linux、macOS 等平台
  • 无须 Root/Jailbreak(可选):有些场景下 Frida 可以在无 root 环境下工作(需绕过限制)
  • 脚本化 :支持 JavaScript 和 Python 编写 hook 脚本
  • 远程调试 :可连接远程设备并注入目标程序进行分析

运行原理:

+--------------+         +------------------+
| 你写的脚本(JS/Py) |<=====>|  Frida Server (on target) |
+--------------+         +------------------+
        |                        |
        |------ Hook ----------->|
        |<---- Data / Log -------|

本文将一步步带你了解这个工具的安装与基本使用。

2 frida安装

我目前使用的是Windows系统,因此本文也将以windows系统作为示例进行讲解。且为了方便,安卓系统用的是模拟器,并不是真机。

首先我们需要下载Frida,而Frida的下载,可以通过python工具pip完成。

所以推荐你先去安装python环境:Welcome to Python.org

安装完python后,在终端输入命令:pip install frida-tools,进行安装。

安装完成后,可以输入命令:frida --version,来输出版本,看是否成功安装:

image-20231026164133014

完成后,我们还需要能够安卓开发调试工具包,如果你已经安装了Android Studio,则已经有该工具包了,如果没有,可以直接下载:platform-tools-windows

下载完成后,是一个压缩包,将其解压,然后放在你觉得比较稳妥的位置,最后将其路径添加到环境变量中即可。

不知道什么是环境变量的可以参考另一篇文章;程序员必懂的常识

将其路径添加到用户环境变量、PATH变量下即可。

添加完成后,直接输入命令:adb,打印出相关的帮助信息,则说明你已经操作完成:

image-20231026164955542

然后还需要去下载逍遥模拟器:逍遥安卓模拟器_

这个很简单直接下载安装即可,安装完成后,打开它,然后打开root权限:

image-20231026165215481

一般默认就是打开的,就不用管,然后还要打开开发者模式,首先找到设置

image-20231026165408809

这个设置可能放在了系统应用框中,点击它打开即可。

然后直接顶部搜索:关于平板电脑

image-20231026165616713

点进去,翻到最下面,多次点击版本号:

image-20231026165701075

直到它弹出提示:你已经处于开发者模式。

然后搜索:开发者选项

image-20231026165756528

打开USB调试:

image-20231026165819210

然后我们就可以回到终端,输入命令:adb kill-server,先关闭这个调试服务。

然后就可以连接我们的安卓模拟器了:adb connect 127.0.0.1:21503

image-20231026170058224

注意,逍遥模拟器虚拟设备默认端口为21503,并且目前处于局域网,所以链接为上面那个,如果有多个设备,那么每增加一个设备,端口号就会增加10,如果有第二个虚拟设备,那么端口号就是21513了。

然后进入安卓的终端:adb shell

输入命令:getprop ro.product.cpu.abi,查看安卓的架构信息。

最后退出:exit