来源:小密圈:“企业护航人”
链接:https://t.zsxq.com/FMjqRRJ
作者:BMa
Frida 简介
【frida 使用】Android apk 加解密渗透测试
Frida 是 一 款 基 于 python+javascript 的 hook 框 架 , 适 用 于
android\ios\linux\win\osx 等各平台,由于是基于脚本的交互,因
此相比 xposed 和 substrace cydia 更加便捷。本文重点介绍在
window 下对 Android apk 进行安全测试时的使用。
逆向算法时 hook 算法
在对 apk 进行安全测试的时候,经常会遇到请求参数被加密或者
签名的情况,在请求数据被修改后提示异常,导致无法有效地进
行漏洞挖掘。
遇到这种情况,最初的思路是直接逆向其算法,然后再重写算法,
在本机实现加密、解密、签名的动作。
现在从代码中可以看出,apk 使用的是 AES 算法,但是目前还无
法得知 AES 算法加密的 key、偏移值、待加密的字符串。通过 frida
hook 相关方法,可以很方便得到这些内容。
#!/usr/bin/python
#coding:utf-8
import frida
import sys
import requests
def on_message(message, data):
print message
requests(message)
def request(message):
#可以在 message 中添加标志位,然后在这里只处理 url
pass
jscode = """
setImmediate(function() { //prevent timeout
console.log("[*] Starting script");
Java.perform(function() {
var
tmpClass
=
Java.use("cn.XXXXXXX.YYYYYY.c.b.a");
tmpClass.a.overload('java.lang.String',
'java.lang.String',
'java.lang.String').implementation
=
function(arg0,arg1,arg2) {
console.log("[*] Method Modify!---1");
console.log(arg0);
console.log(arg1);
console.log(arg2);
result = this.a(arg0,arg1,arg2);
console.log(result);
return result;
};
});
});
"""
# startup frida and attach to com.android.chrome process on
a usb device
session = frida.get_usb_device().attach("cn.nubia.bbs")
# create a script for frida of jsccode
script = session.create_script(jscode)
# and load the script
script.on('message', on_message)
script.load()
sys.stdin.read()
验证获取到的 key、偏移量是否正确
然后可以重写算法实现对数据的加密、解密。
在实际逆向算法的过程中,经常会遇到 apk 反编译后的源码混淆
比较严重,或者将算法写入到 so 中的情况,这无疑给逆向算法的
工作带来的更多挑战,需要投入更多的精力。而我们的重点不是
逆向出算法,而是通过逆向算法解决数据加密、签名,以便能够
直接进行漏洞挖掘,是不是有更方便的方法呢?
在 hook 时批量操作
在测试越权、撞库时,只需替换请求中的某些参数的值。通过 frida
hook 相关方法,批量修改相关参数的值,然后循环将修改后的内
容传入原方法即可。
在如上代码对应的请求中,以撞库为例,通过 frida hook 该方法,
循环替换 username 的值,然后在控制台打印修改参数后请求的结
果,可以快速测试是否存在撞库漏洞,从而绕过了逆向加密算法。
在某些场景中,只能批量生成加密或签名后的请求数据,而无法
或者不方便在 hook 时批量发起 http 请求,那也只需要在 burpsuite
中重放加密后的数据即可。