webmsxyw x-s分析

news/2024/11/7 14:29:42/

近期又更新了,先是改了x-s生成,然后又加上了a1校验。

后面可能会全参校验,比如再加上gid、deviceId、profileData、x-s-common、smidV2之类。

估计以后不能写了,大家且看且珍惜吧。之前相关的文章都被下架了

危!


文章目录

    • X-s
    • window._webmsxyw
      • Shanks
      • decode
      • _garp_dc33b
    • 补环境
    • X-s生成流程
    • 备注


X-s

还是先找x-s。全局搜关键词"X-s"

在这里插入图片描述

c = (a || void 0 !== window._webmsxyw ? window._webmsxyw : sign)(u, i) || {};

if a:return a
elif "window._webmsxyw" in globals() and window._webmsxyw is not None:return window._webmsxyw
else:return sign

在这里插入图片描述

可发现feed接口没走sign,走的方法是在 window._webmsxyw = _garp_dc33b

在这里插入图片描述
可以测试下把 window._webmsxyw置为null是否能正常返回。
在这里插入图片描述


window._webmsxyw

跳转过去能发现代码混淆过了,并且自执行了,不便阅读。

Shanks

先看外部Shanks。

(function() {function Shanks() {var _garp_d6c76 = 2147483647, _garp_a0c6d = 1, _garp_33d28 = 0, _garp_cb56b = !!_garp_a0c6d, _garp_35e13 = !!_garp_33d28;return function(_garp_d3e7c, _garp_d0ad1, _garp_8d381){};};Shanks()(window, {});
}
)();

这段代码定义了Shanks函数,定义了一个闭包,返回一个匿名函数,并使用立即执行函数将其调用。
在调用Shanks函数时,它接受两个参数,分别是window和对象{}。


decode

不难看出 decode 是一段实现了 Base64 解码的方法,包括了将 Base64 编码的字符串解码为正常字符串的逻辑,以及处理 Unicode 字符的逻辑。

