免责声明:本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
逆向目标
- 目标:抖音网页端用户信息接口 X-Bogus 参数
- 接口:
aHR0cHM6Ly93d3cuZG91eWluLmNvbS9hd2VtZS92MS93ZWIvdXNlci9wcm9maWxlL290aGVyLw==
- 参数:
- X-Bogus: DFSzswVYwR2ANJV5ttm-TDok/RBL
- msToken: XdvBn3ow8atTxF5IT6Nozn_D976Sh-fQQais1pUkC0U-…3iUKTT_yGo4Q1A9KBUXxYALyw==
- ttwid: 1%7CwRK6LHw2rKAyHM8EeD4WLyVctABf-…5f35595a6e1f587dcc9f09b4fe
虽然接口入参有很多,但是实际上必不可少且需要逆向的就只有X-Bogus,msToken和Cookie中的ttwid。本文主要介绍X-Bogus的逆向,关于msToken和ttwid,后续会发文。
关于JSVMP
JSVMP参考文章
JSVMP代码特征
$jsvmprt,_$webrt_1668687510之类的,第一个参数很长的一串字节码。
JSVMP逆向分析有哪些方法?
就目前来讲,除去Playwright等自动化工具,JSVMP 的逆向方法有三种:RPC 远程调用,补环境,日志断点还原算法。其中日志断点也称为插桩,找到关键位置,输出关键参数的日志信息,从结果往上倒推生成逻辑,以达到算法还原的目的,之前介绍过,参考《JS逆向案例——利用插桩分析某音X-Bogus参数》。RPC的方式以后有时间再写,本文主要介绍如何使用补环境的方法来生成签名参数。
逆向过程
签名参数定位
先抓包,进入博主主页之后,刷新,看到相应的接口和入参:

打下XHR断点,然后刷新页面重新请求主页:

成功打上了断点,并且此时已经生成了msToken和X-Bogus参数。往前跟栈,来到一个叫 webmssdk.js 的JS文件,这里就是生成参数的主要JS逻辑了,也就是JSVMP,整体上做了一个混淆如图:

我们用v_jstools做一个简单的还原,还原之后用浏览器的override功能替换,之后重新加载,如图:

往上跟栈到符号函数$这里:

在往上跟栈:

可以看到很明显的JSVMP的特征,参数a是请求的params。
确认一下定位的加密方法有没有问题:

没有问题,至此我们就成功定位到加密函数。
补环境
本文介绍手动补环境,关于自动补环境框架,半自动补环境框架后边发文介绍。
将整个webmssdk.es5.js的代码抠出来,然后定义全局变量__0x5a8f25
,将_0x5a8f25
方法导出,然后运行,如下:

提示window未定义,补上window定义:
1 | var window = global; |
接着运行:

提示document未定义,补上document:
1 | window.document = { |
后边的过程就不一一贴了,整理下最终全部的补环境代码:
1 | var window = global; |
运行与测试
补好环境之后,运行,结果如下:

成功生成X-Bogus参数。
若需要完整代码或者讨论,扫描加微信。
