关于 frida-android-hooks
frida-android-hooks 是用于通过 Frida 检查 Android Java、Kotlin 和 JNI 行为的技能,涵盖环境检查、Hook 模式、代码发现及常见安全检查分析。
主要功能
- 01Frida 环境与进程选择
- 02Java 方法和构造函数 Hook
- 03类加载器与方法发现
- 04TLS 和完整性检查分析
适用场景
- 01检查应用启动或运行时行为
- 02通过 Java 堆栈跟踪调用方
- 03分析混淆或动态加载的类
- 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 行为进行插桩时使用此技能。
设置检查
- 验证主机和设备版本是否匹配:
frida --version adb shell /data/local/tmp/frida-server --version frida-ps -Uai - 使用 spawn 进行早期初始化:
frida -U -f com.example.app -l agent.js --no-pause - 使用 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。 - 明确解析重载。不要依赖含糊的方法名称。
- 通过
$inithook 构造函数。 - 对于 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