js逆向:某瓜_signature、__ac_signature参数分析
## 2020-10-28更新今天抓取西瓜的时候发现需要带cookie才能得到详情页的数据。熟悉的__ac_signature字段,熟悉的配方。应该是跟某条详情页一样。
### 正文开始
首先搜索参数出现的js文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028134806333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
ctrl+f在js文件搜索_signature
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028135017228.png#pic_center)
可以看出_signature就是n,而j就是入口函数。跟进去
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028135257885.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
o是j函数的返回值,所以重点看1904行
改写一下
var o = window.byted_acrawler.sign(i)
我们需要在n.call(a,i)处打个断点跟进去
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028140155176.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
js文件不大,可以全部放进webstorm里。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028141015577.png#pic_center)
简化一下
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028141058194.png#pic_center)
我们知道sign方法是window下的,所以我们打印一下是否有。
当然,此window不是浏览器中的window。node js中的window是global。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028141533647.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
### 补环境
这个属性很熟悉。我们可以在调试的浏览器中找到。
我们一般可以window.document = {}或者
window.document = {referrer: "https://www.ixigua.com/"}
直接使用网站主页
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020102814302029.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
可以看点window.BytedAcrawler下确实有sign方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028143409704.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
调用这个方式,然后接着补userAgent等。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028143943346.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
可能碰到这个属性时都会有点懵逼
使用好哥哥教的插桩大法,其实就是打印值
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028144317546.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
这个可以看的更直观。
从而可以分析出z为protocol时才能有length
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028144812443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
这个太短!男人不能太短!
所以再找找别的原因。。
### 获取长_signature
当我们请求详情页的时候会返回一段代码,里面有一段js,很可疑。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028145330245.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028150804326.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
格式化之后看的更清晰。
可以看出f3函数时设置cookie
var __ac_nonce = _f2("__ac_nonce");
__ac_signature = window.byted_acrawler.sign("", __ac_nonce);
这个就是__ac_signature 的来源。后面再说
改写一下f3函数,然后复制浏览器中的cookie
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028151345774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hteTk0MA==,size_16,color_FFFFFF,t_70#pic_center)
这样就能拿到想要的长_signature。。。
### __ac_signature 获取
__ac_signature = window.byted_acrawler.sign("", __ac_nonce);
我们想要__ac_signature 就需要先拿到__ac_nonce。
我们先请求详情页,会返回__ac_nonce
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028151908892.png#pic_center)
拿到__ac_nonce之后调用window.byted_acrawler.sign("", __ac_nonce)
我们就可以得到__ac_signature 的值了
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028152142865.png#pic_center)
最后想要的数据拿到啦。。。。 本帖最后由 acm79 于 2020-11-9 18:42 编辑
基本按照教程方式处理,node 执行 js 输出 window 对象
<ref *1> Object {
global: ,
clearInterval: ,
clearTimeout: ,
setInterval: ,
setTimeout: {
:
},
queueMicrotask: ,
clearImmediate: ,
setImmediate: {
:
},
navigator: {
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
acceptEncoding: 'gzip, deflate, br',
acceptLanguage: 'zh-CN,zh;q=0.9'
},
document: {
referrer: 'https://www.ixigua.com/',
cookie: '__ac_referer=; expires=Mon, 20 Sep 2010 00:00:00 UTC; path=/;'
},
location: { href: 'https://www.ixigua.com/', protocol: 'https:' },
'_$jsvmprt': ,
__ac_referer: 'https://www.ixigua.com/'
}
不存在byted_acrawler,感觉很困惑,难道几天时间 js 就又修改了么 acm79 发表于 2020-11-9 18:40
基本按照教程方式处理,node 执行 js 输出 window 对象
Object {
global: ,
第二个参数 [, , "undefined" != typeof exports ? exports : void 0, "undefined" != typeof module ? module : void 0]改写成[, ,void 0,void 0]后面的就有了 想要背景图 小白先学习一下 小白学习了 小白 学习一下 大佬, 为什么我这边访问西瓜同样的抓signature,我这边js直接显示的就是 window.byted_acrawler.sign(t) 而不是像你一样的是一个var j = n(a, e)。抠出来相同的js文件我执行了之后window属性里面并没有byted_acrawler呀,求大佬指点迷津 本帖最后由 xmy00000 于 2020-11-2 17:31 编辑
Rezalt 发表于 2020-11-2 16:37
大佬, 为什么我这边访问西瓜同样的抓signature,我这边js直接显示的就是 window.byted_acrawler.sign(t) 而 ...
文中是某条,西瓜也是一样的。
打印window时没有看到BytedAcrawler的话,可能是你没有简化代码。你可以直接执行window.byted_acrawler.sign(t)。看看缺什么环境。如果不行你可以私我,我把代码发你 xmy00000 发表于 2020-11-2 17:19
文中是某条,西瓜也是一样的。
打印window时没有看到BytedAcrawler的话,可能是你没有简化代码。你可 ...
感谢大佬 经过仔细比对发现了自己的问题并顺利解决了 大佬,那个发不了消息了,那个一定要¥这个吗?平时也不怎么用q,也没绑定银行卡啥的{:1_923:} CB可以吗? 聊天发不了,大佬链接在这里https://www.52pojie.cn/thread-1296683-1-1.html