xhs列表页全流程解析

经过重放攻击调试,需要自己找的参数如下

from中参数:cursor_score、prefetch_id

headers中参数:x-s、cookie中a1参数、

import requests

url = "https://🐕.com/api/sns/web/v1/homefeed"

payload = "{\"cursor_score\":\"1.701248256973002E9\",\"num\":27,\"refresh_type\":3,\"note_index\":62,\"unread_begin_note_id\":\"\",\"unread_end_note_id\":\"\",\"unread_note_count\":0,\"category\":\"homefeed_recommend\",\"search_key\":\"\",\"need_num\":7,\"image_scenes\":[\"FD_PRV_WEBP\",\"FD_WM_WEBP\"],\"prefetch_id\":\"1eb569d1-eb74-4010-a01d-cce7c9e60583\"}"
headers = {
  'cookie': 'abRequestId=5f4e41a6-0f86-52bc-8633-6a3bb6cf7000; a1=18bf685b42drkjdhudc83nl9n9rmwlo7qkhup6kj450000418793; webId=8b44ae7e78ac0c840ea3d183fd7993d8; web_session=030037a26e801c447c83259225224aaaf7f312; gid=yYDiKY2S8KAWyYDiKY2D4TKTJfFTVfx7fSYqxV4I1jIjF7286E1lWU8884yYWjq8W0qKjYD0; xsecappid=xhs-pc-web; cacheId=1eb569d1-eb74-4010-a01d-cce7c9e60583; webBuild=3.17.6; websectiga=59d3ef1e60c4aa37a7df3c23467bd46d7f1da0b1918cf335ee7f2e9e52ac04cf; sec_poison_id=c832dde1-9b21-4f6b-9141-01dddc8fcafb; unread={%22ub%22:%2265498e13000000002201cee5%22%2C%22ue%22:%226551fc70000000001701c91f%22%2C%22uc%22:24}; abRequestId=a03ce2d2-abf5-537a-9540-67ade5a4835c',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
  'x-s': "XYW_eyJzaWduU3ZuIjoiNTEiLCJzaWduVHlwZSI6IngxIiwiYXBwSWQiOiJ4aHMtcGMtd2ViIiwic2lnblZlcnNpb24iOiIxIiwicGF5bG9hZCI6ImE2MmRlODY4NTY2MGI0ZDFhZTJhZTVlMDk1MmQwMTAyMWM1NWRmMTJmMmUwNjBlNjZlNGQ0MjM2YTNmMGVjYWRmMDM5ZjEyYmFiNGRhMjQ2ZDdmNDQyMWI5MmI2MGVmOWM5ZTNiZmRhMWZhYTFlYjkwZDc0YWEzMWI1NGM3MmNkMGQ3NGFhMzFiNTRjNzJjZGFjNDg5YjlkYThjZTVlNDhmNGFmYjlhY2ZjM2VhMjZmZTBiMjY2YTZiNGNjM2NiNTc5ZGUzNmFkY2I0YTA2MmVlZjY1ZTMzMTcwMWNmOTRjNjM4ZmVhNWY1NmE3NDY2OWVhMzZjZjkxYjRhZTJkZGIxOTQ5ZDgyMTE2YmRmMmVjODJiMmRhM2I1ZjY5NTM3NDcwMDRlNTUyNjM3OTRjNmNiMzdjNGM1YTU4YjA4OGFhNGYyYjZkNWRlNjM0NTUwMjc0ZWI0NGQzZmE0ZDlhOTQwYWE4OWIwMWQ0ZTU1NmZjZWFiOTllZWZmMmRlODZhZCJ9",
  'Content-Type': 'text/plain'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

from中参数来源生成

首页请求返回prefetch_id参数,将prefetch_id拼接到'https://www.🐕.com/explore/prefetch?prefetch_id=prefetch_id',需要注意带着cookie(随便带一个就行)

import requests

url = "https://www.🐕.com/explore"

payload = {}
headers = {

  'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  'accept-language': 'zh-CN,zh;q=0.9',
  'cache-control': 'no-cache',
  'cookie': 'abRequestId=5f4e41a6-0f86-52bc-8633-6a3bb6cf7000; a1=18bf685b42drkjdhudc83nl9n9rmwlo7qkhup6kj450000418793; webId=8b44ae7e78ac0c840ea3d183fd7993d8; web_session=030037a26e801c447c83259225224aaaf7f312; gid=yYDiKY2S8KAWyYDiKY2D4TKTJfFTVfx7fSYqxV4I1jIjF7286E1lWU8884yYWjq8W0qKjYD0; xsecappid=xhs-pc-web; webBuild=3.16.5; websectiga=10f9a40ba454a07755a08f27ef8194c53637eba4551cf9751c009d9afb564467; sec_poison_id=63f4d60a-2ef0-406b-9878-d46f8e18e81f; abRequestId=a03ce2d2-abf5-537a-9540-67ade5a4835c; cacheId=f4c0aab8-bb9d-40a2-95ae-3e50c3e038a9',
  'pragma': 'no-cache',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

      

import requests

url = "https://www.狗头.com/explore/prefetch?prefetch_id=dae1069b-a390-4896-b719-597912662bf4"

payload = {}
headers = {
 
  'accept': 'application/json, text/plain, */*',
  'accept-language': 'zh-CN,zh;q=0.9',
  'cache-control': 'no-cache',
  'cookie': 'abRequestId=5f4e41a6-0f86-52bc-8633-6a3bb6cf7000; a1=18bf685b42drkjdhudc83nl9n9rmwlo7qkhup6kj450000418793; webId=8b44ae7e78ac0c840ea3d183fd7993d8; web_session=030037a26e801c447c83259225224aaaf7f312; gid=yYDiKY2S8KAWyYDiKY2D4TKTJfFTVfx7fSYqxV4I1jIjF7286E1lWU8884yYWjq8W0qKjYD0; xsecappid=xhs-pc-web; cache_feeds=[]; webBuild=3.17.6; websectiga=16f444b9ff5e3d7e258b5f7674489196303a0b160e16647c6c2b4dcb609f4134; sec_poison_id=6048f63e-6b51-45a3-af20-392476db824d; unread={%22ub%22:%2265544ba3000000003203aa4b%22%2C%22ue%22:%22655440ed000000003103d5c6%22%2C%22uc%22:30}; cacheId=5bb78b0c-b760-4c6b-a2e4-387c942b259a; abRequestId=a03ce2d2-abf5-537a-9540-67ade5a4835c',
  'pragma': 'no-cache',
  'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
  'sec-ch-ua-mobile': '?0',
  'sec-ch-ua-platform': '"Windows"',
  'sec-fetch-dest': 'empty',
  'sec-fetch-mode': 'cors',
  'sec-fetch-site': 'same-origin',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
  'x-b3-traceid': '73c978b780b97392',
  # 'x-s': 'XYW_eyJzaWduU3ZuIjoiNTEiLCJzaWduVHlwZSI6IngxIiwiYXBwSWQiOiJ4aHMtcGMtd2ViIiwic2lnblZlcnNpb24iOiIxIiwicGF5bG9hZCI6ImM1NWQ3MjZmMmMyZDIwYjA5NzU4YjZjYmJiOTY0ZTVlMjRlNDBlNWQ2MGM3MDQzOGJmMWVkNzFjMDlmMjNmMjBiMTJkMTVjZWUxMDExMTAyNmQ0MWUwZTA4NjY2Nzc3YmM5ZTNiZmRhMWZhYTFlYjkwZDc0YWEzMWI1NGM3MmNkMGQ3NGFhMzFiNTRjNzJjZGFjNDg5YjlkYThjZTVlNDhmNGFmYjlhY2ZjM2VhMjZmZTBiMjY2YTZiNGNjM2NiNTc5ZGUzNmFkY2I0YTA2MmVlZjY1ZTMzMTcwMWNmOTRjNjM4ZmVhNWY1NmE3NDY2OWVhMzZjZjkxYjRhZTJkZGIxOTQ5ZDgyMTE2YmRmMmVjODJiMmRhM2I1ZjY5NTM3NDcwMDRlNTUyNjM3OTRjNmNiMzdjNGM1YTU4YjA4OGFhNGYyYjZkNWRlNjM0NTUwMjc0ZWI0NGQzZmE0ZDlhOTQzMjBiMDA2YmIxZGNhZmU0Y2I1OTA2ZWRhNWM4OGU0NiJ9',
  'x-t': '1701250156954'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

 直接把生成的链接放入浏览器即可获取内容

逆向完成!

还有headers参数啊?

那是付费内容嘿嘿嘿......

开玩笑的了

直接开逆

 随便打个断点,调试堆栈,就能找到加密点

l后面那一坨就是加密参数生成的地方

追进去看看

一眼混淆,隐隐觉得不妙

随便跟了几步全是数值操作

恶心至极

直接把所有代码copy到本地补环境

意料之中运行报错

在网上有很多补环境的方法,有的是一步步添加缺失的地方,有的是用Proxy代理

我研究之后发现都玩不转

这里介绍一种无脑的方法

jsdom

直接放到代码顶端就有参数

参数虽然生成了,但是长度跟浏览器生成不一样,也不能用

怀疑是本地node环境检测

放到浏览器中运行下试试

浏览器跟本地一样都不能用,看来肯定是有别的操作

加密字符看起来像b64,拿去试试

果然解出来了,看起来只有payload是未知的,我们只要找到payload是怎么生成的,并还原就行了。

进入加密代码,没有找到任何有价值的东西,只找到后加密参数返回的地方

只找到这儿就先把所有输出打印一下,看看都有什么        

打印没有任何有价值的东西,这里陷入了僵局,翻阅大佬文档,需要在这里挂个代理hook。

_ace_dcca5 = new Proxy(_ace_dcca5,{
    get: function(target, prop) {
        return target[prop];
        // 返回属性的值
    },
    set: function(target, prop, value) {
        // debugger; // 在这里设置断点或执行自定义逻辑
        target[prop] = value;
        // 设置属性的值
        try {
            if (value['_ace_4de55'] && value['_ace_4de55'].startsWith("XYW")) {
                debugger ;
            }
        } catch (error) {
        }
        return true;
    }
});

这里直接hook上了,分析看看。

一步步往上跟

跟到顶加密值是_ace_66这个参数传入的

hook一下这个值试试

这里有一个小细节,只有_ace_66的值为图上这种值时才能hook上,具体原理不知道,有知道的大佬可以告诉我。

hook到这儿,突然发现打印出来加密b64之前的参数了,我们找的也是这个参数,现在这个栈也没必要分析了。

又到这儿了,没法分析了 

可以肯定的是_ace_dcca5这个列表中的对象在经过一系列操作后,得到payload的值

hook一下_ace_936更好,但是这个参数不是全局变量,没法hook,只能hook这个列表中的参数

_ace_dcca5 = new Proxy(_ace_dcca5,{
    get: function(target, prop) {
        return target[prop];
        // 返回属性的值
    },
    set: function(target, prop, value) {
        // debugger; // 在这里设置断点或执行自定义逻辑
        target[prop] = value;
        // 设置属性的值
		
        try {
            if (value['_ace_936']['stackOutput'] && value['_ace_936']['stackOutput'].startsWith("77d")) {
                debugger ;
            }
        } catch (error) { 
        }
        return true;
    }
});

最后跟栈又到这儿了,直接全部打印一边看看都是什么吧

很长,可以存到本地分析

分析过程中发现,代码中的每一步都经过这儿,每一个字符的打印都是在这儿,所以payload参数内容一定就在生成之前上一步。

到这儿就找到了,对找到的参数b64加密看看是什么

直接打印不行,hook一下

这样加密参数就出来了,接下来只要分别找到x1,x2,x3,x4是什么就行了

其实一眼就能看出来,x3就是cookie中的a1,x4是时间戳,只要把x1,x2还原就行了

只要耐心点就能找到x1就是这个值的MD5加密

x2写死就行了

其实可以直接hook打印_ace_66的值更直观简单,但是正常思路是分析不到这个值的。

本地和浏览器不一样的值,在某个所有经过的地方捕获并修改值就行了

参考链接https://blog.csdn.net/qq_41866988/article/details/132058203

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
unidbg是一个针对Android系统的动态二进制分析工具,它能够模拟和分析Android应用程序的执行过程。该工具利用了QEMU和Unicorn模拟器的特性,通过对虚拟机进行操控,实现对Android应用程序的脱壳、动态调试、动态修改等功能。 与传统的静态分析工具相比,unidbg具有很多优势。首先,unidbg采用动态分析的方式进行分析,能够绕过代码的混淆和加密,对于那些使用加密算法进行保护的应用程序也能有效地进行分析。其次,unidbg不需要对应用程序进行重新编译,能够直接加载原始二进制文件进行执行,节省了分析时间和资源。此外,unidbg可以模拟各种硬件平台和系统版本,方便进行兼容性和兼容性测试。 而xhs指的是小红书应用,是一款流行的社交媒体应用程序,用户可以在其中分享生活中的照片、美食、旅行等内容,并与其他用户进行互动和交流。 结合上述两个概念,如果要使用unidbg分析小红书应用(xhs),可以通过以下步骤进行: 1. 在模拟器或真机环境中安装unidbg工具,并准备好相应的系统库和插件。 2. 将小红书应用程序的安装包导入到模拟器或真机环境中。 3. 使用unidbg命令行工具或API,加载小红书应用程序的二进制文件,并开始动态分析。 4. 在动态分析过程中,可以对小红书应用程序进行脱壳、hook函数、修改数据等操作,以获取目标应用程序的内部逻辑和敏感数据。 5. 通过观察和分析unidbg的执行日志,可以获取关键信息,如函数调用堆栈、内存读写等,进一步研究和理解小红书应用程序的工作原理。 综上所述,unidbg工具可以作为一种有效的动态分析工具,用于分析小红书应用程序和其他Android应用程序的执行过程,帮助开发者进行bug修复、反编译分析、代码优化和安评估等工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值