12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 710|回复: 0

撬开PC QQ的本地SQLite数据库(适用于Msg3.0.db等)

[复制链接]

49

主题

49

帖子

108

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
108
发表于 2021-7-26 01:27:21 | 显示全部楼层 |阅读模式
*注意 本文于2月14日(1050z)发布于52pojie.cn;不允许转载。如果发现,追究侵权责任
检测到违规转载:https://www .y4f .net/375349.html 请立刻删除


去年年底我发了一篇撬开MacQQ的当地SQLite数据库(适用于Msg3.0.db+)。有部门读者在下面询问相同的方法能不能在PC(Windows上使用)——答案固然是不行的。今天正好需要解开一个Windows下的QQ数据库文件,所以研究了一下,写了这篇文章。

在文章开始前,先做一下Q&A:
1. 打开当地QQ SQLite数据库的意义是什么?
主要是方便备份聊天记录,以及在极度情况下,如果QQ被封,只要先前备份过数据的key,那聊天记录依然可以提取,淘汰信息丢失带来的丧失。
2. 这个方法会不会被不法分子使用窃取隐私?是不是可以用来盗取别人的聊天记录?
该DB文件密码由线上下发而来(具体原理是读取db的SQLite Header,然后发送sso_cryptsvr.0x12c包,从服务器上获得)。发包要求使用密码举行开端认证(wtlogin),因此没有该QQ号的密码,是不大概打开数据库文件的。(这里不考虑对于QQ程序的攻击引发的数据库密码泄露)

-------ZCZC 正文开始----------
本次分析过程使用的是新版的PC版QQ,聊天记录文件存放于Msg3.0.db。用hex工具打开文件一看,就发现有SQLIte3的头。阐明和MacQQ一样,也是SQLite3。加密情况暂时不明,猜想应该是一样的(终极证明的确是一样的。)

既然是sqlite3,那么总体思绪不变,找到调用key的函数。首先看的是sqlite.dll,里面有sqlite3_open都没有发现sqlite3_key为名的函数。接下来继续寻找……
发现在KernelUtil.dll里,找到了一些和SQLite3有关的函数,其中的CppSQLite3DB::key似乎就是我们要找的函数。



其中sub_5D2477A0这个函数长得还挺可疑的。其他的函数看起来都人畜无害。跟进去看看:




(顺便还把其他有“key”的地方都打上了断点)



那么第二个参数就是数据库密码,第三个参数指示长度为16位。key大部门为可见字符。
实验使用上一篇文章提到的方式,对该数据库举行解密。





兴冲冲地用工具打开解密后的db,发现并打不开。
难道解密失败?
继续使用hex工具。可以看到,内容已经全部是明文了。不过前面有400字节的extheader,这就是导致SQLite工具打不开文件的原因。



数据库可以打开了,但是聊天记录以及聊天记录metadata是编码状态,需要解码后才能使用。

这里简单地讲一下解码方式。相关函数的解码函数在KernelUtil.dll内。

Content字段:前8个字节是头部(MSG),之后分别是4字节的时间戳、4字节的随机数、4字节的颜色码(只有低24位有效)、1字节字号、1字节结果、1字节CharSet、一字节FontFamily。
从第24个字节开始,是字体信息。内部是[T]LV,前两位指示字体名称长度,小端序。之后紧跟着字体名称,大端序。
接下来跳过2个字节。进入多段[T]LV,每一段TLV中,第一字节指示负载类型,0x01是文本消息、0x03是图片消息等等;之后的两个字节指示负载长度,小端序。然后是大端序的负载内容。

Info字段(应该是JCE的Map?):跳过前6位(TD开始)。TLV类型来回摆动,第一次遇到的是0x06开头的[T]LV,背面紧跟着2字节的负载长度,再之后是负载内容。负载内容是key。下面一个TLV以4字节的负载长度开头,之后是负载内容,内容是上面key对应的value。再之后的一个[T]LV又是0x06开头……以此类推

---NNNN--

PS. PC版的QQ是有QQProtect这种流氓功能的,QQProtect以内核态驱动形式载入,还窜改了SSDT。所以直接调试被QQProtect掩护的QQ主程序非常困难。这里面有一些小trick,不属于本文讨论的内容。有爱好的可以自己研究。
PS2. 在打开PC QQ登录的时候,会出现多个历程。大致是启动历程、登录UI历程和服务历程(负责实际工作)。启动历程在唤起UI历程之后会立刻被销毁。登录完成后,登录UI历程也会被销毁,断点必须打在服务历程上。

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-3-29 23:39 , Processed in 0.109375 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表