自从疫情以来,学校申请通行码的流程变的过于冗长。最近和同学一起买了 quantumult X 这个软件,这个软件不光能够当作一个好用的代理软件,同时还拥有抓包改包等功能。于是便萌发了利用这个软件修改通行码网页的响应包来将未申请状态修改为申请状态。

首先先抓包,看看这个东西请求了那些数据,可以利用 quantumult X 直接抓包,也可以使用 proxy man 等电脑抓包工具抓包。

经过抓包以后发现了 一个可疑数据包

IMG_3299 2.jpg

其中 mobile 参数后面跟着学生学号,如果这个地方改成别人的学号,是能看到别人的通行码状态的。

今天刚好我申请过通行码,但是我的室友没有,于是我用我室友的学号做为参数发包,和我现在的包对比,看看有什么不一样的地方。

{
  "success": true,
  "message": "已完成3剂次新冠疫苗接种",
  "code": 200,
  "result": "1",
  "data": { "result": "3", "title": "核酸检测", "date": "/", "resultInfo": "48小时未采样" },
  "timestamp": 1653647157644
}
{
  "success": true,
  "message": "未打卡日期: 2022-05-26,2022-05-25,2022-05-24",
  "code": 200,
  "result": "2",
  "data": { "result": "3", "title": "核酸检测", "date": "/", "resultInfo": "48小时未采样" },
  "timestamp": 1653648281087
}

上面是申请过的通行码接口返回的数据,然后后面是没有申请的状态。可以看到请求中没有签名相关的参数,说明我们通过中间改数据包来欺骗前端的思路是可行的。同时我们注意到申请通过的人 result 的值是 “1” 而申请未通过的人的值是 “2”。后面我利用 burp suite手动抓包改包,确定了这个参数是显示红色通行码还是蓝色通行码的关键。

然后还有一个不一样的参数是 “message” 这个参数主要是显示一些提示信息的。如果没有领取通行码成功,那么这个地方就会显示无法申请的原因,比如说向上面就显示了什么时候没有打卡。如果申请成功,这个地方会显示你的疫苗接种次数。

所以我们要做的就很简单了,只要我们利用 quantumult X 将响应包这个对应的参数修改掉就完事了。

编写 quantumult X 的脚本也很简单,下面是一个脚本的样例,照着他的样子编写一个 js 脚本以后丢到 GitHub 上的一个仓库里

Quantumult-X/sample-rewrite-with-script.js at master · crossutility/Quantumult-X

然后我们直接在 quantumult X 中添加重写规则。在重写规则页面点击添加。

IMG_3300.PNG

然后我们类型选择 script-response-body, url 那个地方填上获取验证码的地址,然后脚本路径你刚才上传到 GitHub 的那个脚本的网址就行。(raw.githubusercontent 开头的)

IMG_3303.PNG

之后保存以后在设置页面里开启重写功能即可

IMG_3304.PNG