某量JS逆向

https://chat.sensetime.com/wb/chat

目录

一、发起请求

二、观察发现只有入参 __data__ 进行了加密,返回是明文

三、 观察JS调用栈

四、从JS中搜索 __data__

五、使用XHR对Ajax请求进行断点

六、再次发起请求就会断点拦住请求

七、对XHR入口分析

八、逐个栈断点进行查看,还是没有发现可疑之处​编辑

九、 重新刷新页面,从JS中搜索__data__进行分析

十、对可疑之处全部打上断点 

十一 、溯源加密函数

十二、再次追踪 

十三、再再次追踪 

十四、整体链路追踪 

​十五、模拟请求


 

一、发起请求

二、观察发现只有入参 __data__ 进行了加密,返回是明文

三、 观察JS调用栈

四、从JS中搜索 __data__

发现一个像样的都没有

五、使用XHR对Ajax请求进行断点

六、再次发起请求就会断点拦住请求

 

七、对XHR入口分析

 八、逐个栈断点进行查看,还是没有发现可疑之处

九、 重新刷新页面,从JS中搜索__data__进行分析

重新请求断点并没有断住,往下看,发现类似的疑点有很多处,接下来我们只好把每一处都打上断点 

十、对可疑之处全部打上断点 

再次发起请求,断点到encrypt函数处。因为是反向追踪,每次必须重新请求,确保调用的数据链是正确的。

这里要记住这个入参的大致形式,咱们要追踪的正是这个入参,是怎么换算成了密文的。 

十一 、溯源加密函数

十二、再次追踪 

再次发起请求,断点到encrypt函数处。因为是反向追踪,每次必须重新请求,确保调用的数据链是正确的。

 

十三、再再次追踪 

再次发起请求,断点到encrypt函数处。因为是反向追踪,每次必须重新请求,确保调用的数据链是正确的。

断点放过第一次

断点放过第二次 

断点放过第三次  

断点放过第四次  .....

一直没有找到符合预期的参数链

此时我们发现,network栏一直有接口调用,每次都经过上面断点的函数,导致我即使一直放行,也都无法等到想要的参数链的到来。

十四、整体链路追踪 

此时我们只好重新发起请求,对刚刚每一步的追踪都打上断点,然后逐次放行下来,让参数链第一时间断点

 

 

 

 

function t(e) {var t = (e = btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g, (function (e, t) {return String.fromCharCode(parseInt("0x" + t))})))).length / 2;e.length % 2 !== 0 && (t = e.length / 2 + 1);for (var n = "", r = 0; r < t; r++)n += e[r] + e[t + r];return n
}const e = {"action":"next","session_id":"c6bfb1e6-c772-4e3c-aabe-1ec3b70efe35","send_msg":[{"msg_type":"user_query","user_query":"你好呀"}],"channel":"chat-web","client_chan":"chatOnCom","parent_id":"3a696901-51e9-47d6-956d-f3b9d520f275","file_ids":[]}
let a = t(JSON.stringify(e));
console.log(a)

 十五、模拟请求

import jsonimport execjs
import requestsjs_code = """
function t(e) {var t = (e = btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g, (function (e, t) {return String.fromCharCode(parseInt("0x" + t))})))).length / 2;e.length % 2 !== 0 && (t = e.length / 2 + 1);for (var n = "", r = 0; r < t; r++)n += e[r] + e[t + r];return n
}function get__data__(message) {const e = {"action": "next","session_id": "","send_msg": [{"msg_type": "user_query", "user_query": message}],"channel": "chat-web","client_chan": "chatOnCom","parent_id": "0","file_ids": []}return t(JSON.stringify(e))
}
"""
# 编译JavaScript代码
ctx = execjs.compile(js_code)# 执行JavaScript代码并获取参数加密结果
result = ctx.call("get__data__", "你知道詹姆斯在NBA多少年了吗")url = "https://chat.sensetime.com/api/richmodal/v1.0.2/chat"payload = {"__data__": result}
headers = {'authorization': 'Bearer 你的TOKEN','debug': 'undefined','priority': 'u=1, i','system-type': 'web','version-code': '','x-request-id': 'eb9eeb23-6db5-439a-9b48-531d9de87b2c','Cookie': 'UM_distinctid=190e93d52b8520-0bcaa0440d727f-26001f51-1fa400-190e93d52b9a8f; CNZZDATA1281349177=866722293-1721900029-https%253A%252F%252Fgithub.com%252F%7C17219100029','User-Agent': 'Apifox/1.0.0 (https://apifox.com)','content-type': 'application/json;charset=UTF-8'
}response = requests.request("POST", url, headers=headers, data=json.dumps(payload))# 直接输出text中文乱码了
# print(response.text)
# 这里进行主动解码一下
print(response.content.decode('utf-8'))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】选择结构- 嵌套if语句

