我们可以从root过的手机中,找到微信相关数据库,例如EnMicroMsg.db,是最关键的一个。但是,无法用sqlit攻击直接打开,因为这个数据库是加密过的。为了正常显示,就需要解密。用Frida 对Android SQLiteDatabase相关Api进行hook,就可以得到key,进而用sqlite软件可以打开了。本篇主要介绍如何hook,得到key,然后打开EnMicroMsg.db数据库。
使用的软件及版本:
用jadx-gui进行微信apk的分析,主要看SQLiteDatabase这个类的相关方法。
得到的结果中,截取前7个字符,就得到了key。
脚本如下:
import frida
import sys
jscode = """Java.perform(function(){ var utils = Java.use(t.wcdb.database.SQLiteDatabase"); // 类的加载路径utils.openDatabase.overload('java.lang.String', '[B', t.wcdb.database.SQLiteCipherSpec', t.wcdb.database.SQLiteDatabase$CursorFactory', 'int', t.wcdb.DatabaseErrorHandler', 'int').implementation = function(a,b,c,d,e,f,g){ console.log("");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("");return database;};});
"""
def on_message(message,data): #js中执行send函数后要回调的函数if message["type"] == "send":print("[*] {0}".format(message["payload"]))else:print(message)
process = _remote_device()
pid = process.spawn([t.mm']) #spawn函数:进程启动的瞬间就会调用该函数
session = process.attach(pid) # 加载进程号
script = ate_script(jscode) #创建js脚本
('message',on_message) #加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load() #加载脚本
sume(pid) # 重启app
ad()
这是一个windows中测试通过的。
本文发布于:2024-01-29 03:32:28,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170647035112405.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |