🎯 Hook RSA / AES / 指纹函数(如设备指纹、加密参数构造、反调试、安全校验等)
这类 Hook 属于 Frida 高级应用,通常用于:
- 逆向分析 Android / iOS APP 中的加密逻辑
- 动态拦截 RSA / AES 加解密过程,获取明文或密钥
- Hook 指纹生成函数(如设备 ID、签名、token、安全参数)
- 绕过安全校验、反调试、证书绑定、防重放等保护机制
- 分析 APP 与服务器之间的安全通信流程
✅ 一、Frida 高级脚本应用场景速览
| 目标类型 | 场景描述 | Hook 目的 |
|---|---|---|
| RSA 加密/解密 | APP 调用 Java 的 Cipher.getInstance("RSA"),或使用 OpenSSL 加密敏感数据(如 token、密码) | 获取公钥、明文、密文,或替换密钥 |
| AES 加密/解密 | 使用 AES-CBC / AES-GCM,常见于接口参数加密、本地存储加密 | 获取 key / iv / 明文 / 密文 |
| 签名函数 | 如 generateSign(),对参数进行 HMAC / MD5 / SHA 加密 | 获取参数和签名值,用于模拟请求 |
| 设备指纹 / 设备信息 | 如 IMEI、MAC、AndroidID、OAID、安装时间等组合生成唯一标识 | 获取或篡改指纹,绕过风控 |
| 反调试检测 | 检测 Frida、调试器、root、模拟器 | 绕过检测,防止 APP 崩溃或拒绝运行 |
| 安全校验逻辑 | 比如校验时间戳、nonce、package签名、证书绑定 | 动态修改返回值,绕过限制 |
✅ 二、Frida 高级脚本示例合集
下面为你提供多个 真实可用的高级 Frida Hook 脚本,涵盖:
- Hook Java RSA 加密
- Hook Java AES 加密/解密
- Hook 自定义签名函数(如 sign())
- Hook 设备指纹生成函数
- Hook 反调试或安全校验函数
📌 所有脚本均基于 Frida for Android(Java 层),如需 iOS(Objective-C/Swift)或 C/C++(Native)层 Hook,方法类似但语法不同,可后续提供。
🧩 1. Hook Java RSA 加密过程
🎯 场景:
APP 调用了 Cipher.getInstance("RSA"),对某些敏感数据(如密码、token)进行了 RSA 加密,你想获取:
- 明文(plaintext)
- 密文(ciphertext)
- 公钥(public key)
✅ Frida Hook 脚本:Hook RSA 加密
// hook_rsa.js
Java.perform(function () {
// Hook javax.crypto.Cipher 的 doFinal 方法(加密/解密都经过这里)
var Cipher = Java.use("javax.crypto.Cipher");
Cipher.doFinal.overload('[B').implementation = function (inputBytes) {
var result = this.doFinal(inputBytes);
console.log("[*] RSA Cipher.doFinal() 被调用");
// inputBytes 是明文或密文的 byte[]
var inputHex = bytesToHex(inputBytes);
var outputHex = bytesToHex(result);
console.log("[+] 输入 (明文/密文):", inputHex);
console.log("[+] 输出 (密文/明文):", outputHex);
return result;
};
// 可选:打印当前使用的算法 / 模式
Cipher.getInstance.overload('java.lang.String').implementation = function (algorithm) {
console.log("[*] Cipher.getInstance() 被调用,算法:", algorithm);
return this.getInstance(algorithm);
};
});
// 工具函数:byte[] 转 hex
function bytesToHex(bytes) {
var result = '';
for (var i = 0; i < bytes.length; i++) {
result += ('0' + (bytes[i] & 0xFF).toString(16)).slice(-2);
}
return result;
}▶️ 使用方法:
- 启动 Frida Server(Android)
- 找到目标 APP 的包名(如
com.example.app) - 执行:
frida -U -n com.example.app -l hook_rsa.js🔍 你会看到每次调用 RSA 加密时打印的明文/密文 Hex。
🧩 2. Hook Java AES 加密/解密
🎯 场景:
APP 使用 AES(如 AES/CBC/PKCS5Padding)对请求参数或本地数据进行加密,你想获取:
- 密钥(Key)
- 向量(IV)
- 明文 / 密文
✅ Frida Hook 脚本:Hook AES 加密
// hook_aes.js
Java.perform(function () {
var Cipher = Java.use("javax.crypto.Cipher");
Cipher.doFinal.overload('[B').implementation = function (input) {
var output = this.doFinal(input);
console.log("[*] AES Cipher.doFinal() 被调用");
var inputHex = bytesToHex(input);
var outputHex = bytesToHex(output);
console.log("[+] 输入 (明文/密文):", inputHex);
console.log("[+] 输出 (密文/明文):", outputHex);
return output;
};
// 如果你想深入 Hook KeyGenerator 或 SecretKeySpec,也可以类似操作
});
function bytesToHex(bytes) {
var result = '';
for (var i = 0; i < bytes.length; i++) {
result += ('0' + (bytes[i] & 0xFF).toString(16)).slice(-2);
}
return result;
}🧠 进阶:
你还可以 Hook 如下关键类,获取 AES 的 Key 和 IV:
javax.crypto.spec.SecretKeySpecjavax.crypto.spec.IvParameterSpec
例如:
var SecretKeySpec = Java.use("javax.crypto.spec.SecretKeySpec");
SecretKeySpec.<init>.overload('[B', 'java.lang.String').implementation = function (keyBytes, algo) {
console.log("[*] AES Key 被创建,算法:", algo);
var keyHex = bytesToHex(keyBytes);
console.log("[+] AES Key (Hex):", keyHex);
return this.<init>(keyBytes, algo);
};🧩 3. Hook 自定义签名函数(如 sign(params))
🎯 场景:
APP 有一个自定义的 Java 方法:
public String generateSign(String params) {
// 内部可能是 md5 / hmac / 拼接 key
return signValue;
}你想 Hook 这个方法,获取:
- 输入参数(params)
- 输出签名(sign)
✅ Frida Hook 脚本:Hook 某个类的 sign 方法
// hook_sign_function.js
Java.perform(function () {
// 假设签名函数在 com.example.app.utils.SecurityUtils 类中
var SecurityUtils = Java.use("com.example.app.utils.SecurityUtils");
SecurityUtils.generateSign.implementation = function (params) {
console.log("[*] generateSign() 被调用");
console.log("[+] 输入参数:", params);
var sign = this.generateSign(params);
console.log("[+] 返回签名:", sign);
return sign;
};
});🔍 如何找类名和方法名?
- 使用 jadx 打开 APK → 搜索
sign(、generateSign(、getSign(等关键字 - 或在 Frida 中用
Java.enumerateMethods("com.example.app.*")枚举
🧩 4. Hook 设备指纹生成函数
🎯 场景:
APP 通过组合 IMEI、AndroidID、Mac、安装时间等信息生成一个唯一指纹,用于风控校验。
你想 Hook 这个函数获取指纹,或直接替换返回值绕过。
✅ 示例:Hook 某个 getDeviceId() 或 getFingerprint() 方法
// hook_fingerprint.js
Java.perform(function () {
var Utils = Java.use("com.example.app.utils.DeviceUtils");
Utils.getDeviceFingerprint.implementation = function () {
console.log("[*] getDeviceFingerprint() 被调用");
// 打印原始返回值(可选)
var original = this.getDeviceFingerprint();
// 你可以直接返回一个固定指纹,绕过检测
var fakeFingerprint = "fake_fingerprint_123456";
console.log("[+] 原始指纹:", original);
console.log("[+] 返回伪造指纹:", fakeFingerprint);
return fakeFingerprint;
};
});🧩 5. Hook 反调试 / 安全校验函数
🎯 场景:
APP 检测:
- 是否运行在 Frida 环境
- 是否被 Root
- 是否在模拟器
- 包名是否被篡改
- 签名校验
一旦检测到,可能直接退出或拒绝功能。
✅ 示例:Hook 检测 Frida 的函数
// hook_anti_frida.js
Java.perform(function () {
var SecurityCheck = Java.use("com.example.app.security.SecurityCheck");
SecurityCheck.checkFrida.implementation = function () {
console.log("[*] 检测 Frida 的函数被调用");
// 原始逻辑可能返回 true 表示检测到 Frida
var original = this.checkFrida();
console.log("[+] 原始检测结果:", original);
// 返回 false 表示未检测到,绕过检测
console.log("[+] 绕过 Frida 检测,返回 false");
return false;
};
});✅ 三、通用 Frida 技巧
🔧 1. 如何查找目标函数?
- 使用 jadx 反编译 APK,搜索关键字:
sign(,encrypt(,getDeviceId(等 - 或使用 Frida 的枚举 API:
Java.enumerateMethods("com.example.app.*", {
onMatch: function (method) {
console.log(method);
},
onComplete: function () {}
});🔧 2. 如何打印参数 / 返回值?
使用 console.log() 打印 Java 的 String / int / byte[],用自定义 bytesToHex() 转换二进制数据。
🔧 3. 如何替换返回值?
直接在 Hook 的 implementation 函数中 return 你的值,即可覆盖原函数。
✅ 四、总结:Frida 高级脚本能力
| 目标类型 | 能力 | 作用 |
|---|---|---|
| RSA / AES | Hook 加密/解密函数,获取明文、密文、密钥、IV | 分析加密流程,解密通信内容 |
| 签名函数 | Hook 自定义 sign(),获取参数与签名值 | 模拟请求,绕过签名校验 |
| 设备指纹 | Hook 生成唯一标识的函数,可篡改返回值 | 绕过风控、模拟多设备 |
| 反调试检测 | Hook 检测 Frida / Root / 模拟器的函数 | 绕过安全限制,防止 APP 崩溃 |
| 安全校验 | Hook 校验包名、签名、时间戳等逻辑 | 绕过限制,抓取受限接口数据 |
🎁 如果你提供以下信息,我可以为你定制专属高级 Frida Hook 脚本:
- 目标 APP 的抓包数据(请求/响应)
- 你怀疑的加密函数名、类名(或截图 jadx 反编译代码)
- 是否涉及 RSA / AES / HMAC / 自定义算法
- 是否遇到反调试、证书绑定、设备校验等安全限制
✅ 五、资源推荐
| 工具/文档 | 链接 |
|---|---|
| Frida 官方文档 | https://frida.re/docs/home/ |
| Frida JavaScript API | https://frida.re/docs/javascript-api/ |
| jadx 反编译工具 | https://github.com/skylot/jadx |
| Frida 高级 Hook 示例合集 | https://github.com/hookmaster/frida-all-in-one |
| Frida Hook RSA/AES实战案例 | 可私信我,提供具体 APK 或抓包,我来写针对性脚本 |
📌 如你希望我针对某个具体的 APK / 抓包数据 / 加密函数,帮你写一个真实可运行的 Frida Hook 脚本,请提供:
- 目标函数名(或截图 jadx 反编译代码)
- 加密类型(如 RSA / AES / HMAC)
- 你想要获取的内容(如明文、密钥、签名、指纹)
我可以立即为你生成 完整可运行的 Frida Hook 脚本,并指导你如何运行!
是否需要我为你定制一个 针对某个具体 APP 的 RSA / AES / 签名 / 指纹 Hook 脚本? 你可以提供抓包或反编译线索,我会给你 100% 实战代码!