xhs 某书X-S(XS)纯算逆向

1.抓包分析

3352b48c3fb84969804c8101926be272.png通过抓包分析得,此数据包为homefeed

观察载荷得ad16c6c547c64bc59bce87a896956b42.png

并没有什么加密参数。那就要看看请求头,cookie

e17f57bcaf25441fa376a5b5c60b847a.png

请求头中有三个参数很像目标值

X-S,X-S-Common,X-B3-Tracied 

下面还有一个X-t,就是时间戳

f288b2d5ed034462abf04c65e4e1146f.png

全局搜索可以找到加密位置

52cb2c7f647e4192b332bedf304e0cd6.png

可以看出是中间的函数进行加密

55b4d1e1d04c4542826465e3bc34f710.png 在断点的时候发现会在很多干扰项断住,此时我们就可以加一个条件断点

如果c中有homefeed关键词,就断住,否则一律不断住

e31de1bd3cd34589a663297c035b827f.png

2.分析源码

6980908dab8c46cb811f8f699c5c018e.png进入源码得,这是一段VMP代码

什么是VMP?

VMP(Virtual Machine Protection)是一种软件保护技术,用于保护应用程序或软件的代码免受逆向工程、修改和盗版等威胁。VMP通过在程序中引入虚拟机(Virtual Machine)的概念,将原始的机器码转换为虚拟指令集,并在虚拟机中执行这些指令。

VMP的核心思想是将原始的可执行代码转换为一种只能在虚拟机环境中运行的形式,这样可以增加对代码的保护性。通过使用虚拟指令集,VMP使得对原始代码的静态分析和动态调试变得更加困难,因为攻击者无法直接理解和操作虚拟指令。

VMP通常会对程序进行以下操作:

  1. 代码加密:VMP会对原始的机器码进行加密,以防止代码被简单地提取和分析。只有在虚拟机环境中进行解密后,才能运行加密的代码。

  2. 虚拟指令集:VMP会将原始的机器码转换为虚拟指令集,这些指令集是一种与底层硬件和操作系统无关的抽象指令。虚拟指令集使得代码的执行逻辑更加复杂,难以进行逆向工程。

  3. 控制流混淆:VMP会对代码中的控制流进行混淆,使得代码的执行流程变得难以理解。通过添加无用的控制流指令、条件分支和跳转,VMP增加了代码的复杂性,使得分析和修改代码变得更加困难。

  4. 运行时检测:VMP会在程序运行时对代码进行检测,以防止代码被修改或篡改。如果检测到代码被修改,VMP可以采取相应的措施,如中断程序执行或清除关键数据。

VMP是一种常见的软件保护技术,被广泛应用于商业软件和游戏等领域,以保护知识产权和防止软件盗版。然而,VMP并非绝对安全,高级的逆向工程技术仍然可以绕过VMP的保护措施。因此,为了实现更高级的软件保护,通常需要采用多层次的保护策略和技术组合。

 现在我们进入了源码区域,可以先进行测试一下,看看是不是这个文件生成的加密值

d6344973796c4d39ae3babd4d8a2c08d.png

新添加一个代码段,通过调用上述加密函数,对相应的参数进行加密,看看结果是否一致

 5eff19e84844427c8046812143f9a823.png

可以看出结果与目标一致

0aa746bdd80b4d3b8c2fd2358fabd07e.png

在这个函数中有一个sanji函数

根据上图可以发现他先执行之后,后面又跟了一个括号传了参数,这就说明sanji函数的调用返回的又是一个函数,而返回的这个函数调用了后面的参数

那我们来看看sanji函数返回了什么函数

9288d2f00c5d4aa7a7b1019509af2ca2.png发现返回的函数需要是三个参数,第一个参数传入了window,第二个参数传入了一个object对象

第三个参数就是undefined

3.插桩分析

什么是插桩分析?

插桩(Instrumentation)是一种软件技术,用于在程序执行期间向代码中插入额外的指令或代码片段,以收集信息、监视程序行为、修改程序逻辑或进行性能分析等目的。