var decode = function(j) {if (!j) {return ""}var n = function(e) {var f = [], t = e.length;var u = 0;for (var u = 0; u < t; u++) {var w = e.charCodeAt(u);if (((w >> 7) & 255) == 0) {f.push(e.charAt(u))} else {if (((w >> 5) & 255) == 6) {var b = e.charCodeAt(++u);var a = (w & 31) << 6;var c = b & 63;var v = a | c;f.push(String.fromCharCode(v))} else {if (((w >> 4) & 255) == 14) {var b = e.charCodeAt(++u);var d = e.charCodeAt(++u);var a = (w << 4) | ((b >> 2) & 15);var c = ((b & 3) << 6) | (d & 63);var v = ((a & 255) << 8) | c;f.push(String.fromCharCode(v))}}}}return f.join("")};var k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");var p = j.length;var l = 0;var m = [];while (l < p) {var s = k.indexOf(j.charAt(l++));var r = k.indexOf(j.charAt(l++));var q = k.indexOf(j.charAt(l++));var o = k.indexOf(j.charAt(l++));var i = (s << 2) | (r >> 4);var h = ((r & 15) << 4) | (q >> 2);var g = ((q & 3) << 6) | o;m.push(String.fromCharCode(i));if (q != 64) {m.push(String.fromCharCode(h))}if (o != 64) {m.push(String.fromCharCode(g))}}return n(m.join(""))

_garp_dc33b

简单调了一下,大面积的自增运算,让人看不下去。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


补环境

直接把上面代码copy到本地先补环境看看,看日志要补的东西挺多,具体怎么用的没细看。(后面没用的我会删掉)

RegExp、Math、indexedDB、eval、localStorage、isNaN、unescape、Array、Function、setInterval、encodeURIComponent、decodeURIComponent、CanvasRenderingContext2D、HTMLCanvasElement、navigator、location、String、Date、Object、screen、document、

还有追加的 openDatabase、devicePixelRatio、AudioContext、webkitAudioContext、setInterval、getAttribute、xhsFingerprintV3

主要都是window对象的方法和属性,有两处报错的地方,补好后try-catch一下。
在这里插入图片描述

另外输出中还看到了process,先不管这个。

等到报错:
在这里插入图片描述
补到这里就快了。

在这里插入图片描述

还是catch下,把_webmsxyw给到window上。

在这里插入图片描述

这里补好就可以生成了。
在这里插入图片描述
但是发现本地生成的和浏览器的差了很多位数,调试发现是由于cookie中没有xsecappid和a1参数。

把cookie加上后发现还是少了24位,再检查下发现本地生成的x-s中没有加 “signVersion”:“1” 。

signVersion追加在localStorage中,默认是1。
在这里插入图片描述

简单一点,可以做类型判断然后给上值,注意signVersion的值是string类型。

 if (_garp_a3d40 && typeof _garp_a3d40==="object" && _garp_a3d40.hasOwnProperty('signVersion')){_garp_a3d40["signVersion"] = "1"}

现在生成的位数就一致了,但是测了下还是不可用。


X-s生成流程

继续调试分析,看流程是先去生成X1,然后构建payload。
payload由x1、x2、x3、x4组成。x1是api+formdata md5生成的,x2固定,x3是a1,x4是时间戳。
在这里插入图片描述
拼接为:x1=72ff6a81a0474a774ad1db6681c9614a;x2=0|0|0|1|0|0|1|0|0|1|1|0|0|0|0;x3=188392ccdbbk41ajfrbba1ngli7wcccg88o04w12v50000303000;x4=1684603371781;

然后做一些编码和加密生成密文payload,payload生成后再跟几个参数拼起来。

在这里插入图片描述

拼接完进行base64编码,然后和XYW_拼起来生成了最终的X-s。

在这里插入图片描述

流程并不复杂,现在需要找到本地生成不可用的原因,排除了请求报文和生成环境的可能后,需要从payload加密的位置入手。

前面已经看了x2固定,x3是a1,x4是时间戳。大概率问题在x1上面。确定下md5结果是否和浏览器一样。

在这里插入图片描述

控制台覆盖JS文件,然后查看输出。

在这里插入图片描述

一看不太对,feed接口在本地的x1是7开头的,控制台x1是1开头的。

本地 Nodejs 和浏览器的 MD5 算法结果是相同的,那说明本地md5前的参数不对。

本地x1一直是72ff6a81a0474a774ad1db6681c96,浏览器是会根据不同作品ID变化的。

调试发现,本地x1参数生成时没有加formdata。
在这里插入图片描述
确认原因发现是我在调用的时候传了string类型的formdata,修改为对象就能解决问题。

window._webmsxyw("/api/sns/web/v1/feed",{"source_note_id":"62d4e8a800000000120019dd"})

在这里插入图片描述

改完发现还是不能用。。。继续调试,重新检查,结果发现本地x2和浏览器不一样,应该是有环境没补上,省时间就直接写死吧。
在这里插入图片描述
判断后赋值。

   if (_garp_a3d40 && Array.isArray(_garp_a3d40)){const lastElement = _garp_a3d40[_garp_a3d40.length - 3];if (typeof lastElement === "object" &&  lastElement.hasOwnProperty("key")&& lastElement.key === "x2") {_garp_a3d40[_garp_a3d40.length - 3].value = '0|0|0|1|0|0|1|0|0|0|1|0|0|0|0'}}

然后再将时间戳固定后,生成的x-s和浏览器一致。
在这里插入图片描述


有插件检测和一些hook检测。注意还有个 crawler-spam ,用的异常点检测,影响调试。

在这里插入图片描述

如果断到这部分直接跳过,重试吧。

在这里插入图片描述


备注

注意请求时的a1要和xs生成时的a1一致,然后注意formdata参数格式的问题。

大家加油, 本文内容建立在feed接口上,gid和web_session注册不再说了,其他接口自行修改。

有问题欢迎留言,估计文章过几天又被下架了 。


另外,祝更新签名的你也好,O.o
在这里插入图片描述


http://www.ppmy.cn/news/74436.html

相关文章

(二十六)ATP应用测试平台——将一个微服务打包成含skywalking链路追踪的docker镜像

前言 延续前面的章节内容&#xff0c;本节内容我们以ht-atp的springboot应用为例&#xff0c;封装一个包含skywalking链路追踪的微服务docker应用。完成服务调用的链路追踪监控。skywalking采用字节码注入的方式实现代码的无侵入&#xff0c;探针采集数据粒度粗&#xff0c;但…

人大金仓KingBase-跨库连表查询(可参考修改)

使用dblink首先要去调用和被调用两个服务的库里执行dblink的创建语句 create extension if not exists dblink; 目前只测试了dblink的方式,business服务和user服务之间有跨库的连表操作,但是一般直接指定库名.模式.表明去连表,肯定会报错 com.kingbase8.util.KSQLException: 错…

MySQL查询性能优化

MySQL数据库配置参数建议如下&#xff1a; 建议设置default-storage-engineInnoDB,一般不建议使用MyISAM引擎调整InnoDB_buffer_pool_size的大小&#xff0c;如果是单实例且绝大多数是InnoDB引擎表的话&#xff0c;可考虑设置为物理内存的50%~70%设置InnoDB_file_per_table1&a…

量子OFFICE开源工程

量子OFFICE&#xff1a;Quantum Office 量子OFFICE由柳鲲鹏创立。 之所以创立量子OFFICE&#xff1a; 一方面是因为我对于OFFICE软件的各个方面(WORD布局绘制&#xff0c;EXCEL计算&#xff0c;POWERPOINT动画等等&#xff09;&#xff0c;均是世界第一&#xff0c;希望这一…

【STM32G431RBTx】备战蓝桥杯嵌入式→决赛试题→第十届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.双ADC:开启双ADCsingle-ended 3.LED:开启PC8-15,PD2输出模式就…

Bat批处理中的 FINDSTR用法

linux中的grep等同于win中的findstr命令。可以在txt文本中截取到有特定关键字的行&#xff0c;并显示出来。 grep也可以通过关键字&#xff0c;在一个文件夹下查找多个有这些关键字的文件&#xff0c;并生成结果。 一、findstr命令介绍 findstr是Windows系统自带的命令,简单来说…

加密解密软件VMProtect教程(八)许可制度之管理许可证

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

pyqt5:py处理C语言格式数组和有符号数的转换(备忘录)

文章目录 1.问题&#xff1a;把下面的数组所表示的正弦波用曲线描绘出来。1.1 将C语言数组直接替换为py数组1.2 使用numpy读入数组1.3完整代码 2.从正弦波数据生成C数组2.1 正弦波数据2.2 负数转成16位带符号整型公式2.3 负数转成16位带符号整型 完整代码 3. 生成正弦波数据的代…