目录
2.1 分析接口,抓包----挑战1:破解gettoken接口
1.写在前面
因秀动接口更新之后,后台频繁收到私信,于是趁有空的时候逆向了秀动抢票接口,发现改动还是挺大的,于是就在闲暇时间进行了“二度”逆向秀动。
声明: 本人一直提倡开源,绝不以牟利为目的,也绝不会参与商务合作。
不管你是小白还是大神,我希望大家都能热爱技术,一起学习逆向,互相进步,希望本文对你有所帮助和启发。
(python版已在上个月就已完成,最近有时间把博客完善下,后期会用GO重构!GO语言yyds!)
2.逆向之旅开始
2.1 分析接口,抓包----挑战1:破解gettoken接口
本次就拿下图所示的案例进行分析
我们可以看到,在之前我写过的一期中抢票接口无非就是三大请求,然而本次抓包却发现多了一个gettoken 这个接口,看来秀动程序员看到一期分析后汗流浃背了,但是不怕,我们依然有解决办法。
进入分析,我们可以看到该请求返回给我们的参数有两个:1.accesstoken 2.id_token
请求的参数有1.sign 2.st_flpv
我就不卖关子,我直接告诉你们这两个请求参数是什么吧:
重点1: sign是我们的登录信息,那么st_flpv怎么生成的呢?好戏刚刚开始。
开始搜索加密位置(保姆级教程)
找到了其加密位置,我们把加密位置扣下来吧!(代码的意思已注释,方便小白)
var v = p.default.uuid(32) + (new Date).getTime();//该代码的意思是生成32位的uuid数值加上当前时间戳
n.header["CRTRACEID"] = v; //这里是关键,他竟然把这个参数加到headers中了
从以上我们得到如下信息:我们的st_flpv参数的来源,以及其会放进请求头。(提示:这里的st_flpv加密和一起的ranstr加密一致!!!!!没反应过来的肯定是没认真看我上期!!!!)
好,那么我们知道了其请求的data和一些必要参数那么开始写请求啦!
首先生成st_flpv,(我已经封装了js了,不要感到奇怪)
加入请求头
、
还差个sign,来我教你怎么快速获取sign(通过登录接口太浪费时间啦!直接看缓存)
好的,万事具备,只差请求!(省去了一些加密,因平台限制!!!)
看看返回的结果:
好了,到这里变化最大的gettoken接口已经成功拿下!相信大家最难的就是这个接口了。希望对你有所启发!
2.2 分析接口,抓包----挑战2:破解confirm接口
查看请求包:
请求的参数有:
sequence: "216989" #你所购买的票种id
sign: "634c30c1a06de59a9f721b31dfca63b4" #你的登录信息
st_flpv: "i0ns87j1o6vlehbf7oA8" #加密生成的参数,前面有介绍
ticketId: "deffd6f3ee56440b2a0aad11a62e8ac9" #你所购买的票种ticketID
ticketNum: "1" #票数
trackPath: ""
以上参数发送加密之后即可发送请求包
让我们看看最后的请求响应结果:
成功获取!!距离成功一大半了。
2.2 分析接口,抓包----挑战2:破解order,getorderresult接口
看到请求参数,vocal,这么玩是吧?
看来我们只能打断点加密
直接看加密位置encrypt
这一看就太熟悉了,就是我们在一期写的加密方式---经典AES,我把加密代码js帮你扣下来吧:
function AES_Encrypt(word,key) {
var a = CryptoJS.enc.Base64
var srcs = CryptoJS.enc.Utf8.parse(word);
var new_key = CryptoJS.enc.Utf8.parse(key);
var encrypted = CryptoJS.AES.encrypt(srcs, new_key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return a.stringify(encrypted.ciphertext)
}
好了,加密给你们了,下一步应该知道怎么操作了吧!直接发起请求:
看看效果:
3.声明
1.本文在上个月写了一半,今天有时间把剩下的写完,之前答应一些粉丝说上个星期出,因上个星期实在没空,实在抱歉。
2.本文所涉及的代码并非源码,仅提供思路,若在自己操作实践中出现任何问题,可和我联系。
如果本篇文章对你有帮助,请给小编点个赞,编辑不易。后续会更新某岛,某麦网等逆向工程。你的支持是我更新的动力。希望大家能够学习到技术,多实践,互相学习,共同进步!