插桩通常在应用程序的源代码或目标代码级别进行,可以通过静态插桩或动态插桩的方式实现。静态插桩是在编译时或链接时修改代码,而动态插桩是在运行时通过修改内存中的程序指令实现。

插桩技术可以用于多种用途,包括但不限于以下几个方面:

  1. 监视和调试:插桩可以用于收集程序执行期间的运行时信息,如函数调用、变量值、异常处理等,以帮助调试和排除错误。

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

  3. 安全检测:插桩可以用于在程序执行期间检测潜在的安全漏洞或恶意行为,如检查输入验证、访问控制等。

  4. 动态修改程序行为:插桩可以用于在程序执行期间动态修改程序的行为,如替换函数调用、修改参数值等,以实现特定的功能或修复bug。

插桩技术在软件开发、测试、分析和安全等领域都有广泛的应用。它提供了一种灵活和强大的手段,可以对程序进行深入的观察和干预,帮助开发人员和研究人员更好地理解和改进软件系统。

对每一个插桩不现实,所以插桩的关键是找准位置插桩,

接下来应该对哪几个地方进行插桩呢?

插桩应该遵循:

先看首尾,再看中间

首位部没有有效信息,再从中间找

首先尝试入口

d81ec2204caf4ec98252f5fd3145424e.png

在这儿插桩发现拿不到什么有效信息 

我们可以hook json.stringify后,进行插桩

b6b1884b36ff4e33a63fae8289951620.png

对apply函数这儿进行插桩,为什么要对apply这儿插桩呢?

因为apply是js中某函数传入某参数的指令。可以看看函数的调用以及函数的传参

可以在传入的参数中寻找有效信息

c218cd49cf6c4f2b9f027c56ca20159d.png 当遇到大量的数据内容的时候要注意观察了,尝试找到数据的出处

看前面的代码发现这些数据没有生成的操作,像是直接提取的,所以这些数据有可能是直接返回的

返回的数据可能藏在哪里呢?

1.cookie

2.html文档中

30e173bd82fc4fdfa8a4ef648534698b.png

不出所料,果然是在cookie当中

建议先提取出被调用的数据,以便后续观察

6dccf831c61043e5bbb9ec54aab2d555.png

看见random可以直接跳过,随机值对我们没用

4f16e7f0825e4f8e9c4b0c8c00fc2f7b.png

插桩分析的过程中要有耐心

发现了此函数调用了我们post请求的数据

885dbfbedd974c40a0c66dc65a876a22.png也是我们的i参数

这也是一个非常重要的信息,看看后续他对这个参数做了怎样的操作?

6293c490cb73474caae29282f88f5041.png

 在这儿我们发现他将参数拼接了起来,但是之后拿不到任何有效信息,所以暂时舍弃此插桩点

d99d349f24f8405f93c933d731453a1c.png

 c4afe8b518f5421f9ac41ca95d006c1d.png

我们发现所有的命令类型的操作都在这个数组里面,我们不妨在这个数组内找找插桩点

275fbc0ddb01472aab55e0df8cf0939a.png

在这个函数中,他进行了文本操作,有加法,这是我吗值得注意的,因为,字符串的拼接需要用到加法,所以我们在此处插桩,因为输出的内容过于庞大,所以我加入了if判断,只输出一部分日志

687387ac728542aebfad9c8c5f13a845.png

发现关键点,现在看看它对这个拼接的字符串做什么操作

继续往下翻,发现了一堆数字,应该是和加密有关的数字,再往下翻得到

dc69c9fa2bc843c7b9c67b6a3a205e2e.png

看看这像MD5吗?16位长度,不妨测试一下

f94b32c5f27f4f73b59cb6f5635f112e.png

果然不出所料,是一个MD5标准算法加密的参数为:

url=/api/sns/web/v1/homefeed{"cursor_score":"","num":35,"refresh_type":1,"note_index":34,"unread_begin_note_id":"","unread_end_note_id":"","unread_note_count":0,"category":"homefeed.psychology_v1","search_key":"","need_num":10,"image_formats":["jpg","webp","avif"],"need_filter_image":false}

 也就是一个上述说的拼接的一个字符串

