XHS xs逆向分析
创始人
2024-09-26 13:49:26
0

 已经把所有的侵权地方删除,望批准 

前言

1.本文单纯学习jsvmp和交流,无任何其他意图 

2.学习jsvmp,通过插桩和算法还原。

问:什么是vmp?

JSVMP(JavaScript Virtual Machine Protocol)是一种协议,用于在不同的JavaScript虚拟机(如V8、SpiderMonkey等)和调试器之间进行通信。它定义了一套标准的消息格式和通信规则,使得调试器可以与不同的JavaScript虚拟机进行交互,实现调试、监控和性能分析等功能。

JSVMP的作用包括但不限于:

  1. 调试: JSVMP允许调试器与JavaScript虚拟机进行通信,以便在代码执行过程中进行断点设置、变量查看、调用堆栈跟踪等调试操作。

  2. 性能分析: 通过JSVMP,性能分析工具可以与JavaScript虚拟机交互,收集代码执行时的性能数据,如函数执行时间、内存占用情况等,以便进行性能优化。

  3. 监控: JSVMP还可以用于监控JavaScript应用程序的运行状态,例如监控内存使用情况、异常抛出情况等,以便及时发现和处理问题。

总的来说,JSVMP为开发人员和工具提供了一种标准的交互方式,使得他们可以更方便地对JavaScript应用程序进行调试、性能分析和监控。

1.抓包分析

