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

查看 125|回复 10
作者:漁滒   
@TOC
前言
本片文章在一部分内容中会关联其他文章,建议优先阅读
【JS逆向系列】某乎x96参数与jsvmp初体验
【JS逆向系列】某乎x96参数3.0版本与jsvmp进阶
最外层js逆向分析
先下一个脚本断点,然后当使用浏览器无痕模式访问某乎提问题的主页时,并不会直接返回网页源代码,而是返回一个验证的中间页面


001.jpg (49.27 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

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


002.jpg (165.43 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

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


003.jpg (138.54 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

这里只看重要的jsvmp和wasm两个部分,jsvmp部分的代码与上一篇的__zse_ck完全一样,但是字节码部分却很奇怪,解码之前字符串有一万多的长度
由之前可知执行每一步都会通过【>> 19】来计算进入哪一组函数,所以在这里下断点,断下是已经解析好字节码


004.jpg (118.37 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

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


005.jpg (108.54 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

可以看到大数组只有80的长度,字符串数组只有16的长度。不对劲,这么长的解析出来怎么可能只有80步这么短
而经过分析才发现,字符串数组下标13的字符串长度居然高达7094


006.jpg (5.32 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

也就是说这段jsvmp的流程可能是非常短,只是有一个非常大的字符串
还是用之前的方法对这段jsvmp进行反汇编
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[data-assets-tracker-config]");
  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
流程确实很短,前面是一些环境检测,检测不通过的话就会设置一个默认的ck值,但是这个值拿去请求的话,是会返回乱码的内容。
最重要的就是最后一句,eval了一段非常长的js,所以上面忽略的部分代码,下面将这部分js复制出来格式化


008.jpg (66.79 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

可以看到这是一个很标准的胶水代码,那么就是为了后续加载wasm做准备。到这里对真实的ck还没开始,那么继续往下看
最外层js加载wasm
二进制wasm文件直接用base64编码写在了源代码中


009.jpg (55.65 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

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


010.jpg (84.03 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

这里面也是标准函数,然后突然就生成好了ck。咦!!!是不是少了什么步骤?
之前加载完wasm后,明确了是调用【_encrypt】函数后才获取到ck,但是现在没有了。 接下来就只能是下载wasm文件,然后转o文件用ida分析


011.jpg (165.04 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

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


012.jpg (34.24 KB, 下载次数: 0)
下载附件
2024-9-30 00:21 上传

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

下载次数, 下载附件

sdieedu   

大佬加油!
mmshm   

我不懂技术,但另一方面,我总算明白为啥现在的网页那么吃内存了。这些大厂一天到晚不干正事,尽给小内存的机器增加负担,我这台电脑10年前同时开100个网页毫无压力,现在开10个标签就内存爆满
corleone9   

非常好,学习了
sdieedu   

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

大佬太强了,学习到了
surepj   

向大佬学习了,非常强
KeviseBY   

大佬太强了,感谢分享
HA19683   

感谢分享
放手一搏09   

太强了!!
您需要登录后才可以回帖 登录 | 立即注册

返回顶部