Frida在SO层的攻防博弈:以AES加解密Hook为例的对抗实践
1. SO层加密函数定位与逆向分析
在移动安全领域,SO层(Shared Object)的加密函数往往是安全防护的核心所在。与Java层相比,SO层的代码经过编译后更难直接分析,这给安全研究人员带来了不小的挑战。
导出符号分析是最基础的定位手段。通过IDA Pro等工具加载SO文件后,我们可以查看导出函数列表。典型的加密函数往往会包含以下关键词:
cryptoaesencrypt/decryptsecurity
但现代应用往往会进行符号混淆,这时就需要采用更高级的技术:
// 典型AES函数导出符号示例(未混淆)
JNIEXPORT jbyteArray JNICALL
Java_com_example_crypto_AESUtils_encrypt(
JNIEnv *env, jobject thiz,
jbyteArray plaintext,
jbyteArray key);
对于混淆后的SO文件,我们需要采用交叉引用追踪技术:
- 从Java层的JNI调用点入手,追踪到SO层的入口
- 分析函数调用关系图(Xrefs graph)
- 识别关键加密模式特征(如AES的S盒操作)
函数特征识别技巧:
- AES加密通常包含
SubBytes、ShiftRows等操作 - RSA加密会涉及大数模幂运算
- 哈希函数会有固定的初始化常量
提示:在IDA中使用YARA规则可以快速识别加密算法特征代码模式
2. 混淆函数名与参数识别实战
当面对高度混淆的SO文件时,传统的分析方法往往失效。以下是几种有效的对抗手段:
2.1 动态行为分析
通过Frida进行运行时监控,可以绕过静态分析的障碍:
// 监控内存分配行为识别加密操作
Interceptor.attach(Module.findExportByName(null, "malloc"), {
onEnter: function(args) {
this.size = args[0].toInt32();
},
onLeave: function(retval) {
if(this.size === 16 || this.size === 32) {
console.log(`Possible key/IV allocation at ${retval}`);
}
}
});
2.2 参数类型推断技术
即使函数名被混淆,我们仍可通过参数特征识别加密函数:
| 参数特征 |
|---|


1618

被折叠的 条评论
为什么被折叠?



