漁滒 发表于 2024-9-30 00:22

【JS逆向系列】某乎__zse_ck参数js与wasm多重套娃地狱级(左篇)

@(【JS逆向系列】某乎__zse_ck参数js与wasm多重套娃地狱级(左篇))

## 前言
本片文章在一部分内容中会关联其他文章,建议优先阅读


[【JS逆向系列】某乎x96参数与jsvmp初体验](https://www.52pojie.cn/thread-1619464-1-1.html)

[【JS逆向系列】某乎x96参数3.0版本与jsvmp进阶](https://www.52pojie.cn/thread-1686683-1-1.html)



## 最外层js逆向分析

先下一个脚本断点,然后当使用浏览器无痕模式访问某乎提问题的主页时,并不会直接返回网页源代码,而是返回一个验证的中间页面



这个中间页面非常简单,仅仅只加载了一个js文件



这个js主要分成四部分,首先是来了一个常见的ob混淆



这里只看重要的jsvmp和wasm两个部分,jsvmp部分的代码与上一篇的__zse_ck完全一样,但是字节码部分却很奇怪,解码之前字符串有一万多的长度

由之前可知执行每一步都会通过【>> 19】来计算进入哪一组函数,所以在这里下断点,断下是已经解析好字节码



因为代码有ob混淆,所以搜索【>> 0x13】下断点,此时就可以查看this的数据



可以看到大数组只有80的长度,字符串数组只有16的长度。不对劲,这么长的解析出来怎么可能只有80步这么短

而经过分析才发现,字符串数组下标13的字符串长度居然高达7094



也就是说这段jsvmp的流程可能是非常短,只是有一个非常大的字符串

还是用之前的方法对这段jsvmp进行反汇编

```javascript
function sub_0() {
__g["ck"] = "003_bdxEeEnJYUXwWmFo0zxaCPNgpkh1+HL9yQr4ya6AXXDDOOQXoausGBAnGBSUqjXGqpIyQJjZ7C2Su/UzpZZCx6xsxiIj/kqzZN/YjmBxgx+=";
stack_0 = 63;
let var_0 = __g["z"]["toString"]();
stack_1 = var_0;
register_0 = stack_1;
let var_1 = register_0["indexOf"]("nsol");
if (var_1 > -1) {
    register_0 = stack_0;
    stack_2 = register_0 + 40;
}
if (!(var_1 > -1)) {
    stack_2 = 64;
}
let var_2 = document["querySelector"]("script");
stack_3 = var_2;
register_0 = stack_3;
stack_4 = register_0 + "";
register_0 = stack_4;
let var_3 = register_0["indexOf"]("HTMLScriptElement");
if (var_3 == -1) {
    register_0 = stack_2;
    stack_2 = register_0 + 41;
}
register_0 = stack_2;
if (register_0 < 100) {
    __g["ck"] = "003_bse0VGIjj3tceHDd8dBC73LrG7T3+wPFX/XU+QZ69kG8R9/JoHdLt9xKdmxP6LEBeW4N9MZWmS36rLXN81hQSdiWDIqzuoVj9RJHBJU8Qdoi";
}
let var_4 = window["eval"]("(function(){const encoder=new window.TextEncoder(\"utf-8\");const decoder=new w /* 代码太长忽略*/");
}
```

流程确实很短,前面是一些环境检测,检测不通过的话就会设置一个默认的ck值,但是这个值拿去请求的话,是会返回乱码的内容。

最重要的就是最后一句,eval了一段非常长的js,所以上面忽略的部分代码,下面将这部分js复制出来格式化



可以看到这是一个很标准的胶水代码,那么就是为了后续加载wasm做准备。到这里对真实的ck还没开始,那么继续往下看


## 最外层js加载wasm

二进制wasm文件直接用base64编码写在了源代码中



当加载完wasm后直接调用了run的标准初始化函数,这个run函数就是在前面eval的胶水代码里面。



这里面也是标准函数,然后突然就生成好了ck。咦!!!是不是少了什么步骤?

之前加载完wasm后,明确了是调用【_encrypt】函数后才获取到ck,但是现在没有了。 接下来就只能是下载wasm文件,然后转o文件用ida分析



但是此时无论是搜索【encrypt】或者是【sm4】都没有结果



突然间逆向好像陷入了僵局,不知道后面应该怎么进行下去!

sdieedu 发表于 2024-9-30 05:55

这个太难了,还是更新一下GitHub的视频下载器,嘿嘿

sdieedu 发表于 2024-9-30 05:54

大佬加油!

corleone9 发表于 2024-9-30 05:51

非常好,学习了

YIUA 发表于 2024-9-30 07:28

大佬太强了,学习到了

surepj 发表于 2024-9-30 07:42

向大佬学习了,非常强{:1_921:}

KeviseBY 发表于 2024-9-30 07:57


大佬太强了,感谢分享

HA19683 发表于 2024-9-30 08:44

感谢分享

放手一搏09 发表于 2024-9-30 09:15

太强了!!

夜泉 发表于 2024-9-30 09:39

竟然有能让大佬望而止步的代码。。。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【JS逆向系列】某乎__zse_ck参数js与wasm多重套娃地狱级(左篇)