某红薯X-S(xs)纯算逆向分析

特别声明!此文章是单纯学术交流,无任何目的,已剔除全部商业信息!!!

前言

1.获取搜索得到某的数据,来进行数据分析或其他商业操作。

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) {}
                }

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

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

小红书是一个社交电商平台,为了保护用户的数据安全和防止恶意攻击,平台采用了加密算法对一些敏感参数进行加密处理,比如x-s和x-t。逆向工程是指通过对应用程序或代码的逆向分析和解析,以获取其内部的机制、算法或逻辑流程。 要逆向解密小红书的x-s和x-t参数,通常需要进行以下步骤: 1. 获取加密的js文件:首先,我们需要获取小红书的相关js文件,可以通过抓包工具或者浏览器开发者工具获取到与加密相关的js文件。 2. 分析加密算法:通过对js文件的逆向分析,我们可以寻找到相关的加密算法或函数。一般来说,加密参数通常会用到一些常见的加密算法,比如AES、RSA、MD5等。分析加密算法的关键是找到加密所使用的密钥和加密的处理过程。 3. 提取密钥和参数:一旦我们找到了加密算法和处理过程,接下来需要尝试提取出密钥和参数。这需要根据具体的算法和代码逻辑进行实际的代码分析和编写。 4. 解密参数:当我们获取到了正确的密钥和参数后,就可以编写相应的解密函数来对加密的x-s和x-t参数进行解密。 需要注意的是,逆向工程涉及对他人软件的解密和分析,这可能涉及到法律和道德等方面的问题,建议在合法和合规的前提下使用逆向工程技术。此外,小红书作为一款商业应用,也会不断更新其加密算法和安全机制,因此逆向解密可能随着时间的推移需要不断更新和调整。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往日情怀酿做酒 V1763929638

往日情怀酿作酒 感谢你的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值