本文仅供学习交流使用,请勿用于商业用途或不正当行为
如果侵犯到贵公司的隐私或权益,请联系我立即删除
老规矩chrome浏览器F12启动开发者工具,打开某条首页,某条的下拉数据加载是ajax的,所以我们在network面板,直接查看XHR的请求,滚动页面后,能看到具体获取数据的请求,如图

请求参数中as、cp、_signature这三个参数的值是随机的,很明显我们今天的任务就是要找到它们

怎么找呢,方法有多种,我们现在使用最常用的其中一种【全局搜索】大法
快捷键 Ctrl + Shift + F

我们直接搜索as参数,但是你会蛋疼地发现有N多个匹配结果,这TM怎么找

一般情况下如果参数是很简短的字符,大概率不太好找,所以我们换一个参数先搜索比较长的_signature

这里有两个文件都包含_signature参数,我们先点开第一个,打开后可以看到代码都被压缩了,这里我们点击格式化代码

格式化之后,可以Ctrl + F 在这个js文件内搜索参数,就能看到匹配的结果了

很幸运,貌似第一个结果就是我们要找的,接下来我们来分析代码,具体看看是不是

我们可以看到_signature是变量o的值,在上面我们看到
o = (0,p.calcSignature)(this.url, this.params);
这里传入了this.url和this.params两个参数,而这两个参数哪里来的呢,我们继续往上能看到有一个this.setParams()方法,
聪明的你根据函数名肯定能猜到this.params这个参数是由this._setParams()方法生成的,下面我们带着疑问继续分析
我们在变量o和this._setParams()这两个位置打上断点。打好断点后,重新刷新页面,代码运行到断点处就会停止

选中this._setParams()函数,可以点击跳转到this._setParams()函数处

这里我们已经能看到this.url和this.params,同时还能看到as和cp参数
而as和cp是e对象下面的as、cp,所以我们跟进e,能看到e其实是函数a

进入a函数之后,很明晰这里就是as、cp参数的生成逻辑

但是这里有个变量i是怎么来的?
我们看到这里有个o.default,它其实是函数C,我们跟进函数C看看

进入C函数之后发现这里是一连串看着就烦的连锁调用,这里就没必要继续一直往下跟了

因为到现在as、cp的代码其实我们已经分析定位到了,剩下的就是把C函数调用的那一连串代码给扣下来就行了
现在还剩下一个_signature参数,我们继续回到变量o的赋值处,这里的p.calcSignature其实是函数p,所以我们跟进p函数


能看到window.byted_acrawler.sign(a)就是生成_signature参数的值的地方
那byted_acrawler是个什么鬼,我们继续打上断点看看

选中byted_acrawler能看到它里面有两个方法init和sign

所以,想要拿到_signature的值,只需要定位出init和sign两个函数就行了。
全局搜索一下window.byted_acrawler,看看能不能找到byted_acrawler相关的东西

在index页面找到了init函数,而sign方法其实是e函数

那么我们跟进e函数


这里是混淆过后的代码,猜测应该就是_signature的加密代码。
到这里我们已经定位出了as、cp和_signature参数的代码了,剩下的就是扣出这部分代码,利用代码生成这三个参数值,去验证下是否正确。
今天主要讲解下JS逆向的基本的方法,比较简单,大家有疑问可以后台加我微信。
由于篇幅太长了大家都没耐心看下去(其实是我没耐心写了),所以先写到这里。
下一篇再分享具体扣哪部分代码、代码的验证以及代码的利用方式。