mcpField
F
frida-android-hooks

frida-android-hooks

github.com/rudra-ravi安全7126 次安装25 周前更新
代码仓库

关于 frida-android-hooks

frida-android-hooks 是用于通过 Frida 检查 Android Java、Kotlin 和 JNI 行为的技能,涵盖环境检查、Hook 模式、代码发现及常见安全检查分析。

主要功能

  1. 01Frida 环境与进程选择
  2. 02Java 方法和构造函数 Hook
  3. 03类加载器与方法发现
  4. 04TLS 和完整性检查分析

适用场景

  1. 01检查应用启动或运行时行为
  2. 02通过 Java 堆栈跟踪调用方
  3. 03分析混淆或动态加载的类
  4. 04检查 TLS 信任与证书固定路径

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rudra-ravi/frida-skills --skill frida-android-hooks

安装后在 Claude Code 中输入/frida-android-hooks确认已加载。

附带文件agents/openai.yamlreferences/android-patterns.md

详细介绍

Frida Android Hooks

在对 Android Java/Kotlin/JNI 行为进行插桩时使用此技能。

设置检查

  1. 验证主机和设备版本是否匹配:
    frida --version
    adb shell /data/local/tmp/frida-server --version
    frida-ps -Uai
    
  2. 使用 spawn 进行早期初始化:
    frida -U -f com.example.app -l agent.js --no-pause
    
  3. 使用 attach 处理应用启动后可触发的行为:
    frida -U -n com.example.app -l agent.js
    

Java Hook 模式

Java.perform(() => {
  const Target = Java.use("com.example.Target");
  Target.method.overload("java.lang.String").implementation = function (value) {
    console.log("[Target.method]", value);
    const result = this.method(value);
    console.log("[Target.method] ->", result);
    return result;
  };
});

Android 规则

  • 除非仅使用原生 API,否则始终在 Java.perform() 内执行 hook。
  • 明确解析重载。不要依赖含糊的方法名称。
  • 通过 $init hook 构造函数。
  • 对于 Kotlin,要留意伴生类、合成方法、默认参数辅助方法和混淆后的名称。
  • 如果找不到类,请检查类加载器,并将 Java.classFactory.loader 设为能够访问该类的应用加载器。
  • 对于原生方法,在识别已加载的 .so 和 JNI 符号后,转到 frida-native-hooks。

实践模式

  • 对于混淆代码,优先 hook 有意义的平台边界:URL/请求构造器、JSON 解析器、Base64、加密、SharedPreferences、密钥库、文件 I/O、WebView、类加载和原生库加载。
  • 在高信号 hook 上记录 Java 堆栈跟踪,以便在编写针对应用的 hook 前找到由应用自身调用的代码。
  • 有意识地转换字节数组。仅在内容有效时同时输出十六进制和 UTF-8/ASCII;二进制加密材料通常不是文本。
  • 如果类会延迟出现,请 hook 反射和动态加载:Class.forName、ClassLoader.loadClass、DexClassLoader、PathClassLoader 和 Runtime.loadLibrary*。
  • 对于 TLS/证书固定,绕过前先识别实际使用的堆栈:OkHttp/CertificatePinner、TrustManager、Conscrypt、WebView、Flutter/BoringSSL,或原生自定义验证。
  • 对于 root/模拟器/完整性绕过,不要将盲目编写的大型脚本作为最终答案。先用它们发现检查逻辑,再保留能够改变目标行为的最少 hook。

探索代码片段

Java.perform(() => {
  const groups = Java.enumerateMethods("*crypto*!*/isu");
  console.log(JSON.stringify(groups, null, 2));
});
Java.perform(() => {
  Java.enumerateClassLoaders({
    onMatch(loader) {
      try {
        Java.classFactory.loader = loader;
        Java.use("com.example.Target");
        console.log("loader:", loader);
      } catch (_) {}
    },
    onComplete() {}
  });
});

证书固定与身份验证工作

  • 将公开的绕过代码片段视为侦察手段,而非最终证明。
  • 识别实际的信任链路:平台信任管理器、OkHttp、Conscrypt、WebView、原生 TLS、自定义签名,或后端质询。
  • 在替换信任判断前,记录输入和输出。
  • 保留证据:被 hook 的类、堆栈跟踪、端点、观察到的证书或哈希材料,以及应用版本。

参考资料

阅读 references/android-patterns.md,了解重载、构造函数、类加载器、JNI、OkHttp、WebView 和 spawn 时机模式。

评论

支持 Markdown