QQBackup / qq-win-db-key

全平台 QQ 聊天数据库解密
Other
392 stars 50 forks source link

[求助] Windows QQNT 9.9.9-22961提取不到Key #27

Closed Brianwind closed 1 month ago

Brianwind commented 1 month ago

我使用了msojocs/nt-hook这里的脚本进行hook,在QQ启动但还未登录时开始hook,得到的信息有一万多行,并且QQ登录后hook这边就报错退出了

Fatal Python error: none_dealloc: deallocating None: bug likely caused by a refcount error in a C extension
Python runtime state: initialized

Current thread 0x00001d6c (most recent call first):
  <no Python frame>

Thread 0x0000aae4 (most recent call first):
  File "C:\Users\BrianLeng\Desktop\nt-hook-main\nt.py", line 88 in <module>

Extension modules: psutil._psutil_windows (total: 1)

在已经得到的信息里面过滤出a3 str为16位的字符串,里面没有看起来像key的:

a3 str: NTWrapperSession
...
a3 str: NTWrapperSession
a3 str: qqplay_open_auth
a3 str: NTWrapperSession
...
a3 str: NTWrapperSession
a3 str: RMFile-Down-File
a3 str: RMFile-Down-File

(省略号表示与前后字符串相同)

另外,我的QQNT使用了LiteLoaderQQNT插件,不知道是不是这个有影响。

请问有什么办法能解决吗

Young-Lord commented 1 month ago

nt-hook 用的哪个commit?函数地址自己改了吗?

Brianwind commented 1 month ago

nt-hook 用的哪个commit?函数地址自己改了吗?

直接用的main,因为我看超链接给出的版本readme看起来像是给Android用的

函数地址也没有改,因为对hook并不是很熟悉。是需要按照教程前面的方法找到sqlite3_key_v2函数的地址再填进去吗?具体填在哪里可以细说一下吗

非常感谢!!

Young-Lord commented 1 month ago

直接用的main,因为我看超链接给出的版本readme看起来像是给Android用的

不是,那个确实是 Windows 版本main分支才可能不是 Windows 版本。

函数地址也没有改,因为对hook并不是很熟悉。是需要按照教程前面的方法找到sqlite3_key_v2函数的地址再填进去吗?具体填在哪里可以细说一下吗

是,这里 你可能需要用 IDA 分析 QQ 程序目录内的wrapper.node,根据相关的几个教程定位,具体的这里就不展开了

以及与nt-hook仓库相关的问题是不关这里管的,那个仓库与本项目独立,你应该去那里开 issue 的。

Brianwind commented 1 month ago

感谢帮助!

实际上修改你给出的位置不足以提取到key,因为在nt-hook/agent/hook/utils/addr.ts文件内,对方还增加了一个offset,而据我观察,从IDA Pro里拿到的函数地址不需要加上这个地址才是正确的

而对于nt-hook的main分支的最新的commit来说,还需要在nt-hook/agent/hook/nt/index.ts里调用hookDBWin32函数才行

另外,QQNT在启动时会启动5个进程,分别是1个主进程,1个utility进程,1个GPU进程和2个render进程,其中需要hook的是主进程,所以nt-hook的nt.py文件里面寻找pid的部分也需要略作修改才能直接使用。

上面的内容理论上该写在nt-hook的issue里面,但是我懒得再去开一个了,就写在这里方便其他人参考吧。

总之,非常感谢!