嵌套if语句的语法格式&#xff1a; if(条件1) { if(条件1满足后判断是否满足此条件) {条件2满足后执行的操作} else {条件2不满足执行的操作} } 下面是一个实例 #include<iostream> using namespace std;int main4() {/*提示用户输入一个高考分数&#xff0c;根据分…

学习C语言第12天(数组练习)

1.走台阶问题 设一个函数fit(n)是求n阶台阶有几种走法 第一步迈1个台阶 那有fit(n-1)种走法 第一步迈连个台阶 有fit(n-2)种走法 所以n阶台阶一共有fit(n-1)fit(n-2)种走法 斐波那契数列int fit(int n) {if (n < 2)return n;elsereturn fit(n - 1) fit(n - 2); } in…

花几千上万学习Java,真没必要!(二十九)

1、基本数据类型包装类&#xff1a; 测试代码1&#xff1a; package apitest.com; //使用Integer类的不同方法处理整数。 //将字符串转换为整数&#xff08;parseInt&#xff09;和Integer对象&#xff08;valueOf&#xff09;&#xff0c; //将整数转换回字符串&#xff08;…

LeetCode19 删除链表的倒数第N个结点

前言 题目&#xff1a; 19. 删除链表的倒数第N个结点 文档&#xff1a; 代码随想录——删除链表的倒数第N个结点 编程语言&#xff1a; C 解题状态&#xff1a; 成功解答&#xff01; 思路 最直接的想法就是先获取到链表的整体长度&#xff0c;减去倒数的个数&#xff0c;正向…

【计算机网络】DNS命令练习与抓包分析实验

一&#xff1a;实验目的 1&#xff1a;掌握DNS缓存的清除方法&#xff0c;了解DNS缓存的作用和影响。 2&#xff1a;熟悉nslookup和dig等DNS查询工具的使用&#xff0c;理解DNS查询的基本原理和过程。 3&#xff1a;通过抓包和分析&#xff0c;深入了解DNS查询和响应消息的格…

html+css 实现悬浮按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

Python+Flask+MySQL+日线指数与情感指数预测的股票信息查询系统【附源码,运行简单】

PythonFlaskMySQL日线指数与情感指数预测的股票信息查询系统【附源码&#xff0c;运行简单】 总览 1、《股票信息查询系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 程序主页面2.3 个人中心界面2.4 基金详情界面2.5 其他功能贴图 3、下载 总览 自己做的项…

pytorch 源码阅读(3)——torch.fx

0 概述 FX 是一个供开发者用来转换 nn.Module 实例的工具包。FX 包含三个主要组件&#xff1a;符号跟踪器&#xff08;symbolic_traced&#xff09;、中间表示&#xff08;intermediate representation&#xff0c;IR&#xff09;和Python 代码生成&#xff08;Code generatio…

【iOS】——属性关键字

属性关键字的类型 在iOS中属性关键字分为四种类型&#xff1a; 可访问性: readonly ,readwrite原子性 &#xff1a; atomic &#xff0c;nonatomic内存管理 &#xff1a; retain/strong/copy&#xff0c; assign/unsafe_unretained&#xff0c;weak方法命名&#xff1a;sette…

