664 字
3 分钟
Frida hook笔记 use与choose
2025-06-02

Java.use vs Java.choose#

Java.useJava.choose 是 Frida 中两个核心的 Java API,但它们的用途和工作方式截然不同:

1. Java.use:获取类引用(静态方式)#

功能#

  • 直接通过类名获取 Java 类的引用,用于 hook 类的方法创建实例
  • 类似 Java 中的 Class.forName(),但功能更强大。

用法#

// 获取类引用
let TargetClass = Java.use("com.example.TargetClass");
// Hook 静态方法
TargetClass.staticMethod.implementation = function () {
/* ... */
};
// 创建实例
let instance = TargetClass.$new();
// Hook 实例方法
instance.instanceMethod.implementation = function () {
/* ... */
};

限制#

  • 必须知道类名:无法处理混淆后的类名(如 a.a.c)。
  • 无法遍历对象实例:只能操作类本身,不能获取内存中已存在的实例。

2. Java.choose:遍历对象实例(动态方式)#

功能#

  • 遍历内存中所有已创建的实例,并对每个实例执行回调。
  • 适用于:
    • 查找特定对象(如单例)。
    • 分析对象状态。
    • hook 特定实例的方法。

用法#

Java.choose("com.example.TargetClass", {
// 找到每个实例时执行
onMatch: function (instance) {
console.log("[+] 找到实例: " + instance);
// Hook 实例方法
instance.someMethod.implementation = function () {
console.log("[*] 拦截到方法调用");
return this.someMethod();
};
},
// 遍历完成后执行
onComplete: function () {
console.log("遍历完成");
},
});

优势#

  • 无需知道实例创建逻辑:即使对象通过复杂逻辑创建(如单例),也能直接 hook。
  • 支持通配符:可使用 Java.choose("*", ...) 遍历所有类的实例。

3. 核心区别#

特性Java.useJava.choose
操作对象类(Class)类的实例(Instance)
使用场景已知类名,需 hook 方法或创建实例需查找 / 操作内存中的对象实例
是否需要实例化需要手动 $new()自动遍历已存在的实例
混淆处理不支持(必须知道原始类名)支持(可结合 enumerateLoadedClasses
示例let clazz = Java.use("A");Java.choose("A", { onMatch... });

4. 结合使用示例#

当类名被混淆时,可以先通过 enumerateLoadedClasses 找到类名,再用 Java.useJava.choose 操作:

// 1. 查找包含特定方法的类
Java.enumerateLoadedClasses({
onMatch: function (className) {
try {
let clazz = Java.use(className);
if (clazz.someMethod) {
console.log("[+] 找到目标类: " + className);
// 2. 方法一:使用 Java.use 直接 hook 类
clazz.someMethod.implementation = function () {
/* ... */
};
// 2. 方法二:使用 Java.choose 遍历实例
Java.choose(className, {
onMatch: function (instance) {
/* ... */
},
onComplete: function () {},
});
}
} catch (e) {}
},
onComplete: function () {},
});

总结#

  • Java.use:适合静态 hook 已知类的方法,或创建新实例。
  • Java.choose:适合动态查找和操作内存中的对象实例,尤其是单例或难以直接获取的对象。

在实际应用中,两者通常结合使用,先定位类,再选择合适的方式 hook 方法或操作实例。

Frida hook笔记 use与choose
https://fuwari.vercel.app/posts/frida-hook笔记-use与choose/
作者
Lorem Ipsum
发布于
2025-06-02
许可协议
CC BY-NC-SA 4.0