admin 2025-09-28 23:24:33 攻略指南

frida使用汇总

安装旧设备低系统使用fridaApp内置frida免root方案安装# 安装最新版

pip install --upgrade frida-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install frida==16.6.6 -i https://pypi.tuna.tsinghua.edu.cn/simple

旧设备低系统使用frida设备:Redmi3S ,安卓6.0.1,已ROOT。这种旧手机肯定需要安装老版本的frida,同样的Python也可能需要安装较早版本,为避免影响其他Python的正常使用,推荐在电脑上安装pyenv,方便随意切换Python版本,参考:使用pyenv创建多版本Python环境

先找到支持安卓6.0.1的frida版本:12.9.7

Android版本Frida版本frida-toolsPython4.1 - 4.312.6.13 4.412.7.0 5.0 - 5.112.8.1 6.0 - 6.0.112.9.75.1.03.87.0 - 7.112.9.8 8.0 - 8.112.10.4 912.11.716.1.1016.6.68.1.312.0.0最新3.8+1012.12.0 1112.12.2 在较新的Python下是无法直接通过pip install的方式安装frida的,会报错:

PyPI no longer supports the XMLRPC package_releases method. Use JSON or Simple API instead.

只能通过离线包进行安装,到 Links for frida 找到对应的版本,适合Windows10且Python3.X的包就只有:frida-12.9.7-py3.8-win-amd64.egg

而且可以看出,我们需要使用Python3.8,通过:

pyenv install -l | findstr 3.8

可以查询出最大可用的版本是3.8.10,安装:

pyenv install 3.8.10

安装成功后要切换Python到这个版本,发现使用pyenv global 3.8.10并不能成功切换。但是在使用 pyenv versions 查看本地安装的版本的时候,能够看出当前版本是在文件%USERPROFILE%\.python-version文件里指定的,只需要打开编辑该文件,修改为3.8.10即可。然后再次执行 pyenv versions查看当前版本已经正确切换了。

egg包是早期的Python离线安装包,新的whl格式的包。安装egg包需要使用easy_install,需要安装三方工具库:setuptools。

较新的setuptools安装后不会生成easy_install,需要安装一个较老的版本,这里选择 setuptools==50.3.2 是因为该版本已知会生成 easy_install。

pip install setuptools==50.3.2

安装成功后安装egg包:

easy_install frida-12.9.7-py3.8-win-amd64.egg

之后就可以安装12.9.7版本的frida了:

pip install frida==12.9.7 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install frida-tools==5.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

注意frida-tools一定要在后面安装且必须指定相应的版本,如果不填版本默认会安装成最新版本的frida。

后续在手机安装frida-server及脚本就都一样了。

App内置frida免root方案该方案通过将Frida-gadget库和hook脚本文件内置到APK中,使得应用在启动时自动加载Frida-gadget,并执行内置的hook脚本,从而实现免root环境下的动态分析和hook操作。其核心在于通过特定方式将Frida-gadget和脚本文件嵌入到APK的资源文件中,并在应用启动时加载。该方案会修改apk源文件,包括添加新的so文件、修改Smali代码或调整so依赖库等

适用场景:需要将hook方案分享分发给他人使用且无root权限,该方案可以将hook逻辑内置到APK中,方便他人直接使用。

工具:Apktool、dex2c(可选)、frida-gadget库、LIEF或patchelf(如需要)、Python环境(如需要)、签名工具等。

兼容性效果测试:在Android9.0系统上验证可行,6.0系统不行,华为mate30不行。

libfrida-gadget.config.so

{

"interaction":{

"type":"script",

"path":"libjs.so"

}

}

libjs.so

/**

* Frida Hook Script - Hook 所有 Activity 的 onCreate 方法

*

* 功能:

* 1. 监测所有 Activity 的启动,打印日志。

* 2. 通过 Toast 提示当前启动的 Activity 名称。

* 3. 采用 Java.scheduleOnMainThread 确保 UI 线程执行 Toast 显示。

* 4. 增强错误处理,防止 Hook 过程中异常导致崩溃。

*/

if (Java.available) {

Java.perform(function () {

console.log("Hooking any Activity...");

try {

var Activity = Java.use("android.app.Activity");

var StringCls = Java.use("java.lang.String");

var Toast = Java.use("android.widget.Toast");

var ActivityThread = Java.use("android.app.ActivityThread");

var context = ActivityThread.currentApplication().getApplicationContext();

Activity.onCreate.overload("android.os.Bundle").implementation = function (bundle) {

var activityClassName = this.getClass().getName();

console.log(activityClassName + " onCreate hooked!");

this.onCreate(bundle);

Java.scheduleOnMainThread(function () {

var message = StringCls.format(StringCls.$new("Frida Hook成功! 通过so注入方式\n当前Activity: %s"), activityClassName);

Toast.makeText(context, message, Toast.LENGTH_SHORT).show();

});

};

} catch (e) {

console.log("Hook 过程中出现异常: " + e);

}

});

} else {

console.log("Java environment not available!");

}

实施步骤

一、基于JAVA层Smali代码调用Frida库

准备工具和环境:安装Apktool、dex2c(如需要)、frida-gadget库等工具。反编译目标APK:使用Apktool对目标APK进行反编译。修改Smali代码:在首启activity或application的onCreate方法中植入调用Frida库的Smali代码,即System.loadLibrary("frida-gadget")。添加frida-gadget库:根据目标设备的CPU架构和Frida版本,从Frida的官方发布页面下载对应的frida-gadget.so文件,放置到反编译后的APK的so目录下。配置frida-gadget:修改frida-gadget的配置文件libfrida-gadget.config.so,指定hook脚本文件的路径(如libjs.so)。添加hook脚本文件:将hook的js代码文件(如libjs.so)放置到APK的assets目录或其他合适的位置。重新编译APK:使用Apktool重新编译APK,并签名。安装和测试:将修改后的APK安装到设备上,打开应用,验证Frida是否成功加载并执行hook操作。二、基于so层通过添加依赖库方式调用Frida库

准备工具和环境:安装Apktool、dex2c(如需要)、frida-gadget库、LIEF或patchelf等工具。反编译目标APK:使用Apktool对目标APK进行反编译。找到目标so文件:确定应用启动时调用的so文件。修改so依赖库:使用LIEF或patchelf等工具,将frida-gadget.so添加为该so文件的依赖库。例如,使用patchelf命令patchelf --add-needed frida-gadget.so apk.so。添加frida-gadget库:根据目标设备的CPU架构和Frida版本,从Frida的官方发布页面下载对应的frida-gadget.so文件,放置到反编译后的APK的so目录下。配置frida-gadget:修改frida-gadget的配置文件libfrida-gadget.config.so,指定hook脚本文件的路径(如libjs.so)。添加hook脚本文件:将hook的js代码文件(如libjs.so)放置到APK的assets目录或其他合适的位置。重新编译APK:使用Apktool重新编译APK,并签名。安装和测试:将修改后的APK安装到设备上,打开应用,验证Frida是否成功加载并执行hook操作。最终重打包后的App安装包的文件目录形式如下:

app.apk

└── lib

└── arm64-v8a

├── libfrida-gadget.so

├── libfrida-gadget.config.so

└── libjs.so

文档信息本文作者:zhupite本文链接:https://zhupite.com/sec/frida.html版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)