暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

JS 逆向|某主播数据平台

零点小思随笔 2021-06-24
1018

目标网址:

aHR0cHM6Ly91Y3AuaHJkanl1bi5jb206NjAzNTkvYXBpL2R5

复制

首先打开 F12 看看请求信息

接下来搜索 sign 参数有 2 个 js 文件中多次出现,不太好定位加密位置,再看看 token:同样也出现在 2 个文件中,其实挨个文件的查看也能找到加密参数位置,不过就是稍微麻烦些,这里还有一种方法,就是搜索固定值的参数,比如这里的tenant这样就比较准确定位加密参数位置。

既然找到参数加密位置,打上断点,刷新验证猜想,果然,刷新后停在断点上

通过调试信息,我们看到:

  • t 是一个当前 13 位的时间戳
  • token 由 s["a"].globalData.token 得到
  • sign 由 A(e, t)

token 这个值经过多次搜索,没有找到相关函数,而且一直没有变化,估计是和账号+浏览器有关,当作固定值处理就好。

现在只剩下一个 sign 了,接下来单步调式进入 A(e, t) 这个函数

 function A(e, t) {
            return x("param=" + JSON.stringify(e) + "&timestamp=" + t + "&tenant=1&salt=" + M)
        }

复制

M 参数的生成函数

 M = z();
function z() {
    for (var e = Object(c["a"])().concat(Object(w["a"])(), g(), Object(k["a"])(), Object(y["a"])(), Object(b["b"])()), t = "", n = 0; n < e.length; n++)
        t += String.fromCharCode(parseInt(e[n], 16));
    return t
}

复制

A(e, t)返回的是一个 x() 函数的返回值,调式进入 x()函数调式到这里就全明白了,传入一个参数 n,进行 sha256 加密并返回。参数 n 的组成为:

"param=" + JSON.stringify(e) + "&timestamp=" + t + "&tenant=1&salt=" + M

"param={"no":"dy8002","data":{}}&timestamp=1604031369486&tenant=1&salt=kbn%&)@<?FGkfs8sdf4Vg1*+;`kf5ndl$"

复制

最后用 python 来验证结果:

import hashlib

sha256 = hashlib.sha256()

sha256.update(
    'param={"no":"dy8002","data":{}}&timestamp=1604031369486&tenant=1&salt=kbn%&)@<?FGkfs8sdf4Vg1*+;`kf5ndl$'.encode(
        'utf-8'))
print(sha256.hexdigest())

复制

结果为:

13f05f00629bb9be92208810d3a076dd4093845dd4a8af1beee42103375c5c3a

复制

整个加密程序运行完的结果:

调试结束后查看 sign 值,和 Python 生成的一致,大功告成!


文章转载自零点小思随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论