W3C XML Schema 活动

关于《W3C XML Schema 活动》的信息&#xff0c;我找到了一些相关资料。XML Schema 是一种基于 XML 的DTD&#xff08;文档类型定义&#xff09;替代物&#xff0c;它提供了对应用程序、文档结构、属性和数据类型的更好支持。XML 1.0 版本支持可定义文档结构的DTD&#xff0c;而…

Linux 动静态库

一、动静态库 1、库的理解 库其实是给我们提供方法的实现&#xff0c;如上面的对于printf函数的实现就是在库中实现的&#xff0c;而这个库也就是c标准库&#xff0c;本质也是文件&#xff0c;也有对应的路径 2、区别 静态库是指编译链接时&#xff0c;把库文件的代码全部加入…

前端canvas——赛贝尔曲线

曲线之美&#xff0c;不在于曲线本身&#xff0c;而在于用的人。 所以就有了这期赛贝尔曲线。 新规矩&#xff0c;先上个GIT。 效果图 开局一张图&#xff0c;代码全靠编。 代码 画骨 先想着怎么画一个心形吧&#xff0c;等你想好了&#xff0c;就知道怎么画了。 首先就还…

ES(Elasticsearch)常用的函数有哪些?

【电子书大全】内含上千本顶级编程书籍&#xff0c;是程序员必备的电子书资源包&#xff0c;并且会不断地更新&#xff0c;助你在编程的道路上更上一层楼&#xff01; 链接: https://pan.baidu.com/s/1yhPJ9LmS_z5TdgIgxs9NvQ?pwdyyds > 提取码: yyds Elasticsearch&#x…

Cyberchef基础概念之-循环语句操作-Jump/Label

在本专栏的前面的文章介绍了fork,merge,subsection,register等多种概念来解决实际场景的问题。本文将介绍的Jump/Label的操作类似于编程语言中的for和while的功能&#xff0c;相信在学会使用jump操作后&#xff0c;将有助于解决更为复杂的数据处理问题。 本文将详细的介绍该操…

Matplotlib : Python 的绘图库

Matplotlib 是一个 Python 的绘图库&#xff0c;广泛用于生成各种静态、动态、交互式的图表。它基于 NumPy&#xff0c;一个用于科学计算的 Python 库。Matplotlib 可以用于生成出版质量级别的图表&#xff0c;并且提供了丰富的定制选项&#xff0c;以适应不同用户的需求。以下…

linux对标画图板的软件

而不是对标photoshop sudo apt-get install kolourpaint

渗透测试 - 攻击思路与手段、工具分享

导语&#xff1a; 我在CSDN活跃已有6年&#xff0c;这是国内最优秀的IT学习平台之一。尽管有人对其持批评态度&#xff0c;我个人认为它拥有独特的优势。 最近我参加了一场网络安全工作的面试&#xff0c;在广州与面试官深入交流了半个多小时。尽管未能通过面试&#xff0c;但这…

每日OJ_力扣+牛客_另类加法_不用加号的加法

目录 力扣面试题 17.01. 不用加号的加法 解析代码 牛客另类加法 解析代码 力扣面试题 17.01. 不用加号的加法 面试题 17.01. 不用加号的加法 设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2提示&#xff1a; a, b 均可能…

心跳机制详解

1、什么是心跳机制&#xff1f; 心跳机制出现在TCP长连接中&#xff0c;客户端和服务端之间定时发送一种特殊的数据包通知对方还在线&#xff0c;以确保TCP连接地可靠性&#xff0c;有可能TCP连接由于某些原因&#xff08;例如网线被拔了&#xff0c;突然断电&#xff09;导致…

iOS中的KVO(Key-Value Observing)详解

iOS中的KVO&#xff08;Key-Value Observing&#xff09;详解 一、KVO概述 KVO&#xff08;Key-Value Observing&#xff09;&#xff0c;即键值观察/监听&#xff0c;是苹果提供的一套事件通知机制。它允许一个对象&#xff08;观察者&#xff09;观察/监听另一个对象&#…