xianyucoder 发表于 2021-2-24 14:16

某工业超市加密 header 参数分析

本帖最后由 xianyucoder 于 2021-2-24 14:33 编辑

## 今日网站

aHR0cHM6Ly93ZWIuemtoMzYwLmNvbS9saXN0L2MtMjYwMTg2Lmh0bWw/c2hvd1R5cGU9cGljJmNscD0x

这个网站是在某交流群看到的,随手保存下来作为今天的素材



### 抓包分析与加密定位

先看看抓包的结果,可以看到请求的`header`中包含两个未知的参数,分别是`zkhs`和`zkhst`



进一步检索参数`zkhst`和`zkhs`,可以发现这两个参数的值没有做过混淆

并且都有对应的搜索结果





根据搜索结果的提示inde,进一步在文件中检索`zkhst`和`zkhs`

可以在文件中找到下面这几个关键位置



### 加密分析

在逻辑里比较明显的是

```js
e.headers.zkhs = o,e.headers.zkhst = r
```

这行代码预示我们要分析的是`o`和`r`这两个变量

这两个变量的赋值分别可以在上面的 js 逻辑中找到

```js
o = u()("body=".concat(i, "&params=").concat(o, "&sign_token=").concat(r), r)
r = Object(s.f)("zkhst")
```

接下来只要单点调试即可,先来看`o`的生成

`o`的逻辑是将所有的参数拼接,传入`u()`中计算

这里的参数是一个逗号表达式,最后得到的传入参数是`r`

```js
r = ("body=".concat(i, "&params=").concat(o, "&sign_token=").concat(r)
```

这里较为明显的未知参数是`body`以及`sign_token`

可以通过断点分析得到下面的结果,这个结果就是计算后的`r`

```js
body={"brandId":"","catalogueId":"260186","cityCode":350100,"clp":true,"extraFilter":{"inStock":false,"showIndustryFeatured":false},"from":0,"fz":false,"keyword":"","productFilter":{"brandIds":[""],"properties":{}},"rangeFilter":null,"searchType":{"notNeedCorrect":false},"size":20,"sort":0}&params={"traceId":"213681131613962067063"}&sign_token=799c9842f09c490196047064e10dead8
```

网站的开发很贴心了,还在逻辑里加了`console.log`



`body`和`parmas`都是查询参数,`body`中包含了城市信息之类的内容,这个需要根据要爬取的内容修改

除此之外还有`sign_token`未知,这个就是另一个要分析的参数`zkhst `

### zkhst 获取

经过调试得到下面这个结果,在定位的`js`中有一个`switch`控制流

在`918`行,会进行一次判断,如果`r = Object(s.f)("zkhst")`没有获取到值,会进入到` Object(l.i)();`这个逻辑。如果有值会`break`进入`926`行的逻辑。



所以需要先把`Object(s.f)("zkhst")`的值变为`undefinde`,进入`s.f`中,可以看到下面这段逻辑

```js
h = function(t) {
      t = document.cookie.match(new RegExp("(^| )".concat(t, "=([^;]*)(;|$)")));
      return null != t ? decodeURIComponent(t) : null
    }
```

可以得到`zkhst`是从`cookie`中得出的,直接清除`cookie`中的`zkhst`就能进入生成的逻辑

所以清除浏览器缓存/`cookie`

顺利进入`(l.i)()`,可以看到下面这串逻辑



并且在`network`中也的到印证



这个`zkhst`是由页面请求返回得到的。

得到`zkhst`之后只要将 u 的加密分析出来即可,打上断点,单步调试后可以看到,这个 u 是一个sha1 加密


至此两个加密参数均已得到,就可以获取页面的数据了。

好了,今天的文章就到这里了,我们下次再会~

if20200606 发表于 2021-3-15 08:04

游览器能打断点调试吗

gentlespider 发表于 2021-3-15 08:55

链接能发下吗,想试试

metoto 发表于 2021-3-15 17:52

还不太会去js里分析,多学习学习。
话说去js里搜索参数怎么搜啊

xianyucoder 发表于 2021-3-30 19:42

if20200606 发表于 2021-3-15 08:04
游览器能打断点调试吗

可以啊在 source 面板里点击行号

xianyucoder 发表于 2021-3-30 19:43

metoto 发表于 2021-3-15 17:52
还不太会去js里分析,多学习学习。
话说去js里搜索参数怎么搜啊

调出 search 就可以搜索了 ,一般是搜索参数名

xianyucoder 发表于 2021-3-30 19:44

gentlespider 发表于 2021-3-15 08:55
链接能发下吗,想试试

开头的密文用 base64 解码

if20200606 发表于 2021-3-31 11:33

xianyucoder 发表于 2021-3-30 19:42
可以啊在 source 面板里点击行号

我看到了断点,但是上一步,下一步是灰色的不能点击,你也是这样吗
页: [1]
查看完整版本: 某工业超市加密 header 参数分析