jsvmp 特点
jsvmp 有一个最大的特点,就是有一长串字符串._$jsvmprt(...)
,算法代码的具体细节
都在 这个一节长字符串里
,所有在算法的扣取上就很不友好,本案例采取补环境
的方式实现。
(glb = "undefined" == typeof window ? global : window)._$jsvmprt(.....)
逻辑分析
定位加密入口
添加
XHR
断点,然后向下滑动,断点短住
搜索
_signature
,在关键位置下断点,然后在刷新页面
断点位置
r
变量,来自于S(n,e)
函数计算,该S
函数就是入口函数
分析加密得值逻辑
进入
S
函数,分析这一段逻辑,其实调用的就是
// o 是 {'url':'xxxx'} window.byted_acrawler.sign(o)
进入
window.byted_acrawler.sign
函数,来到acrawler.js
文件,也就是jsvmp
的 Js 文件
补环境
把
acrawler.js
文件全部复制下来,代码起始有一句(var glb; glb = "undefined" == typeof window ? global : window)
,这是检查当前是什么环境的,是node
还是浏览器
有两种处理办法
- 使用 jsdom 补充 window
- 使用
window = global
当然还有其他更好的方式
,这里采用第二次
这样就和浏览器一样了
加上一个输出,
尝试
使用node
,浏览器
执行,查看两者的区别
浏览器正常得值
,node 报错,说明 node 缺少一些条件
在浏览器添加 条件断点,查看
referrer
是什么
// referrer 来自于 document,继续 添加环境 document = { referrer: '' }
node 继续执行,发现没有
sign
,说明 node 还被检查着
经过分析,发现这些代码,
exports
、module
,这是 node 才存在的东西,直接改成undefined
当然也有更好的方式直接过滤
这些特征
// node true 浏览器 false "undefined" != typeof exports // node true 浏览器 false "undefined" != typeof module
继续执行,缺少 href ,就根据浏览器的
插装 输出 补充
就好了
然后是 缺少 ‘protocol’
location = { href:'', protocol:'https:' }
然后是 缺少
userAgent
navigator = { userAgent:'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' }
再次执行,出现结果
因为校验的不严格,所以这个
短Cookie
也是可以过的,长 Cookie 需要添加一些 Cookie 才行
长 Cookie 需要加上其他的Cookie,这个 cookie 位置需要靠后,不然会被清空
如果是自己写的环境框架
,就不需要担心 cookie 的位置
为了稳定,请求头部还需要带一个
随机 Cookie
完整结构
版权声明:《 【Js逆向】某头条 jsvmp '_signature' 值 》为明妃原创文章,转载请注明出处!
最后编辑:2022-3-29 09:03:36