作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!
目标网站:官网
1.流程分析
主要就是这两个地址,第一个是获取背景图片和滑块图片的地址,第二个就是验证轨迹的地址
2.分析
首先第一个地址:
跟栈:
断住之后很明显可以看到url已经生成所以继续往前跟
跟到这里之后可以看到部分参数生成的地方,这里我们只关心cb,因为我们在请求的时候只把cb替换,其他固定即可
进入cb这个函数,我的方法是把全部代码拿下来然后把这个函数赋值给window上,然后环境简单补一下即可,然后这样运行就可以拿到
console.log(window.bb());
接下来第二个地址
{
"referer": "",
"zoneId": "",
"dt": "",
"id": "",
"token": token,
"data": parsed_data,
"width": 320,
"type": 2,
"version": "2.28.5",
"cb": "",
"user": "",
"extraData": "",
"bf": 0,
"runEnv": 10,
"sdkVersion": "",
"loadVersion": "2.5.3",
"iv": 4,
"callback": ""
}
对于参数我们只关心,token, parsed_data
token:是请求图片的地址返回的
parsed_data跟栈
'onMouseMoving': function() {
var _0x1c1072 = this['restrict'](this['$slider']);
this['$slider']['style']['left'] = _0x1c1072 + 'px';
var _0x2aef35 = this[a0_0x3f0a(0x2c5)]['offsetWidth']
, _0x49e261 = this[a0_0x3f0a(0x2bf)]['offsetWidth']
, _0x1290e8 = this['restrict'](this['$jigsaw'], _0x2aef35 - _0x49e261);
this['attrs'] ? this['updateJigsawRotateAndLeft']() : this[a0_0x3f0a(0x2bf)]['style']['left'] = _0x1290e8 + 'px',
_0xf0500b[a0_0x3f0a(0x6b)](this[a0_0x3f0a(0x2d2)], 'yidun_control--moving'),
this['$slideIndicator'][a0_0x3f0a(0x1b1)]['width'] = _0x1c1072 + _0x2aef35 + 'px',
this[a0_0x3f0a(0x2d3)](this['controlBar']['slideIconMoving']);
},
'onMouseMove': function(_0x42cc2c) {
var _0x16631f = _0x42cc2c[a0_0x3f0a(0x2d)]
, _0x183a6b = _0x42cc2c['clientY']
, _0x5e1960 = this[a0_0x3f0a(0x297)]
, _0x5841d6 = _0x5e1960['status']
, _0x4c9a7b = _0x5e1960[a0_0x3f0a(0x268)]
, _0x31d271 = _0x5e1960['startX'];
if (_0x5e1960['status'] = _0x4c9a7b && _0x16631f - _0x31d271 > 0x3 && 'dragend' === _0x5841d6 ? 'dragstart' : _0x5841d6,
a0_0x3f0a(0x298) !== _0x5e1960['status']) {
!(_0x42cc2c[a0_0x3f0a(0x2b)]['indexOf']('touch') !== -0x1 && _0xf0500b[a0_0x3f0a(0x55)] || _0x42cc2c[a0_0x3f0a(0x28)][a0_0x3f0a(0x295)] !== !0x1) && _0x42cc2c['preventDefault'](),
Object[a0_0x3f0a(0x78)](_0x5e1960, {
'clientX': _0x16631f,
'clientY': _0x183a6b,
'dragX': _0x16631f - _0x5e1960[a0_0x3f0a(0x2a2)]
});
var _0x57ee7a = this[a0_0x3f0a(0x19a)]['state'][a0_0x3f0a(0x19c)]
, _0x3a2d3a = [Math['round'](_0x5e1960['dragX'] < 0x0 ? 0x0 : _0x5e1960['dragX']), Math[a0_0x3f0a(0x29c)](_0x5e1960['clientY'] - _0x5e1960[a0_0x3f0a(0x29a)]), _0x13a834[a0_0x3f0a(0x264)]() - _0x5e1960[a0_0x3f0a(0x268)], null == _0x42cc2c[a0_0x3f0a(0x29d)] ? 0x0 : _0x42cc2c['isTrusted'] ? 0x1 : 0x2];
this[a0_0x3f0a(0x2d1)][a0_0x3f0a(0x5)](_0x3a2d3a);
var _0x332561 = _0x4a51e7(_0x57ee7a, _0x3a2d3a + '');
this['traceData'][a0_0x3f0a(0x5)](_0x332561),
a0_0x3f0a(0x29e) === _0x5e1960['status'] && this['onMouseMoveStart'](_0x42cc2c),
'dragging' === _0x5e1960[a0_0x3f0a(0x11b)] && this[a0_0x3f0a(0x29f)](_0x42cc2c);
}
},
'onMouseUp': function(_0x9b6bb0) {
var _0x5155c7 = this['drag']
, _0x19b5fc = {};
_0x19b5fc[a0_0x3f0a(0x268)] = 0x0;
if (a0_0x3f0a(0x298) === _0x5155c7[a0_0x3f0a(0x11b)])
return void Object['assign'](_0x5155c7, _0x19b5fc);
Object['assign'](_0x5155c7, this[a0_0x3f0a(0x2c0)]);
var _0x287252 = _0x13a834[a0_0x3f0a(0x2a0)](this[a0_0x3f0a(0x26b)], _0x51eee4)
, _0xf9d2a0 = this[a0_0x3f0a(0x19a)]['state']['token']
, _0x1c44f9 = _0x4ad40a(_0x4a51e7(_0xf9d2a0, parseInt(this['$jigsaw'][a0_0x3f0a(0x1b1)]['left'], 0xa) / this['width'] * 0x64 + ''))
, _0x10cba3 = _0xf0adff(_0x13a834[a0_0x3f0a(0x2d4)](this['atomTraceData'], 0x2));
this[a0_0x3f0a(0x2d5)]({
'data': JSON[a0_0x3f0a(0x133)]({
'd': _0x4ad40a(_0x287252[a0_0x3f0a(0x1e)](':')),
'm': '',
'p': _0x1c44f9,
'f': _0x4ad40a(_0x4a51e7(_0xf9d2a0, _0x10cba3['join'](','))),
'ext': _0x4ad40a(_0x4a51e7(_0xf9d2a0, this['mouseDownCounts'] + ',' + this['traceData'][a0_0x3f0a(0x15)]))
})
});
},
/*
分析:
'd': _0x4ad40a(_0x287252[a0_0x3f0a(0x1e)](':'))-->_0x4ad40a(_0x287252["join"](':'))这里看一看出来是对_0x287252进行拼接,那么我们需要找到_0x287252是什么,上方_0x287252 = _0x13a834[a0_0x3f0a(0x2a0)](this[a0_0x3f0a(0x26b)], _0x51eee4), 可以看到是由this[a0_0x3f0a(0x26b)]生成的,而this[a0_0x3f0a(0x26b)]生成的地方在onMouseMove函数里面,是由轨迹生成的
主要代码:var _0x57ee7a = this[a0_0x3f0a(0x19a)]['state'][a0_0x3f0a(0x19c)]
, _0x3a2d3a = [Math['round'](_0x5e1960['dragX'] < 0x0 ? 0x0 : _0x5e1960['dragX']), Math[a0_0x3f0a(0x29c)](_0x5e1960['clientY'] - _0x5e1960[a0_0x3f0a(0x29a)]), _0x13a834[a0_0x3f0a(0x264)]() - _0x5e1960[a0_0x3f0a(0x268)], null == _0x42cc2c[a0_0x3f0a(0x29d)] ? 0x0 : _0x42cc2c['isTrusted'] ? 0x1 : 0x2];
this[a0_0x3f0a(0x2d1)][a0_0x3f0a(0x5)](_0x3a2d3a);
var _0x332561 = _0x4a51e7(_0x57ee7a, _0x3a2d3a + '');
this['traceData'][a0_0x3f0a(0x5)](_0x332561),
逐行分析:第一行_0x57ee7a 就是token
第二行_0x3a2d3a 轨迹
第三行将获取到的每一个轨迹push操作
第四行通过方法生成字符串
第五行也是将生成的字符串push
这里我们可以将模拟的轨迹循环执行生成随机字符串的方法,最后放到列表里面
最后生成d的方法扣或者导出应该都可以
'm': '',
'p': _0x1c44f9 = _0x4ad40a(_0x4a51e7(_0xf9d2a0, parseInt(this['$jigsaw'][a0_0x3f0a(0x1b1)]['left'], 0xa) / this['width'] * 0x64 + '')),主要是通过这个值来生成的,就数值来看好像和轨迹最后一个差了10,他的生成位置在onMouseMoving里面this[a0_0x3f0a(0x2bf)]['style']['left'] = _0x1290e8 + 'px',有兴趣的可以追进去看看,把方法执行一下就行了
'f': _0x4ad40a(_0x4a51e7(_0xf9d2a0, _0x10cba3['join'](','))),第一个参数是token, 第二个就是轨迹拼接但是轨迹在上面这里处理了一下0x10cba3 = _0xf0adff(_0x13a834[a0_0x3f0a(0x2d4)](this['atomTraceData'], 0x2));_0x13a834 = _0x3fdfe3(0x3)是个webpack包,最外面的函数在执行一下就好了,最后把参数带进去f就出来了
'ext': _0x4ad40a(_0x4a51e7(_0xf9d2a0, this['mouseDownCounts'] + ',' + this['traceData'][a0_0x3f0a(0x15)]))第一个参数token, 第二个固定1, 最后一个轨迹长度
*/
data到这里就分析完毕,有兴趣的小伙伴快去试试吧
此文章仅供学习参考,有疑问,建议或者纠正的欢迎大家交流!!!