q6378561 发表于 2022-5-21 20:52

某画师的登陆协议分析

本帖最后由 q6378561 于 2022-5-21 20:55 编辑

# 前言

由于某画师的登录接口有加密 故此分析
网址: aHR0cHM6Ly9taWh1YXNoaS5jb20=
# 尝试
登录的api:/api/v1/authorization_tokens/
cookie:
![](https://i.imgur.com/Mfz2isN.png)

表单数据:
![](https://i.imgur.com/l11ClGr.png)

# 目标
> 可以看到`phone`和`password`都为明文, 但接口的cookie和表单的`sensor_id`数据进行了加密
> 下面进行分析

# 分析
## 表单分析

1.首先ctrl+shift+f全局搜索`sensor_id`字符串
![](https://i.imgur.com/OFcNeEp.png)

搜索不到,说明字符串被加密了,只能另寻出路
来到api的Initiator地方追踪调用
![](https://i.imgur.com/cbfTaK0.png)
通过一系列翻阅在从上往上数第10个调用发现异常
![](https://i.imgur.com/vegoZR4.png)
我们需要的是`sensor_id`但这里有个
`sensorId: sensors.store.getDistinctId()`
很有可能就是同一个东西,下个断点看看
![](https://i.imgur.com/82Y1RrU.png)
通过发包后看看:
![](https://i.imgur.com/e9l1kzW.png)
可以看到是相同的,说明是从这个函数生成的
通过全局搜索
![](https://i.imgur.com/TzMtL4w.png)
然后再通过全局搜索找到关键函数
![](https://i.imgur.com/q3qFFn2.png)
可以得出`UUID()`就是生成最初的`sensor_id`参数
搜索可得uuid的生成函数

```ts
                _.UUID = function() {
                  var t = function() {
                        for (var t = 1 * new Date, e = 0; t == 1 * new Date; )
                            e++;
                        return t.toString(16) + e.toString(16)
                  }
                      , e = function() {
                        return Math.random().toString(16).replace(".", "")
                  }
                      , n = function(t) {
                        function e(t, e) {
                            var n, r = 0;
                            for (n = 0; n < e.length; n++)
                              r |= o << 8 * n;
                            return t ^ r
                        }
                        var n, r, i = navigator.userAgent, o = [], a = 0;
                        for (n = 0; n < i.length; n++)
                            r = i.charCodeAt(n),
                            o.unshift(255 & r),
                            o.length >= 4 && (a = e(a, o),
                            o = []);
                        return o.length > 0 && (a = e(a, o)),
                        a.toString(16)
                  };
                  return function() {
                        var r = String(screen.height * screen.width);
                        r = r && /\d{5,}/.test(r) ? r.toString(16) : String(31242 * Math.random()).replace(".", "").slice(0, 8);
                        var i = t() + "-" + e() + "-" + n() + "-" + r + "-" + t();
                        return i ? (just_test_distinctid_2 = 1,
                        i) : (just_test_distinctid_2 = 2,
                        (String(Math.random()) + String(Math.random()) + String(Math.random())).slice(2, 15))
                  }
                }

```

可以看到`uuid`的生成函数也十分简单 参数也十分固定 我们可以通过JS调用或者自写代码实现函数功能,为了节约时间这里直接采用JS调用的方式
有三个参数我们可以采用写死的方式来直接进行调用
`var r = String(screen.height * screen.width);`
`var n, r, i = navigator.userAgent, o = [], a = 0;`
改写为
`var n, r, i = "\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36\"", o = [], a = 0;`
`var r = String(864*1536);`
在本地调用看看
![](https://i.imgur.com/KlWfscQ.png)
可以看到是没有任何问题的
这样表单的分析就完成了

## cookie分析

可以看到有四个cookie
分别是
`aliyungf_tc`
`__asc`
`__auc`
`sensorsdata2015jssdkcross`
### aliyungf_tc
第一个`aliyungf_tc`通过调试发现访问网页后网页会自动返回给你这个cookie,保存即可

### asc和auc
全局搜索`__asc`发现如下关键函数
![](https://i.imgur.com/ZMvM6V7.png)
简单往上追踪就能得到
![](https://i.imgur.com/k85kUTr.png)
由于asc和auc的参数相同所以调用同一个即可


### sensorsdata2015jssdkcross
可以发现`sensorsdata2015jssdkcross`这个cookie里面包含了`sensor_id`的参数
说明我们也可以通过cookie角度来获取`sensor_id`这个参数生成
全局搜索`sensorsdata2015jssdkcross`可以获取相关的生成信息,这里不做过多的详细说明


# 结束
这样某米的登录分析就这样大致结束了 后面只要添加cookie添加表单数据模拟post访问登录即可
![](https://i.imgur.com/mc51Mmw.png)
至此登录分析就告一段落了

小飞虫 发表于 2022-5-23 12:59

感谢分享,图是不是挂了

wqs0987 发表于 2022-5-23 13:08

学下强身
页: [1]
查看完整版本: 某画师的登陆协议分析