Coder Social home page Coder Social logo

hit-autologin's Introduction

哈工大校园网自动登录脚本

🚧 WIP

  • 运行一次可以成功登录
  • 监控并自动登录
  • 校本部
  • 深圳校区
  • 没有认识的威海同学, 欢迎PR

如何使用

  • 在可执行文件路径下创建config.toml文件, 将name, password填入
  • 深圳校区使用demo_config/shenzhen.toml作为模板, 校本部使用demo_config/harbin.toml作为模板
  • 运行main.py即可

如果对登录结果不自信, 可解注释basicConfig(level=INFO)查看网络请求的结果

可用性

2023/12 实测哈尔滨校区可用

2024/2 实测深圳校区登陆可用

初步打算

目前仅仅实现了运行后能完成登录的功能

初步计划实现后台检测连接校园网, 当连接上HIT-WLAN且不能连接的时候自动执行登录的过程

动机

  • 聪明的NetworkManager认证窗口不能记住密码
  • 动手练习编程寄巧
  • 考完计网比较闲
  • 对自己动手能力过分自信

故事线

2023年12月, 当nzg在某个下午再次因为不想输网络认证密码时, 他决定不再忍气吞声, 他成功说服了自己的电脑和GPT同他一起踏上开发自动登录脚本的道路, 他持非常乐观的态度向它们描绘最多半个小时就可以解决这个问题的美好前景, 随后花了一个晚上

对于试图实现类似功能的人也可以作为参考

认证过程大致如下

  • 客户端发起get_challenge请求, 请求服务器提供token
  • 客户端根据服务器提供的token, 计算密码的HMAC-MD5值, 计算整个请求的checksum, 以及一个info签名
  • 客户端组装一个包含上面字段的查询, 服务器收到后验证正确性并准予使用网络

发起的请求

两次

  • get_challenge 请求
  • callback 请求

神秘的info()

个人水平所限, 没有看出xEncode的作用, 所以只能用python重新实现了这个函数

s()l()

一开始也没有看出来sl的作用, 于是也尝试实现, 然而这两个函数巧妙地利用了很多JS特性做了一些Trick, 导致实现的时候颇有坎坷

后知后觉发现就是一个简单的字节流转换成int类型的过程, 于是用py自带的函数完成了这个功能, 对应main.pybyte2arrarr2byte

请注意这份代码跟源代码并不等价, 当flag=True处理UTF-8字符串的时候会导致结果不一样 但是作为计算的字段里面只包含了用户名, 密码, IP地址, 以及两个固定的常量值, 它们出现UTF字符的概率不大, 所以并不影响正确性

base64 编码问题

tldr: 认证端使用的base64编码有问题, 用现成的库算不出它需要的编码

  1. 有人上来非常自信地调了库, 并相信这肯定是没有问题的
  2. 随后发现原网页中base64还偷偷改了字母表, 做了二次映射, 于是写了个mapping验证了一下, 在网页控制台和python反复比对, 再次确认没有问题
  3. 然后调试的时候就发现info的值计算出来始终不对, 而每个函数看起来结果都一样, 就是组装起来结果不对

网页端里面的base64编码:

for (i = 0; i < imax; i += 3) {
    b10 = (getbyte(s, i) << 16) | (getbyte(s, i + 1) << 8) | getbyte(s, i + 2);
    x.push(ALPHA.charAt(b10 >> 18));
    x.push(ALPHA.charAt((b10 >> 12) & 63));
    x.push(ALPHA.charAt((b10 >> 6) & 63));
    x.push(ALPHA.charAt(b10 & 63));
}

这个base64编码当且仅当单字节编码的时候是对的

所以手动实现这个错误的base64编码 :)

hit-autologin's People

Contributors

ninzeige avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.