前言

因为某些事情,我需要导出微信记录,奈何网络上找了很多方法没有实现,主要是数据库解密的问题!

所需工具

安卓手机一台
电脑一台 python 环境
微信版本 8.0.31
数据线一条
Frida工具
sqlcipher 查看数据库内容
除了硬件,其他我会在本文中提供下载链接!

目录结构

image2 文件夹:里面存放着所有的微信聊天图片,位置在:/data/data/com.tencent.mm/MicroMsg/[32位字母]/image2
voice2 文件夹:里面存放着所有的微信语音,位置在:/sdcard/Android/data/com.tencent.mm/MicroMsg/[32位字母]/voice2
voide 文件夹:里面存放着所有的微信视频,位置在:/sdcard/Android/data/com.tencent.mm/MicroMsg/[32位字母]/voide
avatar 文件夹:里面存放着所有的微信头像,位置在:/data/data/com.tencent.mm/MicroMsg/[32位字母]/avatar
Download 文件夹: 微信的聊天发送的文件存放在这里,位置在:/sdcard/Android/data/com.tencent.mm/MicroMsg/Download
EnMicroMsg.db: 微信的数据库文件,位置在:/data/data/com.tencent.mm/MicroMsg/[32位字母]/EnMicroMsg.db
WxFileIndex.db: 微信的文件索引数据库文件,位置在:/data/data/com.tencent.mm/MicroMsg/[32位字母]/WxFileIndex.db

我们只需要EnMicroMsg.db这个库即可

开工

不管你用什么方式,备份手机 备份APP应用数据 或 ROOT手机 不管你什么方法,总之把这个EnMicroMsg.db文件提取出来到电脑!

解密数据库密码

通过 Frida 来获取访问密码,建议用这个方法,因为这个方法可以直接得到密码,而不用一个一个的去试拼接出来的密码,并且绝对正确。首先电脑通过下面命令安装 Frida 包:

$ pip install frida
$ pip install frida-tools

然后使用 adb 查看手机架构:

$ adb shell getprop ro.product.cpu.abi

arm64-v8a 

得到的是 arm64-v8a,然后去 https://github.com/frida/frida/releases 页面下载对应的 frida-server-<版本号>-arm64.xz 包,然后解压。注意:这边的 frida-server 版本号要和上面电脑安装的 frrida 的版本号一致,否则可能会出现额外的错误。通过 adb 把 frida-server 传到手机:

$ adb push  frida-server-<版本号>-android-arm /data/local/tmp

然后在手机上运行 frida-server:

$ adb shell
$ su
$ cd /data/local/tmp
$ chmod 777 frida-server-<版本号>-android-arm
$ ./frida-server-<版本号>-android-arm

运行后,这个终端界面不要关闭,另外在启动一个终端,然后在终端中输入:

$ adb forward tcp:27042 tcp:27042
$ adb forward tcp:27043 tcp:27043
$ frida-ps -U

如果终端输出了一些进程,那么就表示环境搭建成功了。搭建成功后,在电脑运行下面的 Python 脚本:

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): 
    if message["type"] == "send":
        print("[*] {0}".format(message["payload"]))
    else:
        print(message)
     
process = frida.get_remote_device()
pid = process.spawn(['com.tencent.mm']) 
session = process.attach(pid)  
script = session.create_script(jscode) 
script.on('message',on_message) 
script.load()
process.resume(pid)
sys.stdin.read()

脚本运行后,然后在手机直接打开微信,这时电脑控制台会输出一个 7 位字母,这个就是访问密码。

查看数据

这个就不解释了,用下面这个工具打开,密码就是刚刚得到的密码

https://github.com/Heyxk/notes/blob/master/resource/wechat-tools/sqlcipher.rar

最后修改:2023 年 09 月 19 日 10 : 49 AM
赞赏必须赞赏,多多益善,老板一直发大财!