上一篇文章讲解了监控场地的思路,这篇文章进一步讲解如何破解验证码。
从点击提交按钮、弹出验证码,到最终付款之前发生了什么?
其实只有上面三个请求,只要我们模拟出这三个请求,那么不就通过验证码了?
先看看最后的submit请求需要什么参数
关键的参数就是红圈的三个,至于像`reservationOrderJson`这种参数,仔细看看上篇文章,spaceId就是某一块场地,timeId对应某一个时间。红圈的三个参数,我们一个一个地看怎么构造的。
captchaToken
这个最简单先说,这个字段就是第一个请求获取验证码接口get?captcha...的返回的token字段
orderPin
这个字段比较奇怪,我找了好久,最后发现在点击提交的时候就生成这个字段了
submitData: function(e) {
var t = this
, s = this.commonMethods.keySetPassword("".concat(e.clientX, ",").concat(e.clientY));
e是一个pointerEvent,就是你点击提交按钮时鼠标的坐标,根据坐标生成一个orderPin,代码里的s就是orderPin
capchaVerification
这个最难,先看下面的代码
canvasClick: function(e) {
var t = this;
this.checkPosArr.push(this.getMousePos(this.$refs.canvas, e)),
this.num == this.checkNum && (this.num = this.createPoint(this.getMousePos(this.$refs.canvas, e)),
this.checkPosArr = this.pointTransfrom(this.checkPosArr, this.setSize),
setTimeout((function() {
var e = t.secretKey ? d(t.backToken + "---" + JSON.stringify(t.checkPosArr), t.secretKey) : t.backToken + "---" + JSON.stringify(t.checkPosArr);
t.$store.commit("setLoading", !0),
.....
e就是capchaVerification,看看它怎么生成的,t.backToken现成的好搞,t.checkPosArr就是点击点选验证码的坐标数组[{'x':100,'y':100},...].怎么通过验证码的图片得到点选验证码的坐标数组?可以google一下打码平台。然后调用d函数,是一个加密函数,定义如下
function d(e) {
var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "XwKsGlMcdPMEhR1B"
, s = c.a.enc.Utf8.parse(t)
, i = c.a.enc.Utf8.parse(e)
, a = c.a.AES.encrypt(i, s, {
mode: c.a.mode.ECB,
padding: c.a.pad.Pkcs7
});
return a.toString()
}
至此抢票的最关键的三个参数就被我们破解了,只要模拟一下这三个接口,就可以快速锁定场地,然后在10分钟内慢悠悠地付款就可以了
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果