手机号查QQ号到底怎么实现的?我把 qq.py 拆开给你看
【免费下载链接】phone2qq项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq
凌晨一点,我在旧手机里翻遍了短信记录,还是想不起那个八位数的QQ号。抱着最后一丝希望,我找到了一个叫 phone2qq 的开源项目——它的用途很单纯:手机号查QQ号。把手机号填进脚本,脚本去和QQ的服务器对话,再把结果翻译回人话。这篇文章就是我当时顺着代码走完一遍后的完整记录。
先说结论:它不完美,但值得拆
如果你指望它像官方找回流程那样稳定可靠,我劝你先调整预期。项目自带的 README.md 写得很直白:"该方法可能已经失效,2016.04.14"。这是一份针对2016年前后旧版QQ登录协议的逆向产物,到今天,服务器大概率已经换了协议、换了密钥。
但它依然是难得的学习材料——整个项目只有两个 Python 文件,qq.py负责组包发包,tea.py负责加解密,加起来两百多行,没有框架、没有第三方依赖。你能在一个晚上读完,并且真的看懂。这种密度,比不少"XX协议实战教程"来得实在。
一段真实到有点狼狈的经历
事情起因是换手机。新机装好QQ,登录时才发现:账号是多少来着?我习惯用手机号登录,可系统偏偏只认"账号+密码"。密码我记得,账号不记得,死循环。
官方找回流程是这样:打开网页 → 点找回密码 → 输入手机号 → 收验证码 → 填验证码 → 等结果。听起来五分钟的事,我实际折腾了快半小时——短信延迟、验证码过期、页面重定向,每一步都在消耗耐心。当时我就在想:手机号既然能登录,那它和账号的绑定关系就一定能通过协议查出来,只是官方没给你这个入口而已。
于是有了这次的拆代码之旅。
拿到 phone2qq,先别急着跑
仓库里躺着三样东西:
qq.py:主程序,模拟QQ客户端的两次登录握手tea.py:TEA 分组加密算法的 Python 实现README.md:唯一一段使用说明——"请自行修改相应代码"
注意最后那句。它不是开箱即用的成品,而是一段需要你动手改的手机号查QQ号脚本。核心入口长这样:
login = QQLogin() print(login.getQQ('10000000000')) # 把这里换成你的手机号顺着 qq.py 走:它在跟服务器说什么
这才是最有意思的部分。QQLogin类把"假装客户端登录"拆成了两步。
第一步,login0825。脚本对手机号做了一次很讨巧的变换:每一位数字x都变成字符串'3x',比如1变成31,11位号就变成22位十六进制数据,拼进一个超长的包里。这个包用 TEA 加密后,通过 UDP 发到183.60.56.100:8000——代码里写死的服务器地址。服务器回应后,脚本从密文里挖出三样东西:token0825、serverTime和serverIP,它们是下一步的通行证。
第二步,login0826。拿着上一步的凭证重新组包:手机号再次编码进去,密码用 MD5 算一遍(代码里默认是123456),整个包再用另一组密钥加密。这次的响应里藏着答案——如果返回06开头,QQ号就在第7到13位;如果是fc开头,就换一个位置取。最后str(int(..., 16))把十六进制转成十进制,QQ号到手。
而tea.py里的encipher/decipher是标准的 TEA 核心轮函数,delta = 0x9E3779B9这个魔法常数一出现,懂行的人就笑了:TEA 算法的标志性特征。
整个流程的本质是:把"用手机号登录QQ"这件事,用代码完整模拟了一遍。服务器验证通过,自然就把账号还给了你。这也是它必须"开启手机号登录"才生效的原因——没开这个功能,服务器根本不认这次查询。
让它跑起来,只需要一条命令
git clone https://gitcode.com/gh_mirrors/ph/phone2qq cd phone2qq python3 qq.py改好手机号后运行,如果协议还通,几秒内就能看到结果;如果服务器没反应,也别失望——这说明协议已经换代,正好是你接着研究的新起点。
qq.py末尾还留了一段被注释掉的批量示例:
for i in range(10000): num = '1360106%04d' % i qq = login.getQQ(num) if qq: print('%s >> %s' % (num, qq))注意,这段是用来扫号段的,别这么干。它只该出现在协议研究中,不该出现在任何人的"批量查询工具"里。
它能做什么,不能做什么
把边界说清楚,你才不会用错地方:
- ✅ 查自己手机号绑定的QQ号,前提是该号开启了手机号登录
- ✅ 作为学习QQ登录协议、TEA加密、UDP组包的真实案例
- ❌ 拿不到密码,它只返回账号
- ❌ 不能查别人的号,用途越界就是违规
- ❌ 别再指望它长期可用,它是2016年的协议快照
换句话说,它的价值在"看懂"而不在"一直能用"。真到急需找回账号的时候,官方验证码流程依然是最可靠的路。
想接着研究?给你几个抓手
如果你被这段代码勾起了兴趣,可以顺着这几个点往下挖:
- 把
login0825和login0826的包拆成表格,对比两次握手各自带了哪些字段 - 改
tea.py的密钥,观察解密失败时返回值的形态,理解校验机制 - 用抓包工具对比当前QQ客户端的真实流量,看这些年协议迭代了什么
每一步都会有收获,因为这是真实世界里的协议代码,不是教程里那种"删掉错误处理"的伪代码。
现在轮到你了。你的第一个目标很简单:克隆仓库,读完README.md,把qq.py里getQQ那行改成自己的手机号跑一次——无论成功还是超时,都算完成。跑完记得回来聊聊:这是你第一次见到"伪装客户端"这种逆向思路,还是已经在盘算着给这个老项目写个新版本了?
【免费下载链接】phone2qq项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考