JS逆向:【硬干货】手把手实战某条_signature(上)——参数分析

2,323 阅读3分钟

本文仅供学习交流使用,请勿用于商业用途或不正当行为

如果侵犯到贵公司的隐私或权益,请联系我立即删除

老规矩chrome浏览器F12启动开发者工具,打开某条首页,某条的下拉数据加载是ajax的,所以我们在network面板,直接查看XHR的请求,滚动页面后,能看到具体获取数据的请求,如图

img

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

img

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

快捷键 Ctrl + Shift + F

img

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

img

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

img

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

img

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

img

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

img

我们可以看到_signature是变量o的值,在上面我们看到

o = (0,p.calcSignature)(this.url, this.params);

这里传入了this.url和this.params两个参数,而这两个参数哪里来的呢,我们继续往上能看到有一个this.setParams()方法,

聪明的你根据函数名肯定能猜到this.params这个参数是由this._setParams()方法生成的,下面我们带着疑问继续分析

我们在变量o和this._setParams()这两个位置打上断点。打好断点后,重新刷新页面,代码运行到断点处就会停止

img

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

img

这里我们已经能看到this.url和this.params,同时还能看到as和cp参数

而as和cp是e对象下面的as、cp,所以我们跟进e,能看到e其实是函数a

img

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

img

但是这里有个变量i是怎么来的?

我们看到这里有个o.default,它其实是函数C,我们跟进函数C看看

img

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

img

因为到现在as、cp的代码其实我们已经分析定位到了,剩下的就是把C函数调用的那一连串代码给扣下来就行了

现在还剩下一个_signature参数,我们继续回到变量o的赋值处,这里的p.calcSignature其实是函数p,所以我们跟进p函数

img

img

能看到window.byted_acrawler.sign(a)就是生成_signature参数的值的地方

那byted_acrawler是个什么鬼,我们继续打上断点看看

img

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

img

所以,想要拿到_signature的值,只需要定位出init和sign两个函数就行了。

全局搜索一下window.byted_acrawler,看看能不能找到byted_acrawler相关的东西

img

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

img

那么我们跟进e函数

img

img

这里是混淆过后的代码,猜测应该就是_signature的加密代码。

到这里我们已经定位出了as、cp和_signature参数的代码了,剩下的就是扣出这部分代码,利用代码生成这三个参数值,去验证下是否正确。

今天主要讲解下JS逆向的基本的方法,比较简单,大家有疑问可以后台加我微信。

由于篇幅太长了大家都没耐心看下去(其实是我没耐心写了),所以先写到这里。

下一篇再分享具体扣哪部分代码、代码的验证以及代码的利用方式。