之前写过一期某乎关于请求头96的生成方式
webpack 抠出来之后 确实能生成参数 但没有想到的是 在其webpack代码里面其实有很多检测环境的地方,而且代码里包含了一个try catch
报错了也不会提示,也看不到直接给你返回结果,但这个结果是错的。
就是虽然你能计算出参数 但是这个是检测了环境的 并不能请求成功
之后本人花时间补了下环境
贴上之前文章链接 某乎上一篇文章
在之前文章中所生成的参数 并不能成功访问
如下
请求时会发现 是403 那是因为生成的96参数是错的 (因为检测了很多环境)
接下来就是补环境环节
在某乎上 你会发现每次加密同一个md5值之后出现的结果都不一样
那是因为里面加了随机数或者时间戳变量导致的
这里我们把随机数函数重新定义下
这里我把随机数定义为0.1 就发现 果然加密的结果是一样的了
好了 接下来 就试试在本地生成这个加密参数
老规矩 window=this ; 接着先把 location, document,navigator 这些必定检测的补上
然后在代码后半部分 有一个很大的 try catch
直接注释掉 我们就知道报啥错了 该补啥了 之前没注意到这点。。
注释掉之后 运行看看
这里发现history未定义 ,要补上history
就补吧
History = function(){
this.length = 3
this.scrollRestoration= "auto",
this.state= null
};
history = new History();
继续
screen也要补的
继续
补上了上面一些东西后 运行 会发现 没报错 但是计算出来的结果 不正确 实测带着这个参数去访问也是403 就说明还是检测到了 环境
于是我们挂上代理 看看那些取了属性
发现代码运行到document.toString()的时候就结束 直接返回了参数 那么我们看看本地和浏览器环境的返回值有什么不同
本地:
浏览器:
这里就要修改下原型函数
补上了 之后 可以发现 加密结果变了 但是还是错的参数 继续吧
这里发现 在浏览器环境里
window.name=''
本地为undefined 这个也补上吧
接下来就是navigator.toString()方法了 很明显
这个也要补上
补上之后 会发现结果又变了 但是还是不对
接着是location 继续补
接着是history 继续
然后是screen
screen补完之后 发现代码报错
这就。。。
找到这一行报错的代码 我们输出看看
因为上面是createElement方法之后报错的 那么肯定和这个函数有关
看到了 canvas 和 2d 很明显了 就是
document.createElement('canvas').getContext('2d')了
把这个也补上
好了 接着运行
这里检测了alert 补上吧
getElementById 也补上!
接着是getElementsByClassName
补上
运行
成功了!
接着py试试
没问题!
如有敏感信息 wei规 请联系我删除