文章仅供学习与交流!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!
案例网站:aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc=
发包流程是先up包获取irtoken,再取irtokrn,fp,cb去生成img返回token,再根据token生成data走check接口验证。
up返回的是irtoken,我发现这玩意能定死,就先不搞了
主要是d,n加密,n是32为随机字符串
def get_n():
aaa = ''
original_string = "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx"
for i in list(original_string):
n = int(16 * random.random())
if 'x'==i:
aaa+=toStr(n,16)
else:
aaa+=toStr(3&n,16)
return aaa
d是走cb的加密,跟的我烦死了我直接放弃
接下来是取背景的包,我定死irtoken是可以正常获取的,目前先处理fp,跟cb
fp的入参是这么一串东西,主要变化是u,就3个随机字符串加上时间戳再加3个随机字符串{'v':'v1.1','fp':'41888912424753,29646682124647','u':'diS1751960813540yLx','h':'dun.163.com'}
fp入口需要清空ck,再用油猴hook一下就能定位到
hook代码网上拿的
(function() {
'use strict';
var _fp =window.gdxidpyhxde;
Object.defineProperty(window,'gdxidpyhxde',{
get:function(){
console.log("调用fp",_fp)
debugger;
return _fp;
},
set:function(val){
console.log("生成fp",val)
debugger;
this._value = val;
return val;
}
})
// Your code here...
})();
加密入口在这这套加密跟cb,data的加密一模一样,除了盐不同,这里直接缺啥扣啥,没有一点难度,扣到底值就出来了
大概就是这样
cb的值入参是一个uuid,跟get_fp加密流程一样,把key换一下就行
接下来到check接口,直接在这里断点
这玩意是由轨迹加密生成的 ,在走cb的加密就是d的值
位置在这里,直接无脑扣代码直接就出值
p 是由token,(滑块距离/320)*100字节合起来在走字符串加密,再由cb加密一下
f 是由token,滑块轨迹合起来在走字符串加密,再由cb加密一下
ext 是由token,1+','+traceData数组的位数合起来在走字符串加密,再由cb加密一下
就这样验证的接口就解决了
官网的通过率还是很高的
仅学习用途,如造成不良影响,后果自负