【码上爬】 题九: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)
相关推荐
禅思院11 分钟前
AI对话前端从入门到崩溃:一个长对话引发的五层优化战争【引子】
前端·面试·架构
TrisighT39 分钟前
Electron 鸿蒙 PC 上点外链唤醒应用,我试了 6 种写法只有 1 种能跑
前端·electron·harmonyos
天才熊猫君2 小时前
配置与数据分离:一种可视化搭建的属性编辑方案
前端·javascript
林希_Rachel_傻希希2 小时前
web性能之相关路径——AI总结
前端·javascript·面试
竹林8182 小时前
用 wagmi v2 踩坑两天,我终于搞懂了多链钱包切换在 DeFi 前端中的正确姿势
前端·javascript
用户2136610035722 小时前
Vue项目搜索功能与面包屑导航
前端·javascript
星栈2 小时前
LiveView 的实时通信,爽是爽,但 PubSub 和广播也最容易把自己绕晕
前端·前端框架·elixir
用户2930750976692 小时前
告别关键词匹配,拥抱向量语义 —— RAG 搜索从零到一
前端
独孤留白2 小时前
从C到Rust:告别 C 的"指针 + 长度"手动模式
前端·rust
掘金安东尼3 小时前
中小厂前端候选人简历面试拆解:从 HR 面、技术面到主管面的双赢提问法
前端·面试