武汉加油!
与口罩的羁绊
总所周知,在大前提下。口罩以及成为了当今社会的重要工具,不可或缺。 合肥现在的口罩是网上预约,线下提货。我爸我妈等中年人因为接触智能机微信不久(只有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给你发过去 如果有人看的话,我会写一个更详细的版本。包括代码