本帖最后由 maozhenyu 于 2021-2-14 18:59 编辑
*注意 本文不允许转载。如果发现,追究侵权责任
*** 已检测到的违规转载公示:
- www.y4f.net/329368.html(12251100z,请尽快删除)
网络上关于Mac微信数据库的相关话题非常多,各路大神讨论(转载)了自己的实操经验以及心得体会。
然鹅有微信,却没有看到QQ的。(果然是QQ已经过气了?)
首先回顾一下Mac微信的db,可以参考这篇文章https://cloud.tencent.com/developer/article/1561339。Mac微信的数据库使用SQLite3 + SQLCipher3,作者通过lldb断sqlite3_key函数的方式截取了数据库密码,再使用DB Browser for SQLite等支持SQLCipher的数据库管理工具,成功地打开了本地的数据库。
不错,那么同样的方法QQ上能不能用呢?
> 答案当然是不能,否则我还写这篇文章干嘛。
之前已经对MacQQ有比较深的了解,也用classdump等工具导出过所有header文件。可以证实MacQQ一样使用SQLite(有SqliteDatabaseHelper等class)。另外根据论文https://www.sciencedirect.com/sc ... i/S1742287619300210,Msg2.0是线上生成的key,应该可以猜测Msg3.0也是线上生成的(后来在反汇编的时候证实是)。
lldb 调试QQ
因为使用的是sqlite3,所以同样打sqlite3_key的断点,输入br set -n sqlite3_key
尝试登陆QQ
成功断在了Hummer库的sqlite3_key点上。
查看开源代码,sqlite3_key的定义是
[C++] 纯文本查看 复制代码 int sqlite3_key(sqlite3 *db, const void *pKey, int nKey);
第二个参数是key,第三个函数是key的大小。
分别查看
这个就是db的key,大小16字节。
BTW,最新版的QQ数据库在 ~/Library/Containers/com.tencent.qq/Data/Documents/contents/<你的QQ号>/ 目录下
兴冲冲地送进DB Browser for SQLite,结果吃闭门羹。穷举了所有可能的配置,都无法打开这个文件。
有这么几种可能:
(1)是SQLCipher,但pagesize、cipher_salt、kdf_iter、cipher_kdf_algorithm等关键参数不是默认值
(2)是改动过的SQLCipher
(3)加密算法根本不是SQLCipher
* 我个人的猜测是(1)或者(2),在后续反汇编的时候,看到大部分代码都和SQLCipher一致。
反正不管怎么说,用随手可见的工具是已经打不开了。
在断点的时候,我注意到sqlite3_key这个函数并不在QQ的binary本体里,而是在Hummer库内,那就有点方便了。
反正我的最终目的是解开这个数据库。与其去思考这些参数或者算法,找到一个合适的工具,还不如直接利用这个“弱点”,直接下手。
查看Hummer.framework的导出表,可以看到sqlite3有关的函数全部被导出了,非常好。
写一段小程序,链接Hummer.framework,同时将数据库密码置0(请勿直接在原始文件上操作。如果不慎操作了,颠倒代码重新加密。切勿打开QQ,否则会导致原先文件报废)。
运行,获得非常理想的全部OK结果。
成功打开Cache1.1.db。
要注意的是,QQ的每一个db的密码不一定全部相同。打开顺序是Cache1.1.db -> Msg3.0.db(QQ.db),以此截获即可。
1/11 UPDATE: 这楼里有一个张图墙内说看不了,已经更新了
2/14 UPDATE: PC版的方法见这里 https://www.52pojie.cn/thread-1370802-1-1.html |