游客发表
QQKey这玩意儿,录工说白了就是具源一把钥匙。腾讯给每个QQ账号在本地生成一个加密串,录工存哪儿?具源老版本在`C:\Users\你的用户名\Documents\Tencent Files\你的QQ号\`下面,文件名带个`.key`后缀。录工新版挪到了`AppData`里,具源路径变了但本质没变。录工这东西的具源作用就一个——让QQ客户端不用每次输密码就能登录。你点开QQ,录工它自动读这个key,具源验证通过,录工直接进主面板。具源
源码结构其实不复杂。录工核心就三个模块:定位key文件、具源读取二进制、录工解密。定位这块,遍历注册表`HKEY_CURRENT_USER\Software\Tencent\QQ`下面的`UserDataSavePath`,拿到基础路径,再拼上QQ号。读取用`CreateFile`打开,`ReadFile`读进缓冲区。解密最麻烦,得用腾讯自己的算法,网上流传的版本大多是从逆向工程扒出来的,密钥硬编码在dll里,不同QQ版本还不一样。
我见过一份2017年的源码,C++写的,MFC框架。主函数里先枚举窗口,找`TXGuiFoundation`类名,拿到QQ进程的PID。然后`OpenProcess`,`ReadProcessMemory`直接读内存里的key。这招比读文件狠,因为有些版本key不落盘,只在内存里。但问题也明显——得提权,杀软直接报毒。那哥们儿在代码注释里写了一句“仅供学习”,结果GitHub上fork了四百多次,issue里全是“编译报错”“key无效”。
解密部分用到了异或和位移。具体逻辑:取key的前16字节当种子,跟一个固定常量数组做异或,再循环左移3位。听起来简单,但常量数组有256个元素,手动抄容易错位。我试过用Python复现,跑出来的结果跟QQ实际用的差一位,死活登不上。后来发现是字节序问题,x86小端,得把数组倒过来读。改完就通了。这种细节,源码里不会写注释,全靠自己踩坑。
还有个坑:QQ版本更新会改key格式。2019年之后,key文件加了头部校验,前8字节是时间戳,后8字节是CRC32。你直接解密后面的数据,QQ客户端会拒绝。得先把这16字节剥掉,再走老流程。网上大部分源码没更新这一步,所以很多人拿着旧代码跑新QQ,提示“登录失败”。不是代码错,是腾讯改了规则。
安全性方面,这工具本身不偷密码,它只是复用已有的登录凭证。但落到坏人手里,配合远控木马,就能直接接管账号。腾讯从2020年开始推“设备锁”,新设备登录要短信验证,key的作用被削弱了。不过老账号、常用设备上,key依然有效。我测试过,同一台机器,key文件复制到另一台,只要QQ版本一致,照样能登。腾讯的检测机制主要看IP和设备指纹,key本身不绑定硬件。
源码里还有个细节:读取时用了`FILE_FLAG_BACKUP_SEMANTICS`,为了绕过文件占用。QQ运行时key文件是锁定的,普通`fopen`打不开。得用`CreateFile`带这个标志,才能以备份模式读。这招在Windows上通用,读任何被占用的文件都行。写这代码的人,对Win32 API挺熟。
最后说个实际案例。去年有个朋友忘了QQ密码,但电脑上还登着。我让他别关QQ,直接翻`AppData\Roaming\Tencent\QQ\`,找到`key`文件夹,把里面文件拷出来。用那份2017年的源码改吧改吧,编译了个exe,跑出来key,填进一个第三方QQ客户端(比如旧版TM),登录成功。全程没碰密码。他后来改了密码,key失效,但那次经历说明——本地凭证的威力比想象中大。
源码这东西,放出来就是双刃剑。学加密逻辑可以,拿去干坏事不行。腾讯也在堵,但道高一尺魔高一丈,只要QQ还依赖本地key,这工具就灭不干净。
友情链接