news 2026/8/15 1:52:18

手机号查QQ号到底怎么实现的?我把 qq.py 拆开给你看

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手机号查QQ号到底怎么实现的?我把 qq.py 拆开给你看

手机号查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——代码里写死的服务器地址。服务器回应后,脚本从密文里挖出三样东西:token0825serverTimeserverIP,它们是下一步的通行证。

第二步,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年的协议快照

换句话说,它的价值在"看懂"而不在"一直能用"。真到急需找回账号的时候,官方验证码流程依然是最可靠的路。

想接着研究?给你几个抓手

如果你被这段代码勾起了兴趣,可以顺着这几个点往下挖:

  1. login0825login0826的包拆成表格,对比两次握手各自带了哪些字段
  2. tea.py的密钥,观察解密失败时返回值的形态,理解校验机制
  3. 用抓包工具对比当前QQ客户端的真实流量,看这些年协议迭代了什么

每一步都会有收获,因为这是真实世界里的协议代码,不是教程里那种"删掉错误处理"的伪代码。


现在轮到你了。你的第一个目标很简单:克隆仓库,读完README.md,把qq.pygetQQ那行改成自己的手机号跑一次——无论成功还是超时,都算完成。跑完记得回来聊聊:这是你第一次见到"伪装客户端"这种逆向思路,还是已经在盘算着给这个老项目写个新版本了?

【免费下载链接】phone2qq项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 1:50:13

基于LP3667B的5V/1A反激式开关电源设计全解析

1. 项目缘起:为什么从LP3667B这颗芯片开始?最近手头有个小项目,需要一个稳定可靠的5V/1A直流电源,要求体积小巧、成本可控,并且能直接从220V交流市电取电。这种需求在智能家居、小家电控制器、IoT模块供电等领域太常见…

作者头像 李华
网站建设 2026/8/15 1:48:06

找pcb板厂?这些坑踩一个就亏大了

身为一名历经多年在PCB行业中不断摸索前行的工程师, 于今日, 我凭借猎板工程师的角度, 同诸位讲讲挑选PCB板厂时那些必定要知晓的诀窍。 不少客户在下单之际, 仅仅把目光聚焦于价格以及交期之上, 然而却将制程能力的深度匹配予以忽视了, 关于所谓的四层板, 还有六层板呀高, 层板…

作者头像 李华
网站建设 2026/8/15 1:45:44

PCB Layout爬电间距和间隙原来是有这些规范的!

PCB Layout爬电间距和间隙原来是有这些规范的!一直有很多网友咨询过PCB Layout里的爬电间距是怎么确定的?有什么相关参考吗?今天小编给大家整理了一些关于PCB Layout爬电间距和电气间隙的干货,希望对大家有帮助,也欢迎…

作者头像 李华