Frida-hook:微信数据库的破解
- Frida-hook:微信数据库的破解
- 1. 准备条件
- 2. 用frida获取key
- 2.1 静态分析微信apk文件
- 2.2 frida hook:
- 3. 用sqlcipher打开数据库:
Frida-hook:微信数据库的破解
我们可以从root过的手机中,找到微信相关数据库,例如EnMicroMsg.db,是最关键的一个。但是,无法用sqlit攻击直接打开,因为这个数据库是加密过的。为了正常显示,就需要解密。用Frida 对Android SQLiteDatabase相关Api进行hook,就可以得到key,进而用sqlite软件可以打开了。本篇主要介绍如何hook,得到key,然后打开EnMicroMsg.db数据库。
1. 准备条件
使用的软件及版本:
- root过的手机,可以获取root权限;
- adb命令可以正常执行;
- 微信apk:
- frida版本:
- 数据库软件:sqlcipher
2. 用frida获取key
2.1 静态分析微信apk文件
用jadx-gui进行微信apk的分析,主要看SQLiteDatabase这个类的相关方法。
2.2 frida hook:
得到的结果中,截取前7个字符,就得到了key。
脚本如下:
import frida
import sys
jscode = """Java.perform(function(){ var utils = Java.use("com.tencent.wcdb.database.SQLiteDatabase"); // 类的加载路径utils.openDatabase.overload('java.lang.String', '[B', 'com.tencent.wcdb.database.SQLiteCipherSpec', 'com.tencent.wcdb.database.SQLiteDatabase$CursorFactory', 'int', 'com.tencent.wcdb.DatabaseErrorHandler', 'int').implementation = function(a,b,c,d,e,f,g){ console.log("Hook start......");var JavaString = Java.use("java.lang.String");var database = this.openDatabase(a,b,c,d,e,f,g);send(a);console.log(JavaString.$new(b));send("Hook ending......");return database;};});
"""
def on_message(message,data): #js中执行send函数后要回调的函数if message["type"] == "send":print("[*] {0}".format(message["payload"]))else:print(message)
process = frida.get_remote_device()
pid = process.spawn(['com.tencent.mm']) #spawn函数:进程启动的瞬间就会调用该函数
session = process.attach(pid) # 加载进程号
script = session.create_script(jscode) #创建js脚本
script.on('message',on_message) #加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load() #加载脚本
process.resume(pid) # 重启app
sys.stdin.read()
3. 用sqlcipher打开数据库:
这是一个windows中测试通过的。