吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11425|回复: 62
收起左侧

[Web逆向] 某音jsvmp下参数分析笔记

  [复制链接]
漁滒 发表于 2022-5-4 22:43

@TOC

在获取个人主页发布视频的时候,会有两个特别的参数

在这里插入图片描述
X-Bogus和_signature,但是在全局搜索的时候,却完全没有搜索到这两个关键字,按照以往的经验,字节的会重写XMLHttpRequest原型下的方法,当发出请求前,会经过一段加密逻辑,自己加上校验的参数,那么在网站上试一试

在这里插入图片描述
果然XMLHttpRequest原型下的open方法被重写了,点进去后,发现在webmssdk.js这个里面,这个就是jsvmp的入口

在这里插入图片描述
下一个断点往下拉,当触发请求的时候,就会断下,可以看到open方法的三个参数,跟着单步往下走,就会进入_0x20653b函数

在这里插入图片描述
这个函数带有8个参数,既然是jsvmp,那就用jsvmp的思路来看看这8个参数分别代表什么意思,经过多次对比,可以得到下方的表格

变量名 含义
_0x52f757 字节码
_0x1f5661 函数基址
_0xabd09a 函数长度
_0x204c10 本地变量
_0x2bf5d9 闭包变量
_0x5cca65 函数调用者
_0x1a0d5a 无意义
_0x4420e0 分支类型

知道变量的类型后,那么可以尝试根据字节码,来编写一个对应的解释器,根据函数基址为578,函数长度为71,生成open方法的伪代码如下

function open(){
    this["_byted_intercept_list"] = [];
    var local_var_0x0 = new window["Object"]();
    local_var_0x0["func"] = "open";
    local_var_0x0["arguments"] = argument_$2;
    this["_byted_method"] = argument_0["toUpperCase"].apply(argument_0, []);
    this["_byted_url"] = argument_1;
    return argument_$0[26].apply(this, argument_$2);
}

函数非常短,看起来不像是生成两个参数的,功能只是把设置了_byted_method和_bytedurl这两个属性,其中argument$0[26]正是底层的open方法

既然不在open方法,那么很有可能就是在send方法了

在这里插入图片描述
继续点进去

在这里插入图片描述
可以看到send方法被绑定到这里了,继续单步调试,又来到了熟悉的地方

在这里插入图片描述
继续往下单步调试,可以看到send方法的字节码以及函数基址等数值,继续尝试生成伪代码

function send()  {
  for (; this["_byted_url"]["indexOf"].apply(this["_byted_url"], ["_signature="]) > 0 - 1;) {
    return argument_$0[28].apply(this, argument_$2);
  }

  this["_byted_body"] = argument_0;
  argument_7 = this["onreadystatechange"];
  argument_8 = this["onabort"];
  argument_9 = this["onerror"];
  argument_10 = this["onload"];
  argument_11 = this["onloadend"];
  argument_12 = this["onloadstart"];
  argument_13 = this["onprogress"];
  argument_14 = this["ontimeout"];
  var local_var_0x0 = new window["Object"]();
  argument_15 = local_var_0x0;
  argument_50 = 0;

  for (; argument_50 < argument_$0[30]["length"];) {
    argument_15[argument_$0[30][argument_50]] = this["upload"][argument_$0[30][argument_50]];
    argument_50++;
    argument_50 = argument_50;
  }

  argument_16 = argument_$0[3]["msStatus"];
  *********省略代码****************
}

明显,这次的伪代码逻辑上存在问题,代码并不可信,但是还是能从中获取到一些逻辑,那么这些伪代码就可以作为辅助来还原算法。最终可以在send函数中分别找到X-Bogus和_signature的生成函数,分别根据伪代码辅助,手动调试的方法,还原出python版本的算法。

使用还原的算法测试抖音弹幕的获取,可以正常获取。

在这里插入图片描述

在深入研究发现,其实还有一些参数也是jsvmp中生成,但是并是在这个这同一个js,如__ac_signature和captchaBody。其中__ac_signature是从首次访问任何页面返回的

在这里插入图片描述
而captchaBody则是从captcha.js文件中生成的,不过其中所有的文件中,字节码的魔数都是一样的,也就是说可以使用同一套解释器生成伪代码,从而辅助还原算法

在这里插入图片描述

参考文献
1.【JS逆向系列】某乎x96参数与jsvmp初体验
2. [原创] 给"某音"的js虚拟机写一个编译器
3.某音新版本逻辑分析

免费评分

参与人数 18威望 +2 吾爱币 +121 热心值 +17 收起 理由
wangkaixuan0122 + 1 + 1 我很赞同!
David13738 + 1 + 1 热心回复!
timeslover + 2 用心讨论,共获提升!
努力加载中 + 1 + 1 热心回复!
红烧排骨 + 1 热心回复!
HackerMaple + 1 + 1 谢谢@Thanks!
fengbolee + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
bjznhxy + 1 + 1 热心回复!
technogoon + 1 + 1 谢谢@Thanks!
weilan + 1 + 1 我很赞同!
v.n.lee + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
chenchen_82482 + 1 谢谢@Thanks!
涛之雨 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ciker_li + 2 + 1 谢谢@Thanks!
qujunde + 1 + 1 我正研究这个呢,真是雪中送炭啊
逍遥一仙 + 3 + 1 太强了
笙若 + 1 + 1 谢谢@Thanks!
我是不会改名的 + 2 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

  • · 好帖|主题: 549, 订阅: 87

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

头像被屏蔽
shayu2021 发表于 2022-5-13 06:19
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 漁滒 发表于 2022-5-5 14:24
CDCBB 发表于 2022-5-5 13:56
请问怎样让自己的js代码进行vmp保护呢

这个也是需要自己通过ast编写虚拟化代码
我是不会改名的 发表于 2022-5-4 22:53
503671998 发表于 2022-5-4 22:59
渔哥太厉害了啊我去
hjw01 发表于 2022-5-4 22:59
goods,学习了谢谢
OVVO 发表于 2022-5-4 23:32
小漁,我的偶像
异常马粥 发表于 2022-5-4 23:38
我只能说。永远滴神!
hackerbob 发表于 2022-5-5 01:20
看了半天还是没看懂
头像被屏蔽
cmbslgn 发表于 2022-5-5 08:44
提示: 作者被禁止或删除 内容自动屏蔽
iloveasdl 发表于 2022-5-5 08:52
学习经验,谢谢
qujunde 发表于 2022-5-5 09:09
学习经验,谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 10:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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