一、我这次想解决什么
我是华中农业大学的学生。学校校园网走深澜(Srun)认证,开机连上 WiFi 不算联网,得开浏览器跳认证页,手动输学号密码才算上网。更磨人的是宿舍网络经常分不到 IP,还得先跑一遍安全软件的"网络修复"才出得了认证页——顺利一分多钟,不顺利五六分钟,特别麻烦影响网络体验
这次我想做的:把认证流程整个逆向下来,写一个开机自动认证工具,装到同学电脑上双击就能用。
二、我是谁,为什么这件事对我重要
农学相关专业学生,写代码有些经验,但从没做过协议逆向。校园网认证不是发个 HTTP 请求就完事——密码要在本地经过 HMAC-MD5、SBXTEA、魔改 base64、SHA1 四道处理才能提交,全是门户 JS 里的黑盒。放以前这种活儿我大概率想想就放弃了,这次拉上 TraeCode 一起干。
三、我是怎么把 TraeCode 慢慢用顺的
第一坑:空手问 AI,它"记忆"出来的协议是错的。
一开始直接问"深澜认证协议怎么实现",答案看着头头是道,跑起来就是认证失败——深澜的 base64 是自定义字母表,SBXTEA 是魔改 TEA,这些细节 AI 凭记忆写必错。转机是换了姿势:F12 把门户实际加载的 Portal.js、all.min.js 存下来整个丢进 TraeCode,让它照着源码梳理协议。从"让 AI 回忆"切换到"给 AI 喂一手材料",是整个过程里最重要的一次用法转变。
第二坑:算法写完不知道对不对——让官方代码当裁判。
就算照着源码写,也可能死在位运算溢出、小端打包这类细节上。我的办法:让 TraeCode 从 all.min.js 里原样切出官方的 md5/sha1 库,用"官方原始 JS"跑出标准答案,和 Python 实现逐字节比对,覆盖特殊字符、中文、空密码的测试向量。两边完全一致才算正确,这个交叉验证方法后来沉淀在了仓库 dev/ 目录里,也是整个项目我最想安利的部分。
第三坑:代码对了,真机翻车。
装到室友电脑上认证永远失败,日志里本机 IP 是 26.x。把日志整个贴给 TraeCode,一眼定位:他开着 Radmin VPN,虚拟网卡抢了默认路由,脚本拿到的是 VPN 的假 IP。改成"向认证服务器选路"取 IP、加自动切换网卡兜底后,装着 Clash TUN 的机器也能正常认证了。教训:排障别自己猜,把完整日志原样贴给 AI。
用顺之后后面都是顺水推舟:纯标准库实现(同学电脑只有裸 Python)、密码 DPAPI 加密不落明文、PyInstaller 打包配一键安装。约 600 行主脚本,从 8 月底到 9 月初三次真机翻车,迭代成宿舍稳定在用的 v1.1.2。
四、做成了什么,给后来的人留一句建议
最终成品是两个仓库:源码版(含协议分析和交叉验证工具)和打包版(下载 zip 双击 install.bat 即装,一键卸载),宿舍同学在用。完整的协议链路、部署指引、排障 FAQ 都在仓库里,这里就不展开了。
给后来的人一句建议:逆向非标准协议时,别让 AI 凭记忆写——喂它官方原始源码,再让官方代码给你的实现当裁判,逐字节比对。 这个思路适用于任何"有个黑盒在前、要复刻其行为"的场景。AI 搭子真正的价值不是替你回忆知识,是帮你把读几千行压缩 JS、写加密算法、交叉验证这种没人愿意干的脏活,一个下午干完。
源码与协议分析: GitHub - gggggdd/hzau-autologin · GitHub 打包版(同学直接用这个): GitHub - gggggdd/hzau-autologin-release: 华中农业大学校园网一键自动认证(打包分发版,无需 Python 环境) · GitHub
仅供学习交流,请遵守学校网络使用相关规定。