吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8332|回复: 128
收起左侧

[Web逆向] 猿人学二十题 js 逆向分析

    [复制链接]
chocolate. 发表于 2025-7-7 15:32
本帖最后由 chocolate. 于 2025-7-7 16:04 编辑

猿人学第二十关逆向分析教程

[原创] 猿人学学员题34题 js加课例题1 逆向分析

还原“猿人学 第20关”中加密参数 sign 的生成逻辑,最终用 Python 脚本模拟访问接口。

分析地址:aHR0cHM6Ly9tYXRjaC55dWFucmVueHVlLmNuL21hdGNoLzIwIw==


🚩 第一步:抓包定位 sign 参数

F12 打开 DevTools,观察 Network 请求

image-20250707142338096.png


🧠 第二步:断点调试找加密函数

  • 在浏览器中找到 sign 的调用

    image-20250707142447212.png

    image-20250707142503175.png

  • 下断点进入内部方法,最终定位到调用 _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["sign"](retptr, ptr0, len0); 的过程

    image-20250707142615626.png

    这里可以看出是使用的wasm加密


🔍 第三步:进入 WASM 找明文

  • 打断点观察指针值

image-20250707142707404.png
下个断点,找到加密方法

image-20250707142731094.png

直接复制所有的加密方法,扔给ai
image-20250707142845195.png

这里我们看到具体的加密方法为match_twenty__sign,找一下对应位置
call $match_twenty::sign::h5787c0a9b8e619b6
下断点进入到具体的方法里

image-20250707143005687.png

image-20250707143042317.png

同样的复制内容给ai

image-20250707143428036.png

然后找到对应的加密方法(wasm中对应的位置)

image-20250707143522857.png

在这里下断点

查看
image-20250707143616996.png

往下找一下,发现有个md5字样,打上断点

image-20250707145803940.png

查看方法上方这三个变量的值,分别为

value: 1048504

value: 1114192

value: 31

这里应该就是未加密之前的数据,第一个值是返回值,第二个值为明文,第三个值为偏移量,下面重新进入到

function sign(content) {
    try {
        const retptr = _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["__wbindgen_add_to_stack_pointer"](-16);
        var ptr0 = passStringToWasm0(content, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["__wbindgen_malloc"], _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["__wbindgen_realloc"]);
        var len0 = WASM_VECTOR_LEN;
        _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["sign"](retptr, ptr0, len0);
        var r0 = getInt32Memory0()[retptr / 4 + 0];
        var r1 = getInt32Memory0()[retptr / 4 + 1];
        return getStringFromWasm0(r0, r1);
    } finally {
        _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["__wbindgen_add_to_stack_pointer"](16);
        _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__["__wbindgen_free"](r0, r1);
    }
}

方法,然后进入
image-20250707150023823.png

因为浏览器也是要通过指针进行读值的,可以借助浏览器的方法,查看上方获取到的数据

function getStringFromWasm0(ptr, len) {
    return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
}

在控制台替换值并输入

cachedTextDecoder.decode(getUint8Memory0().subarray(1114192, 1114192 + 31))

就可以获取到加密前的明文
image-20250707150241062.png

  • 找到 sign(ptr, len) 所使用的明文地址
  • 用浏览器控制台的 getStringFromWasm0 方法查看明文
cachedTextDecoder.decode(getUint8Memory0().subarray(1114192, 1114192 + 31))

✍️ 第四步:测试提交

def generate_sign(page, timestamp):
    sign_string = f"{page}|{timestamp}D#uqGdcw41pWeNXm"
    return hashlib.md5(sign_string.encode()).hexdigest()

image-20250707152209001.png

image-20250707151223926.png

免费评分

参与人数 53吾爱币 +41 热心值 +47 收起 理由
Rogers5 + 1 + 1 谢谢@Thanks!
Ypndpll + 1 + 1 谢谢@Thanks!
wolfking05 + 1 + 1 热心回复
sswbzh + 1 + 1 我很赞同!
zxzx307 + 1 我很赞同!
nanzainanfang + 1 热心回复!
FZZZP + 1 + 1 谢谢@Thanks!
zymtsh + 1 谢谢@Thanks!
steven7x + 1 用心讨论,共获提升!
zhangla + 1 谢谢@Thanks!
imumu1239 + 1 + 1 谢谢@Thanks!
qdzj2010 + 1 + 1 用心讨论,共获提升!
xiekai2025 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
soyiC + 1 + 1 用心讨论,共获提升!
GMWQ + 1 + 1 我很赞同!
xioabo + 1 + 1 谢谢@Thanks!
zhoumeto + 1 + 1 用心讨论,共获提升!
huqi0010 + 1 + 1 我很赞同!
NanRuoSi + 1 666原来wasm也可以破解,还用到了AI 学习了
xinruyu + 1 谢谢@Thanks!
zhang01010 + 1 我很赞同!
八块腹肌J先生 + 1 + 1 我很赞同!
yummy2honey + 1 很强
q2864460459 + 1 + 1 我很赞同!
liuyuan0924 + 1 + 1 谢谢@Thanks!
guoruihotel + 1 + 1 谢谢@Thanks!
wocuole + 1 + 1 谢谢@Thanks!
Lightstarx + 1 + 1 我很赞同!
我是大力呀 + 1 + 1 用心讨论,共获提升!
yhfvip + 1 + 1 谢谢@Thanks!
wdj500 + 1 + 1 我很赞同!
submarine1620 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
klmytwb + 1 + 1 谢谢@Thanks!
Cocytusla + 1 我很赞同!
fengbolee + 2 + 1 用心讨论,共获提升!
yjn866y + 1 + 1 谢谢@Thanks!
InfiniteBoy + 1 用心讨论,共获提升!
hopecolor514 + 1 我很赞同!
Ac7 + 1 热心回复!
flashily + 1 + 1 热心回复!
coderyl + 1 我很赞同!
sanzhu + 1 用心讨论,共获提升!
ccgao + 1 + 1 谢谢@Thanks!
nuoxi + 1 我很赞同!
隔壁家的王二狗 + 1 + 1 热心回复!
Akasiki + 1 + 1 谢谢@Thanks!
Alex-LK + 1 谢谢@Thanks!
ErenLuo + 1 热心回复!
baqi2004 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wanzm + 1 我很赞同!
allspark + 1 + 1 用心讨论,共获提升!
liuxuming3303 + 1 + 1 谢谢@Thanks!
zjun777 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lwftr520 发表于 2025-7-18 20:48
感谢楼主分享!                                                  
hengheng013 发表于 2025-7-15 22:49
纯新手,能否问下这段代码哪来的啊,我看了下不知道这段代码的由来
cachedTextDecoder.decode(getUint8Memory0().subarray(1114192, 1114192 + 31))
freesaber 发表于 2025-7-7 16:55
666,关键还是看ai,混淆过的,自己分析,头都大了
yiluoen0502 发表于 2025-7-8 08:42
好厉害,谢谢分享
gyan 发表于 2025-7-8 12:23
感谢楼主分享!
stone102 发表于 2025-7-8 13:34
猿人学的大佬 支持一波
lumoureni 发表于 2025-7-8 16:37
学到了哥
Huayy 发表于 2025-7-8 16:39
强的很啊
qweaxd 发表于 2025-7-8 16:41
学习ing!!!!
gdyaojie 发表于 2025-7-8 16:41
好强!支持大佬分享!
Regret123 发表于 2025-7-8 16:48
大佬用的什么ai啊,这个很看ai的代码能力啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-2-10 08:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表