下面直接对md5的结果进行一个搜索看看后续做了什么操作

a16ca14aac7d47ed9acbf70f77d762b3.png

1e7a480ac2004130aa722196c3cf6945.png

直接选中最后一条得到结果

发现拼接了x1-x4

x1=d60ef0f9033dc85f63cad124cf53605a;

x2=0|0|0|1|0|0|1|0|0|0|1|0|0|0|0;

x3=18d3c0413b3299r5ys308jva95fot1nnuj44025a650000131542;

x4=1714894394066;

我们来依次看看这个值

x1是对拼接的字符串做的md5值

x2是固定字符串

x3是cookie的a1值

x4是时间戳

b1026a8d94f84f2aa68948112b5d0280.png 继续往下翻:

f8befb7e207a47e984d58b2346060129.png

发现它尝试拼接一个类似于b64的字符串

难道是对这个x1-x4的字符串进行b64?

测试一下

aadf9bb5a2b24f0eb89798c948c2cea7.png

1a6050e182ab4755aa44da732fabab87.png测试得,果然是这样!

接下来它难道又会对b64字符串进行操作?

继续往下翻

b923255d6eaf43d795200df0ef907f63.png

出现关键词encrypt,看来是对这个字符串又做了加密

0c396974dbce4cf3aaae524bfb7795eb.png 果然做了加密,但不知道是什么加密,看这个结果应该是个摘要算法,要不先测试一下?

测试失败,长度超过了摘要算法的长度

继续往下翻:

a73749f59e4a45dfae054cd32ab7686e.png

发现是这个payload就是对b64编码的数据进行了加密操作

现在找到加密函数大功就告成了

现在这个插桩位置已经没有什么有价值的东西了,现在换个插桩点

b649f8a2fa88465fa32300e3ba3b5dab.png

在这个大的位运算数组中存放了很多很多细微的函数

现在可以看看,里面这个数组中的函数谁调用的最多?

因为调用的最多的函数更有可能参加整个流程,也就是我们需要插桩的位置

a00d97e9b29f4fdea6bc9a42a045a7ef.png

几乎在数组中的每个函数都有这个函数的运用,我们不妨找到这个函数定义的地方进行一个插桩

3fef57676d11475b9bfbeae9b06ebcb5.png

这个函数虽然就一句话 ,但他的核心功能其实是另外一个函数,所以我们要找到另外一个函数的位置

2353ad8d250c4622927ed27b3862c2a9.png

 在此处插桩,让其输出参数,为什么不输入这个函数?,输出函数的话就反复出现一个函数没用。所以就输出参数

1f9a8401dbb74d37add8ddf13530ab55.png

 通过观察可得,这四个参数最有用的就是_ace_7e97a这个参数

所以再次改插桩代码,只输出_ace_7e97a参数

由于输出日志过大(超过100w条了)、

所以加个条件判断限制输入

67dbe6ad2eff4c2a834cf42e42232148.png

74fa10f7ee7848c6af6f597b18d28532.png

一直翻日志:发现这里将b64编码结果完成

下一步就是encrypt步骤

a10c105069aa494b83e5ca09bb3b1296.png

这一大串数字都是算法的核心,我们可以百度一下看看是什么算法

注意 直接百度可能百度不到,要将此数字从10进制转换成16进制

f9a694e8073645fa82541b16e8c13198.png

显而易见,是一个DES算法,现在要找到这个加密的key

key一般是32位和64位或者这个倍数

cbb42b093e774165949f6a072c1a901e.png

秘钥是这个

key找到了,加密算法也找到了。逆向到此结束

4.模拟请求发送

0eb5a7653b5a45d286925feea335ce66.png

测试成功 逆向完成

5.最后我讲xhs的各个功能进行了相应的编写欢迎咨询

by the way --xhs几乎所有的加密我都已完成逆向 有需要欢迎咨询(JS+PY)

07fb4f1eea2c4e17a9b96f0e8753d068.jpeg

需要源码+我VX

ccc4bfd8d45f44538c55f9c5f8d32f7e.jpeg

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值