某麦网apk抢票接口加密参数分析(一)
当下的一些火爆活动,如音乐节、演唱会等需要购买门票的活动,常常会引发一些网络抢票软件的出现。
而某麦网也不例外,很多人使用抢票软件来抢购某些活动的门票。
为了防止这种情况的出现,某麦网增加了接口加密参数,让抢票软件无法直接调用网站接口,从而保证正常用户的购票权益。
那么下面我将介绍某麦网apk抢票接口加密参数的分析过程,希望对大家有所帮助。
app界面如下:
一、抓包分析
首先我们对该app进行抓包,发现普通的抓包方式根本抓不到包,于是另辟奇径。
因为某麦网也是阿里旗下的产品,于是我转念一想,有没有可能和某宝某鱼一样走的是自己的协议,于是我首先反编译了app。
发现确实是存在SwitchConfig这个类的,于是我使用frida hook了它的返回值为false
奇迹发生了,果然和我猜想的一样,可以正常抓包了(我使用的工具是fiddler)
既然能够抓包了 那么下面分析起来就简单多了
二、订单生成接口加密参数分析
下面我们来具体分析订单生成接口的加密参数
首先我们抓个包,发现订单生成的api为mtop.trade.order.build
有以下几个加密参数比较可疑:
x-sign、x-sgext、x-mini-wua
于是我就在反编译后全局搜索x-sign
找到了几个可疑的地方,如下
于是用frida进行调试,一步步追堆栈,发现真正的加密位置在InnerSignImpl这个类中的getUnifiedSign方法
下面附上具体的frida hook代码
InnerSignImpl.getUnifiedSign.implementation = function (a, b, c, d, e) {
console.log("===================================================================")
console.log(a)
console.log(b)
console.log(c)
console.log(d)
console.log(e)
var result = this.getUnifiedSign(a, b, c, d, e)
console.log(result)
showStacks()
console.log("===================================================================")
return result
}
然后将这段js代码注入到我们的app内,发现输出的参数正好就是我们抓包时看到的那几个加密参数
那这就简单了,我们只需要主动调用这个函数,将具体的参数传进去不就能模拟生成订单了吗
因为这边是主要为了分析,所以就不考虑还原算法,那么现在的当务之急就是找到getUnifiedSign这五个参数的生成逻辑了
分析发现前两个参数是hashmap,后面三个分别是string、string、boolean,因此重点就是如何构建前两个hashmap
具体的构造过程就不发出来了,难度不大,然后我们将这自己构造的五个参数传入getUnifiedSign函数,并且主动调用,
发现确实传回来了请求头中的几个加密参数