安卓逆向——Frida的基础用法(上)
字数 1181 2025-08-22 12:23:18

Frida基础用法教学文档

一、Frida简介

Frida是一款强大的动态代码插桩工具,主要用于Android/iOS/macOS/Linux/Windows等平台的动态分析和逆向工程。它允许开发者通过JavaScript脚本来实时修改和监控目标应用程序的行为。

二、环境准备

1. 所需工具

  • jadx:用于进行静态分析,也可以进行动态调试
  • 雷电模拟器9(Android 9):建议使用root版本
  • Frida:包含Frida客户端和Frida server
  • adb工具:用于连接Android设备

2. 环境配置步骤

  1. 确保adb连接正常:adb devices
  2. 进入手机shell:adb shell
  3. 获取root权限:su
  4. 进入目标目录:cd /data/local/tmp
  5. 修改Frida server权限:chmod 755 frida-server-16.2.1-android-x86_64
  6. 启动Frida server:./frida-server-16.2.1-android-x86_64
  7. 端口转发:
    adb forward tcp:27042 tcp:27042
    adb forward tcp:27043 tcp:27043
    
  8. 验证Frida是否正常工作:frida-ps -Ufrida-ps -R

三、Frida基础用法

1. Hook普通方法

应用场景:监控或修改应用程序中某个方法的执行

示例代码

Java.perform(function() {
    var MainActivity = Java.use("com.ad2001.frida0x1.MainActivity");
    
    MainActivity.get_random.implementation = function() {
        console.log("MainActivity.get_random is called");
        var ret_val = this.get_random();
        console.log("MainActivity.get_random result is " + ret_val);
        return ret_val;
    };
});

使用命令

frida -U -f com.ad2001.frida0x1 -l test.js

模板

Java.perform(function() {
    var <class_reference> = Java.use("<package_name>.<class>");
    <class_reference>.<method_to_hook>.implementation = function(<args>) {
        /* 自定义实现 */
    };
});

2. Hook静态方法

应用场景:调用或修改静态方法

示例代码

Java.perform(function() {
    var a = Java.use("com.ad2001.frida0x2.MainActivity");
    a.get_flag(4919);
});

使用命令

frida -U 'Frida 0x2' -l Hook.js

模板

Java.perform(function() {
    var <class_reference> = Java.use("<package_name>.<class>");
    a.function(val); // 需要调用的方法名称
});

3. 更改变量的值

应用场景:直接修改类中的变量值

示例代码

Java.perform(function() {
    var a = Java.use("com.ad2001.frida0x3.Checker");
    a.code.value = 512;
});

使用命令

frida -U -f com.ad2001.frida0x3 -l hook.js

模板

Java.perform(function() {
    var <class_reference> = Java.use("<package_name>.<class>");
    <class_reference>.<variable>.value = <value>; //需要修改的变量
});

4. 创建类实例

应用场景:当需要调用非静态方法时,先创建类的实例

示例代码

Java.perform(function() {
    var check = Java.use("com.ad2001.frida0x4.Check");
    var check_obj = check.$new();
    var res = check_obj.get_flag(1337);
    console.log("FLAG:" + res);
});

模板

Java.perform(function() {
    var <class_reference> = Java.use("<package_name>.<class>");
    var <class_instance> = <class_reference>.$new(); // 创建类的实例
    <class_instance>.<method>(); // 调用该实例中的方法
});

四、常见问题解决

  1. Frida无法连接

    • 检查Frida server是否正常运行
    • 检查端口转发是否正确
    • 检查Frida和Frida server版本是否一致
  2. Hook不生效

    • 检查目标类和方法名是否正确
    • 对于静态方法,可能需要先启动应用再附加
  3. 权限问题

    • 确保设备已root
    • 检查Frida server文件权限

五、实战技巧

  1. 动态调试:结合jadx或JEB进行静态分析,再用Frida动态验证

  2. 多方法Hook:可以在一个脚本中Hook多个方法

  3. 参数修改:在implementation函数中可以修改传入参数或返回值

  4. 日志输出:使用console.log输出调试信息

  5. 异常处理:在脚本中加入try-catch块处理可能的异常

六、总结

Frida是一款功能强大的动态分析工具,通过JavaScript脚本可以实现:

  • 方法Hook和修改
  • 静态方法调用
  • 变量值修改
  • 类实例创建和方法调用

掌握这些基础用法后,可以进一步学习Frida的高级功能,如:

  • 内存操作
  • Native层Hook
  • RPC调用
  • 多线程处理等
Frida基础用法教学文档 一、Frida简介 Frida是一款强大的动态代码插桩工具,主要用于Android/iOS/macOS/Linux/Windows等平台的动态分析和逆向工程。它允许开发者通过JavaScript脚本来实时修改和监控目标应用程序的行为。 二、环境准备 1. 所需工具 jadx :用于进行静态分析,也可以进行动态调试 雷电模拟器9(Android 9) :建议使用root版本 Frida :包含Frida客户端和Frida server adb工具 :用于连接Android设备 2. 环境配置步骤 确保adb连接正常: adb devices 进入手机shell: adb shell 获取root权限: su 进入目标目录: cd /data/local/tmp 修改Frida server权限: chmod 755 frida-server-16.2.1-android-x86_64 启动Frida server: ./frida-server-16.2.1-android-x86_64 端口转发: 验证Frida是否正常工作: frida-ps -U 或 frida-ps -R 三、Frida基础用法 1. Hook普通方法 应用场景 :监控或修改应用程序中某个方法的执行 示例代码 : 使用命令 : 模板 : 2. Hook静态方法 应用场景 :调用或修改静态方法 示例代码 : 使用命令 : 模板 : 3. 更改变量的值 应用场景 :直接修改类中的变量值 示例代码 : 使用命令 : 模板 : 4. 创建类实例 应用场景 :当需要调用非静态方法时,先创建类的实例 示例代码 : 模板 : 四、常见问题解决 Frida无法连接 : 检查Frida server是否正常运行 检查端口转发是否正确 检查Frida和Frida server版本是否一致 Hook不生效 : 检查目标类和方法名是否正确 对于静态方法,可能需要先启动应用再附加 权限问题 : 确保设备已root 检查Frida server文件权限 五、实战技巧 动态调试 :结合jadx或JEB进行静态分析,再用Frida动态验证 多方法Hook :可以在一个脚本中Hook多个方法 参数修改 :在implementation函数中可以修改传入参数或返回值 日志输出 :使用console.log输出调试信息 异常处理 :在脚本中加入try-catch块处理可能的异常 六、总结 Frida是一款功能强大的动态分析工具,通过JavaScript脚本可以实现: 方法Hook和修改 静态方法调用 变量值修改 类实例创建和方法调用 掌握这些基础用法后,可以进一步学习Frida的高级功能,如: 内存操作 Native层Hook RPC调用 多线程处理等