合肥口罩预约流程简化

893 阅读3分钟

武汉加油!

与口罩的羁绊

总所周知,在大前提下。口罩以及成为了当今社会的重要工具,不可或缺。 合肥现在的口罩是网上预约,线下提货。我爸我妈等中年人因为接触智能机微信不久(只有3年),打字速度跟不上,流程不熟悉等原因。抢不到限量的口罩,所以我才看了一下整个抢购流程,然后和大家分享一下。很多人会说这么做不道德。严正说明一下:

  • 合肥本地人每人每5天只能购买一次,不需要担心囤货啥问题
  • 购买口罩需要凭身份证购买
  • 我的所作所为只是简化了抢购流程,并没有hook后台
  • 本人没有用来牟利,也禁止大家用于牟利。

系统解析

流程分析

整体流程很简单,在微信公众号上打开网页、输入数据、进行预约。然后loading等待预约成功。 需要做的几点

  • 抓包
  • 代码逻辑
  • 预留信息,仿造整体流程,快速预约

工作环境

  • Charles
  • posman
  • android studio

抓包

Charles连上手机,进行抓包。发现没有二次授权,公众号没有使用微信sid进行二次鉴权与监控。没有对url,参数等进行加密。很容易得到基础Url

查看主页面,搜寻整体代码

整体网页没有加密,js写在了html代码中。没有进行关键混淆。所以我就不贴具体代码了,毕竟特殊时期仓促开发的

两个关键点

  • 药房

通过js代码可以发现药房查询的方法,访问对应url 得出 { "data": [{ "code": "", "name": "", "search": null, "flag": null, "address": null, "phone": null, "areaId": null, "areaName": null, "stock": 0 }], "succeed": true, "status": 200 }

  • 验证码

图片验证码url是: --ncms/mask/captcha 将图片下载并识别 如果验证码验证的话,就麻烦需要OCR或者人工识别。 万幸,看了一下代码逻辑和基础测试,验证码是假的

模拟请求

由于5点服务器几乎无响应,加上电脑有点问题。无法抓包,只能晚上进行黑盒测试。 整体未看见加密混淆代码,所以预估没有加密。 ajaxPost()看到这个函数就很熟悉了,发现是表单post,content-type一共有3种。首先进行常用的key-vaule,和对应两种content-type,发现报错。 Required request body is missing: or Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 排除法,只剩最后一个content-type 为json的时候。一切结束

实际操作

其实到这里就没必要继续说了,可以用python甚至直接用postman。我由于是要给爸妈用的,所以就写了安卓程序。

  • 写入购买人的信息,存入数组。
  • For循环遍历
  • 显示请求结果

写在最后

零零总总的时间花了一天,白天破解,晚上写个文章纪念一下。工作了3年终于让爸妈实质性的明白了我编程是有用的。结果爸妈很开心,所以我也很开心。如有合肥的同学,家里的长辈抢不到口罩的。可以私聊我。我把app给你发过去 如果有人看的话,我会写一个更详细的版本。包括代码