Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PC端尝试手动解密数据库,rekey返回值26 #17

Open
shagejack opened this issue Dec 5, 2023 · 8 comments
Open

PC端尝试手动解密数据库,rekey返回值26 #17

shagejack opened this issue Dec 5, 2023 · 8 comments
Labels
bug Something isn't working help wanted Extra attention is needed

Comments

@shagejack
Copy link

想要解密一个几年前备份留下的Msg3.0.db,按照教程手动得到了该消息记录的账号的key替换了pcqq_rekey_to_none.cpp的313行,把Msg3.0.db和编译的a.exe丢到Bin下后运行a.exe,Msg3.0.db除了修改时间元数据变化没有任何改变(md5相同),输出如下:
open iRet=0
key iRet=0
====EXEC=========
exec iRet=0
rekey iRet=26
====END=========
我看到返回值26似乎是说被打开的文件不是一个数据库文件,这是数据库损坏了吗?为什么open,key和exec的返回值是正常的?

@Young-Lord
Copy link
Member

这个 cpp 调用的是当前版本(也就是运行目录下的相关dll)里的解密代码,如果这几年里tx更改了加密算法就可能用不了。
不过既然能 exec,导出的方法不止 rekey 一种,你可以试试 VACUUM, ATTACH 等等(当然,不能直接用,这就需要你再去找找资料了)

@Young-Lord
Copy link
Member

不过几年前备份的数据库是怎么得到key的?这个不是会变的吗

@shagejack
Copy link
Author

2022年1月备份的,两年前,key就是三天前从最新版本的QQ获取的,当时是备份了整个QQ目录,所以a.exe是放在当时版本的Bin目录里运行的。

@Young-Lord
Copy link
Member

Young-Lord commented Dec 9, 2023

这个 key 每次打开都会换的,我怀疑你获取到的 key 可能完全不能用
命令行没有其他输出了?正常(貌似)是会在callback函数里打印所有表名的

@Young-Lord Young-Lord added help wanted Extra attention is needed bug Something isn't working labels Feb 27, 2024
@dts24436
Copy link

dts24436 commented Nov 18, 2024

很遗憾,刚才也用这个手动方法试过。因为是5天前的第一次登录QQ的时候,发现提示60010,但没在意。过了一两天才发现聊天记录就这样彻底丢失。QQ版本没换,windows版本也没换。原本是想通过这个工具来想办法让聊天记录可以导入回去,不知道为什么会就这样无法救回来了。

手动方法除了遇到过rekey iRet=26的提示外还遇到过rekey iRet=11(别的部分,提示一样)。自动方法则如下图所示:
Untitled-3

请问有什么可行的解决方案呢?

@Young-Lord
Copy link
Member

@dts24436 根据你聊天记录里的截图,貌似只是 rekey 这一步出了问题。如果这样的话,有概率只是函数位置定位错误(脚本问题)导致的,不一定代表dump出来的这份数据库损坏。
但是我不理解为什么 QQ本身的数据库会损坏,很抱歉出这种事故。也许应该推荐一些更保险的方法才是。
总之保存好Copying decrypted file后面给出的几个文件和key。如果使用sqlite3_exec打开还能读取到消息的话,就还能恢复导出的聊天记录。具体操作我目前没时间实现。

以及也可以试试联系客服,不要提到这个项目就行。

@mrhso
Copy link

mrhso commented Dec 3, 2024

如果使用sqlite3_exec打开还能读取到消息的话,就还能恢复导出的聊天记录。

目前的代码 SigScan 找到的 exec 是错的。正确的应该是如下所示的 sub_56D85990,可能需要修改特征:
U~BSFTS9`EE F7N%7RVRC X

@Young-Lord
Copy link
Member

@mrhso 可以麻烦您看看特征怎么改比较合适吗?如果愿意丢个pr就更好了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

4 participants