通过抓包分析得到数据包为这个node

 观察载荷发现 search_id有点像逆向参数 但是请求几次发现 这是个随机值 直接写死就好

 观察请求头发现 三个参数需要加密,但是很明显x-t是个时间戳,再次经过测试发现,需要逆向的只有X-s一个值,观察X-s发现,他是由XYW_拼接上一个字符串成分的(根据逆向经验来说ey是{的base64编码),我们对其进行base64解码

发现payload就是我们要求的参数

 全局搜索x-b,发现生成的地方就是在中间的那个函数,至此,抓包分析已经结束

2.代码分析

(1)进入函数

发现这是一段完全看不懂的代码(所以现在放弃还来得及),这个便是vmp代码了(vmp上文已经介绍)。我们新添一个代码段,测试一下是不是加密值

 执行完结果就是xs 判断没错

3.插桩分析

问:什么是插桩?

在软件开发中,插桩(instrumentation)是指在程序的源代码或者目标代码中插入额外的代码,以便在程序执行时收集信息、监视程序行为或修改程序行为的过程。插桩通常是通过在程序的关键位置插入代码来实现的,这些位置可以是函数调用、循环开始或结束、变量赋值等。

插桩的主要目的包括但不限于:

  1. 性能分析: 插桩可以用于在程序执行时收集性能数据,例如函数执行时间、内存使用情况等,以便进行性能分析和优化。

  2. 调试: 插桩可以在程序执行时插入调试代码,以便在程序运行时进行调试操作,如打印调试信息、监视变量值等。

  3. 安全检查: 插桩可以用于在程序执行时插入安全检查代码,以检测潜在的安全漏洞或恶意行为。

  4. 动态分析: 插桩可以用于在程序执行时收集动态信息,如代码覆盖率、函数调用图等,以便进行动态分析和测试。

插桩通常是通过静态分析或动态分析技术实现的。静态插桩是在程序编译或加载时修改程序的源代码或目标代码,而动态插桩是在程序运行时通过代码注入等方式插入额外的代码。

那我们接下来要在哪个地方插桩呢 ?

那当然vmp的最小指令集进行,那我们先分析代码来找到他最小指令集的位置

 我们再进入_ace_1ae3c函数里面

 发现实际上最小指令是这个函数,那我们便在这个位置进行插装

插装代码如下

console.log(_ace_d656a)                 if(_ace_7e97a && _ace_7e97a[1]!='W' &&_ace_7e97a[1]!="implementation"){                     window.data+=_ace_7e97a.toString()+"\n";                     window.a=_ace_7e97a                 console.log(_ace_7e97a)                 }

打印插装结果

天纳!九十多万条数据(很有可能电脑卡死,我也是一把一把泪卡过来的),如果经常卡死的话可以把打印内容保存到文档里,现在我们就是要对这堆数据进行分析

4.算法分析

首先我們得明白我們在做什麽 我们得对参数进行分析

1.我们先搜索/api/sns/web/v1/search/notes,找到其最后一个位置

发现是url+载荷进行拼接 这个大数组要么是加密结果要么是加密方法里的数字 我们搜索发现搜索不到加密方式 那接着往下走

Tips:将其转成16进制更容易搜到

我们接着往下找发现

x1为32位的字符串(盲猜是md5加密)

x2这种格式的数据一般都是环境检测值 直接写死

x3发现来自cookie里的a1

x4时间戳

对刚才的url加上载荷进行md5加密

发现刚好匹配 所以以上猜测成立

再往下找数据

发现了这个数据,观察很像base64,我们对他进行解码发现

 就是对x1 x2 x3 x4进行base64

然后我们再往下找找到生成数据的地方,发现

在这里payload已经生成了,所以我们往前找

 发现这里有大数组,这里极有可能是加密方法里的参数,我们把他转成16进制再搜索

发现这大概率是一个des加密,那么我们此时此刻还差一个key key通常是16,32位的

 发现这个恰好是32位,那我们此时只要带入加密便可得知是不是正确的了

 至此,所有加密都已经找到

5.算法总结

x1=对url和载荷拼接后进行md5摘要

x2=环境 (可以写死x2=0|0|0|1|0|0|1|0|0|0|1|0|0|0|0)

x3=cookie里的a1

x4=时间戳

再获取payload=对x1到x4用;拼接起来进行base64编码 最后通过des生成

最后 payload带入{ "signSvn": "51", "signType": "x1", "appId": "xhs-pc-web", "signVersion": "1", "payload": payload }进行base64编码,再在开头加上XYW_

至此,逆向完成

6.效果演示

测试完成,逆向成功

补充

如果是在浏览器控制台进行算法分析会更容易看出各种加密方式,直接通过tostring保存到文档会有很多干扰,这里给出新的优化插装代码(前面也是忘了)

if (_ace_7e97a && _ace_7e97a[1] != 'W' && _ace_7e97a[1] != "implementation") {                     try {                         window.data += JSON.stringify(_ace_7e97a) + "\n";                         window.a = _ace_7e97a                         console.log(JSON.stringify(_ace_7e97a))                     } catch (e) {}                 }

这样子保存到文档会更加紧凑,还可以分段插桩也更容易看出,这里我就不再过多赘述,有不足的地方欢迎指针

需要源码主页私信我,有求必应

相关内容

热门资讯

新2020透明挂!wpk修改器... 新2020透明挂!wpk修改器(wEpOke)软件透明挂,太过分了Wepoke安装外挂辅助器插件(哔...
2023新教程版((wepoK... 2023新教程版((wepoKE))软件透明挂,Wepoke是真的外挂软件透明挂工具(哔哩哔哩);致...
7分钟了解(德州透视辅助!WP... 7分钟了解(德州透视辅助!WPK内置)透视辅助(wepoKe)外挂透明挂脚本(哔哩哔哩);AI智能教...
五分钟了解!哈灵麻将攻略小技巧... 五分钟了解!哈灵麻将攻略小技巧(辅助挂)太坑了!Wepoke打法原来真的是有挂(哔哩哔哩);人气非常...
八分钟了解!WPK德州版(微扑... 亲,微扑克这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是...
新2022版猫腻!Wepoke... 新2022版猫腻!Wepoke漏洞(WepOke)辅助透视,太夸张了Wepoke靠谱外挂辅助器工具(...
2020AI代打((WePoK... 2020AI代打((WePoKer))软件透明挂,Wepoke游戏外挂辅助器助手(哔哩哔哩);详细W...
4分钟了解(wpk透视辅助!W... 4分钟了解(wpk透视辅助!Wepoke实测)辅助透视(wPk)外挂辅助器脚本(哔哩哔哩);1、完成...
5分钟了解!Wepoke大厅房... 亲,wEpOke这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好...
2022AI代打((WEPOK... 2022AI代打((WEPOKE))辅助透视,微扑克wpk外挂软件透明挂安装(哔哩哔哩);致您一封信...