040-spiderbuf第C8题

案例地址:spiderbuf第C8题

找加密接口和加密参数

加密接口:

加密参数:

响应解密:

定位加密位置

启动器进去打断点然后刷新网页,注意看url是否是我们要的:

然后看fetch里传的啥参数:

第一个是十位时间戳,第二个和第三个需要我们找一下:

ok,稍微分析一下就能知道,salt是在网站的时间变成时间戳然后再转base64,signature是hmacsha256加密网址后再用base64编码形成:

下面开始编写加密代码

加密复现

将此几行全扣下来然后手动还原一下混淆:

封装后如下:

javascript 复制代码
const CryptoJS = require("crypto-js");
function encryptParams() {
    var CryptoJS = require("crypto-js");
    const timestamp = Math["floor"](+new Date() / 1000)
        , salt = btoa(performance['now']()["toString"]()),
        hash = CryptoJS["HmacSHA256"]('' + salt + timestamp, "https://www.spiderbuf.cn/web-scraping-practice/scraper-practice-c08");
    let signature = CryptoJS['enc']['Base64']['stringify'](hash)
    return {
        sig: signature,
        s: salt,
        t: timestamp,
    }
}

请求看看能否拿到数据:

拿到啦,下面解决解密

定位解密位置

打开脚本断点,刷新网页,然后打开hook脚本:

回到上一个栈看看怎么个事儿:

这里太简单了,就是对称加密,稍微分析一下iv和key即可

代码复现

javascript 复制代码
function decryptData(data, signature) {
    const _0x206070 = CryptoJS["enc"]["Base64"]["parse"](data)
    _0x46ca84 = CryptoJS['lib']['WordArray']["create"](_0x206070['words'], _0x206070["sigBytes"])
    _0x20bc30 = {}
    _0x20bc30['ciphertext'] = CryptoJS["lib"]["WordArray"]["create"](_0x46ca84['words']["slice"](4), 1392)
    _0x2bd26d = CryptoJS["enc"]["Utf8"]["parse"](signature["slice"](0, 16));
    const _0x167729 = CryptoJS["AES"]['decrypt'](_0x20bc30, _0x2bd26d, {
        'iv': CryptoJS['lib']['WordArray']["create"](_0x46ca84["words"]["slice"](0, 4), 16),
        'mode': CryptoJS['mode']["CBC"],
        'padding': CryptoJS['pad']["Pkcs7"]
    })

    return _0x167729['toString'](CryptoJS['enc']["Utf8"])
}

py调用:

result:

解密成功

小结

本文比之前的练习简单得多,如有问题请及时提出,加油加油

相关推荐
ℋᙚᵐⁱᒻᵉ鲸落2 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙4 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
傲笑风4 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino
维基框架5 小时前
WIKI 知识库 v1.1.1 正式发布
人工智能·python
এ慕ོ冬℘゜5 小时前
navigator 导航对象 BOM制作方法
javascript
kyriewen7 小时前
面试官让我用 AI 重构一个 8 年陈的 React 组件——他说他不看代码,只看我会不会拆
前端·javascript·面试
谢白羽8 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
Jacky19999 小时前
Electron + Vue 3 桌面打字游戏实战:从 VSCode 扩展到独立应用的架构改造
javascript
迷迭香yy9 小时前
基金档案数据工程实战从收入分析到持仓穿透的Python解析 IG50免费开源股票数据API接口
开发语言·python
清水白石0089 小时前
Python 类型设计深度解析:TypedDict 能否替代 dataclass?从 JSON 数据边界到 API 设计的最佳实践
java·python·json