前言:遇到有人问头条的sign 今天简单看了下
一:接口参数
可以看到有个_signature
上面那个time
就是时间戳了 offset
都懂的 控制翻页
通过搜索大法找到_signature
位置
这里var n = u(p.getUri(e), e);
可以发现是这个u
函数生成的 跟进去看看
到这之后可以发现 里面用到了window.byted_acrawler
看看这个东西是什么
它是一个对象 里面有一些函数 最引人注目的不过就是这个sign
了
先分析分析上段js代码的逻辑
它把window.byted_acrawler.sign
这个函数赋值给了a
, 然后通过call
函数调用了a
看看这个参数o
o
是一个对象 {url: xxx}
xxx就是
url
可以发现就是这个_signature
里面应该加入了时间戳 所以不同时间加密出来结果会不一样
跟进这个a
函数里面看看 也就是这个 window.byted_acrawler.sign
里面
会发现跳到了 acrawler.js
这个js文件里面 同时也能看出是jsvmp
的代码
遇到这种 补环境把 最简单
二:环境
扣下代码到本地
window.Object = Object;
window.RegExp = RegExp;
类似于document
navigator
location
等等这些就不用多说了 补上
说实话 它检测的也不多
location
检测了 protocol
和 href
navigator
检测了 ua
document
检测了 cookie
referrer
createElement
createEvent
还有一些 sessionStorage
localStorage
里面还有个window
下面的toStringTag
这个也补上
剩余的就是一些canvas
2d
函数 以及经典的toDataURL
照着它的流程对这浏览器来一遍就行了
还有个关键点就是document.cookie
在代码运行过程中会给cookie
赋值为__ac_referer=; expires=Mon, 20 Sep 2010 00:00:00 UTC; path=/;
这样就会导致 我们加密出来的值很短 比如这样_02B4Z6wo00f01-OC23QAAIDC7jOUixhjjQvjoN.AAJzfe5
我们可以补完环境之后直接冻结document对象Object.freeze(document)
或者你也可以 在调用加密函数之前给document.cookie
重新赋值也是可以的
这些处理完之后 就差不多了
用py试试
完事!