js逆向实战之智通财经网token参数解密

url:https://www.zhitongcaijing.com/immediately.html

分析过程

  1. 抓流量包,主要关注如下这条数据包。
    image
    响应数据如下。
    image
    由于该url中的token参数是经过加密的,所以目的就是找到加密过程。

  2. 关键字搜索immediately/content-list.html,只有两条记录,第一处是个html代码,肯定不是,所以只需要看第二处。
    image
    image
    image

  3. 打断点,刷新界面,触发该断点。
    image
    但通过调用栈发现都是在自我调用,并且此处看不到token关键字,放弃,换另一种思路。

  4. 搜索关键词token,符合的只有四处。
    image
    最下面两处由于url地址都不对可以排除。
    image
    image
    第一处由于是个POST方式,跟我们想要的GET方式传参不一致,也排除。
    image
    只剩下最后一处了,且是GET传参,符合。
    image

  5. 打断点,触发。
    image
    这个url不对,放过去。滚动一下界面,又触发了断点。
    image
    这个url就对了,主要看token是怎么生成的。

  6. "token=".concat(Object(i["tokenCrypto"])(u(u({}, e), n))),主要看Object(i["tokenCrypto"])u(u({}, e), n)是什么。
    u(u({}, e), n)的值如下,相当于是一个字典,里面带有时间戳等属性。
    image
    Object(i["tokenCrypto"])的定义如下。
    image
    image
    打断点,让程序运行到这里。
    image
    看call stack,发现是Object(p["a"])(e(t))中调用了e(t)函数。
    image
    看到传给e函数的参数如下。
    image
    单步向下走,看最后返回的结果是什么。
    image
    image
    从结果中就可以得知e函数就是用&将传进去的参数进行了拼接。
    再看Object(p["a"])的定义。
    image
    image
    看到关键字SHA1了,原来是个sha1算法,加密的数据就是e函数执行完后的数据,所以整个逻辑就非常清楚了。
    image

  7. 编写python代码获取数据。

import time
import hashlib
import requests

timestamp = int(time.time())
# 需要加密的数据
plaintext = "last_update_time={}&platform=web&roll=gt&type=all".format(timestamp)

# sha1加密
sha1_hash = hashlib.sha1()
sha1_hash.update(plaintext.encode("utf-8"))
# print(sha1_hash.hexdigest())    # 0b87a5231b9b13d77b9042ba660bedf90f92a235
token = sha1_hash.hexdigest()[2:]

url = "https://www.zhitongcaijing.com/immediately/content-list.html?type=all&roll=gt&token={}" \
      "&last_update_time={}&platform=web".format(token, timestamp)
resp = requests.get(url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, " \
                                               "like Gecko) Chrome/123.0.0.0 Safari/537.36"})
print(resp.text)

运行,成功获取到数据。
image

posted @ 2024-04-25 10:41  死不悔改奇男子  阅读(83)  评论(0编辑  收藏  举报