某音jsvmp下参数分析笔记

某音jsvmp下参数分析笔记

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

在这里插入图片描述
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和_byted_url这两个属性,其中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.某音新版本逻辑分析

更多内容欢迎加入我的星球
在这里插入图片描述

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
R语言是一种功能强大的开源编程语言和环境,广泛应用于数据分析和统计建模。入门R语言的过程,我可以分享一些我自己的笔记和经验。 首先,入门R语言需要准备好安装R语言和RStudio的环境。RStudio是R语言的一个集成开发环境,提供了更加友好的界面和便捷的操作。安装完毕后,我们可以打开RStudio开始学习。 接下来,建议通过在线教程、视频教程或者书籍来学习R语言的基础知识和语法。了解R语言的数据结构,如向量、矩阵、数据帧等,掌握R语言的基本运算和函数操作等非常重要。 在学习过程中,我发现通过实际操作来巩固知识是非常有效的。可以尝试使用R语言处理一些简单的数据集,如读取数据、数据清洗和数据可视化等。这样可以更好地理解R语言的功能和应用。 另外,熟悉R语言的常用包和函数也是非常重要的。R语言有很多强大的数据分析包,如ggplot2、dplyr和tidyr等。通过学习它们的基本用法和常见函数的操作,可以更好地进行数据分析和统计建模。 同时,我也建议多参与R语言的相关社区和论坛,与其他R语言爱好者交流和分享经验。这不仅可以解决遇到的问题,还能学习到更多实际案例和应用技巧。 最后,持续学习和实践是掌握R语言的关键。不断地阅读学习材料、参与项目和练习编程,都是提高R语言技能的有效途径。 希望以上简要的笔记对入门R语言和数据分析有所帮助。R语言具有强大的数据分析能力,相信通过不断学习和实践,你可以在数据分析领域取得更好的成果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值