某音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.某音新版本逻辑分析

更多内容欢迎加入我的星球

某音jsvmp下参数分析笔记相关推荐

  1. 心肺运动试验----各类参数分析笔记

    1 心肺运动试验 1.1.什么是心肺运动试验? 心肺运动试验(CPET)是一种可以使研究者同时观察患者的心血管系统和呼吸系统对同一种运动应激的反应情况的临床试验.因为,呼吸道的气体交换与循环相关联,可 ...

  2. Auto.js 抖音--留痕--参数分析

    环境: VS Code Auto.js Pro 7.0.4 安卓全机型 跳转 // 会在手机显示一个控制台,打印的信息会在手机端显示(需要开启悬浮窗权限) // autojs在手机端显示调试信息,也就 ...

  3. C语言笔记 第三十五课 数组参数和指针参数分析

    第三十五课 数组参数和指针参数分析 思考:为什么C语言中的数组参数会退化为指针? 退化的意义 C语言中只会以值拷贝的方式传输参数 当向函数传递数组时:(错误的,设计当初的思路) 将整个数组拷贝一份传入 ...

  4. 2.View绘制分析笔记之onMeasure

    今天主要学习记录一下Android View绘制三部曲的第一步,onMeasure,测量. 起源 在Activity中,所有的View都是DecorView的子View,然后DecorView又是被V ...

  5. 重载内核全程分析笔记

    标 题: [原创]重载内核全程分析笔记 作 者: Speeday 时 间: 2013-08-20,20:19:46 链 接: http://bbs.pediy.com/showthread.php?t ...

  6. AI:IPPR的数学表示-CNN结构/参数分析

    前言:CNN迎接多类的挑战 特定类型的传统PR方法特征提取的方法是固定的,模式函数的形式是固定的,在理论上产生了特定的"局限性" 的,分类准确度可以使用PAC学习理论的方法计算出来 ...

  7. CSMA/CD协议分析笔记

    CSMA/CD协议分析笔记 CSMA/CD(carrier sense multiple access with collision detection) 文章目录 CSMA/CD协议分析笔记 前言 ...

  8. 关于qcom camera cpp driver 的buf分析笔记(msm8996)

    关于qcom camera cpp driver 的buf分析笔记(msm8996) tags : linux camera 文章目录 关于qcom camera cpp driver 的buf分析笔 ...

  9. C++下opencv学习笔记(一)(图像的简单读取丶显示与存储)

    C++下opencv学习笔记(一)(图像的简单读取丶显示与存储) 前言 学习C++ OpenCV,第一需要具备面向对象语言的基础,第二要对图像处理机器学习有基础了解,容易入门.觉得自己基础已经有了可以 ...

最新文章

  1. python自学多久可以找到工作-自学Python的高效方法,学Python多久能找到工作?
  2. matlab 2014 破解使用
  3. tmeminifile and tinifile
  4. 使用 yield 减少内存消耗
  5. php设置cookie 域名,php如何设置cookie对整个域名有效?
  6. IOC操作Bean管理XML方式(创建对象和set注入属性)
  7. linux 动态库构造函数,Linux共享库全局构造函数的相互依赖性
  8. 互联网日报 | 6月12日 星期六 | BOSS直聘正式登陆纳斯达克;腾讯回应“试点强制6点下班”;数据安全法9月1日起实施...
  9. [C#] 如何分析stackoverflow等clr错误
  10. 如何在Java的特定范围内生成随机整数? [英]How do I generate random integers within a specific range in Java?
  11. 算法不会,尚能饭否之排序——直接插入排序(Insert sort)
  12. HCIE-OSPFV3
  13. java面向对象的基本概念
  14. 十年前的5.19行情
  15. Python笔记03:python中用import导入包的机制原理是什么?
  16. 告别2018:人间值得,你更值得!
  17. 杀戮尖塔java启动_slay the spire杀戮尖塔无法启动
  18. Linux计算时间间隔
  19. 2021 第五届“达观杯” 基于大规模预训练模型的风险事件标签识别】3 Bert和Nezha方案
  20. BZOJ3745: [Coci2015]Norma【CDQ】

热门文章

  1. popupwindow 不抢夺焦点_儿童摄影指南:寻找不一样的视角
  2. Android源码目录结构,已获千赞
  3. 操作系统中的大头小头字节序
  4. OpenGL ES之实现“大头小头”和“头部晃动”的效果
  5. 基于Astar算法的栅格地图最优路径搜索matlab仿真,可以修改任意数量栅格
  6. selinux 关闭
  7. 我如何为家居装饰品牌建立最快的电子商务商店[PART 2]
  8. 你有“ChatGPT综合征”吗:想搞钱,或是失业焦虑?
  9. Linux简介及基础指令(一)
  10. Unity3D设计模式学习之观察者模式(二)