时间戳 加密要精确到_JS 逆向|某财经资讯 sign 签名加密分析

目标网址:

aHR0cHM6Ly93d3cuY2xzLmNuL3RlbGVncmFwaA==

先打开网站,抓包发现返回数据为标准的 json 格式,甚好,乍一看很好抓取,写一个循环翻页即可,实际操作中却无法获取翻页数据,仔细查看参数,一个熟悉的字段出现了:sign,根据以往经验,sign 的值要做到每次请求都不同,大概率和时间戳有关,看来要抓数据首先得弄清楚 sign 是怎么生成的了,带着疑问我们往下看。122c40aaa2f1e8a3b8b5c42bfb7c3e6c.png请求参数中确实有时间戳,按照 js 逆向的老套路先搜搜看:

51edb3bc89978bb3e7f8b168869ac551.png

有很多文件中都有 sign,挨个打开查看,在有 sign 的地方打上断点,终于在这里找到了 sign 加密的地方。7481aea62593a32e2e5d6f1ba5e83b71.png

主要的加密逻辑在这里:

 sign: g(l({}, r))

接下来看看这些方法是怎么实现的,按 F11 进入函数内部:997fd31717a03cee8513dcd18097f58d.png这里的 1-5 步骤最终实现的是把参数排序并按&拼接4bc42c19c912ff8a5585f0e1fe0664ad.png拼接好的结果当作参数传入下面这个函数:

 i.sync(t)

到这里似乎还没涉及到加密的过程,别慌,F11 接着往下走:3679f7cdbeffc01bba69289421bdde63.png这里出现了 digestsha-1,r.digist(e)执行结束后:88bccf2f0a92f4786a590a573b0ebeca.pngf34e30d91c0861ed9995e0bf02b3ec87.png到这里大胆猜测他是 sha-1 加密来验证,在该网站众多请求中,有一个请求的参数是固定的,暂且拿它来做验证,它的参数为:

{
    "app": "CailianpressWeb",
    "os": "web",
    "rever": 1,
    "sv": "7.2.2",
    "type": "industry",
    "way": "change",
    "sign": "74710c1f5c0d69fa53b231a3a1bba607"
  }

排序拼接后:app=CailianpressWeb&os=web&rever=1&sv=7.2.2&type=industry&way=change

在线加密测试:08a72acb326c5d00394f64d238ab5e8c.png

sha-1 加密结果为:

 f269128310e062d5952d641528ddae3138230466

这最后一步是把上面加密的结果传入 a(t) 这个函数:e299840d45806c2fdad418af8dae8e7e.png

F11 进入函数内部去看看f0124b9936aae380defcb8ce30bd9f81.png看到这里的 t.bytesToHex(r) 中的 to hex ,极大概率是 md5 加密:88f86f4fbf535ef4d3df5beb5d1325e3.png

md5 加密结果为:

 74710c1f5c0d69fa53b231a3a1bba607

调试输出结果:

  • 返回值:bc6d9731cf575057d3ce57cf0c08f0d9.png

  • Console 打印5767c1a4679f45753e39ed1d6a6e61bb.png

分析到这一步,加密过程已经很清楚了:

  • 参数排序、拼接
  • 拼接后的结果先进行 sha-1 加密
  • sha-1 加密结果进行 md5 加密

其他请求也是一样的,不过就是加入时间戳而已。

Python 实现参数拼接、排序

def params_join(params):
    temps = [str(key) + '=' + str(value) for  key, value in params.items()]
    temps = '&'.join(temps)

    temp_split = temps.split("&")
    temp_sort = sorted(temp_split)
    result = '&'.join(temp_sort)
    return result


if __name__ == '__main__':
    param = {
        "app": "CailianpressWeb",
        "os": "web",
        "rever": 1,
        "sv": "7.2.2",
        "type": "industry",
        "way": "change",
    }
    params_join(param)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值