【码上爬】 题九:webpack调试 堆栈分析

暗号:aHR0cHM6Ly9tYXNoYW5ncGEuY29tL3Byb2JsZW0tZGV0YWlsLzkv

题目:

先分析数据接口,可以看到m和tt是加密的:

然后在发起程序的最上面的堆栈下一个断点,断点断住后调整堆栈,并且观察作用域,查找加密值的生成位置:

所有堆栈都看完了,但是还是没有找到,最后检查这里的堆栈,发现给m和tt赋值了:

断点后m的值就在这里生成:

其实就是使用c函数对一个包含时间戳的字符串进行加密:

但是仔细检查c里面的代码,会发现加密值是在这里生成:

还原后,它就是一个sha1加密:

最后安装crypto-js (使用npm install crypto-js) ,加密的代码仅需要3行:

当然也可以直接生成python代码, tt的生成更简单,就是将时间戳进行base64加密,也可以直接使用python生成,最后就能够正确获取到数据了:

附上完整python代码(headers和cookie 已经删除):

复制代码
import hmac

import hashlib

import time

import requests

import json

import base64

def base64_encode(text: str) -> str:

    """

    字符串 Base64 加密

    和 JavaScript: CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text)) 结果一致

    """

    # 转 utf-8 字节 → base64 编码 → 转回字符串

    bytes_data = text.encode("utf-8")

    base64_bytes = base64.b64encode(bytes_data)

    return base64_bytes.decode("utf-8")

def get_signature():

    # 获取当前时间戳(毫秒级,和 JS new Date().getTime() 完全一致)

    sjc = int(time.time() * 1000)



    # 拼接字符串:9527 + 时间戳

    data = f"9527{sjc}"



    # 密钥

    key = "xxxooo"



    # HmacSHA1 加密(和 crypto-js HmacSHA1 结果完全相同)

    hmac_result = hmac.new(

        key.encode('utf-8'),

        data.encode('utf-8'),

        hashlib.sha1

    )



    # 转成 16 进制小写字符串(crypto-js 默认输出格式)

    a = hmac_result.hexdigest()



    # 返回最终结果 + 时间戳(方便你对接接口)

    return a, sjc

sign, timestamp = get_signature()

headers = {}

cookies = {}

url = "https://mashangpa.com/api/problem-detail/9/data/"

data = {

    "page": 2,

    "m": sign,

    "tt":base64_encode(str(timestamp))

}

data = json.dumps(data, separators=(',', ':'))

response = requests.post(url, headers=headers, cookies=cookies, data=data).json()

print(response)
相关推荐
星栈1 小时前
Rust 全栈项目里,我写了一个不再重复造轮子的泛型表格组件
前端·前端框架·开源
zoomdong1 小时前
@utoo/pack: 基于 Turbopack 的下一代 Rust 构建工具
webpack·rust·开源
xiaoxue..2 小时前
Node.js 笔试题讲解
后端·面试·node.js
Maimai108082 小时前
React 多步骤表单工程化落地:从 Zod Schema、React Hook Form 到 Zustand 持久化
前端·javascript·react.js·前端框架·状态模式
程序员码歌2 小时前
我是怎么部署开源 AI 编程助手 OpenCode,并在两个真实场景使用起来的
前端·人工智能·后端
Maimai108082 小时前
React Query + Zustand 正确结合方式:不要把接口数据复制进 Store
前端·javascript·react.js·前端框架·web3·状态模式
天才熊猫君2 小时前
层叠上下文 z-index 的简单理解
前端
i220818 Faiz Ul2 小时前
智慧养老平台|基于SprinBoot+vue的智慧养老平台系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧养老平台
AI砖家2 小时前
每日一个skill:web-artifacts-builder,构建复杂 Claude.ai HTML Artifact 的生产力工具包
java·前端·人工智能·python