【电子数据取证】微信8.0.50版本数据库解密

文章关键词:电子数据取证、手机取证、微信取证、数据库解密

通过对8.0.50这一特定版本的分析,我们期望揭示软件迭代背后的逻辑思考,以及安全策略的演进方向。这不单纯是对技术细节的揭秘,更是一次关于未来通信安全趋势的展望,助力行业内外人士更好地理解数据加密的现实意义与潜在挑战。

本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。

本人对任何原因在使用本人提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。

二、所使用的主要工具及版本

微信app 8.0.50

Frida 16.1.11

Jadx 1.5.0

MuMu模拟器 3.8.24

DB Browser for SQLite 3.12.2

三、分析过程及实现

想要进行微信数据库的逆向必须先了解其采用的是何种数据库及采用的防护手段!

Android中的SQLite是一种轻量级的关系型数据库,它是Android平台中默认的本地数据库存储解决方案。SQLite在Android系统中广泛使用,可用于存储和检索应用程序中的数据。

然而,SQLite却有一个致命的缺陷:不支持加密。因此存储在SQLite中的数据可以被任何人轻易地查看。所以,需要在开发应用时对数据库进行加密,目前对SQLite有两种加密方式:

1、对写入数据库的数据进行加密

2、对整个数据库文件进行加密

而微信所采取的方式便是第二种:对整个数据库文件进行加密。微信的数据库位于本地的/data/data/com.tencent.mm/MicroMsg/

66d9 xxxxxxxxxxa7目录下,名称为:EnMicroMsg.db,最后一个文件夹每个手机都不一样,需要自己找一下:

将其导出后用DB Browser for SQLite打开:

可以看到,需要输入密钥才能查看文件。那我们现在的目标就是获取数据库的密钥。

腾讯有着自己的app加固方案(腾讯乐固),但对微信查壳发现并没有加壳:

猜测原因是加壳后会影响使用性能,而微信这么一个全国几亿人在用的软件对性能的要求出不了一丝偏差。

用jadx加载APK,对SQLite有所了解的应该都知道,他有着自己所定义的api,要想对其进行操作必定会用到SQLiteDatabase这个类,搜索可得:

双击进入后,查找open函数,查看open函数的具体实现:

调用open函数打开数据库时,必然需要密钥。观察open函数的参数,第一个参数类型为byte数组,比较可疑。使用frida编写hook脚本:

function main() {

Java.perform(function () {

console.log("\nHook Start!");

var SQLiteDatabase = Java.use("com.tencent.wcdb.database.SQLiteDatabase");

SQLiteDatabase"open".implementation = function (bArr, sQLiteCipherSpec, i15) {

console.log('open is called' + ', ' + 'bArr: ' + JSON.stringify(bArr) + ', ' + 'sQLiteCipherSpec: ' + sQLiteCipherSpec + ', ' + 'i15: ' + i15);

var ret = this.open(bArr, sQLiteCipherSpec, i15);

console.log('open ret value is ' + ret);

return ret;

}

});

}

setImmediate(main);

打开微信进行hook,结果如下:

将barr转成ascii码得到字符串"2248874",用SQLiteStudio解密数据库,解密算法配置为:

PRAGMA cipher_compatibility = 3;

PRAGMA cipher_use_hmac = OFF;

PRAGMA cipher_page_size = 1024;

PRAGMA kdf_iter = 4000;

至此,成功解密数据库。

四、总结

这篇文章记录了微信8.0.50版本数据库的解密过程,旨在为技术爱好者提供一个学习的参考。从介绍主要工具和SQLite数据库的加密方式入手,逐步分析微信应用的代码,通过Frida脚本精准截获打开数据库所需的密钥,并最终成功解密了数据库文件。在这个过程中,技术探索所带来的兴奋与成就感是显而易见的。然而,必须强调的是,所有技术操作都应仅用于教学目的。希望读者们在合法合规的基础上,谨慎运用这些技术,以确保尊重和保护他人的隐私与权利。

相关推荐
余槐i1 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹1 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo1 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人2 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台3 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
花间相见5 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见5 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing20235 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶5 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构
对空六课6 小时前
RFM分层边界变化的回溯计算
大数据·服务器·前端·数据库·人工智能·算法·数据分析