京东h5st4.7逆向分析

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联系作者立即删除!

前言

最近某东也是在不断的维护升级 h5st 参数, 原因就是逐渐 VMP 化,现在已经到了 4.7 版本了,也相对稳定下来了,那我们就来分析分析。

逆向目标

目标:某东 h5st 4.7 参数逆向分析

网站:aHR0cHM6Ly93d3cuamQuY29tLw==

流程分析

我们先抓包分析一下,随便找个有 h5st 参数的接口,我们可以直接看到它的版本:

还有个 x-api-eid-token 这是一个风控参数,生成位置如下:

也是接口返回,a,d 参数由大量的浏览器环境以及指纹信息生成,这边就不具体分析了,可以先写死,我们具体来看看 h5st 参数。

逆向分析

定位 h5st 参数的生成,可以直接通过搜索大法,或者找堆栈都能快速定位到生成的位置:

跟栈进去:

可以发现他将 colorParamSign 传入 window.PSign.sign 这个异步函数,返回的结果就有了 h5st 参数:

取了前面的查询参数,然后 colorParamSign 的 body 就是将前面查询参数的 body 经过 SHA256 加密,测试没有魔改,我们直接套库就行。

点击进入 window.PSign.sign 函数中就到了 VMP 文件了, 也是主要的加密文件:

仔细观察一下,发现他将加密的主要流程,以及加密的函数大部分 VMP 化了,不过却留下不少的特征点:

  • 方法一:

我们可以在所有的 vmp 操作的 call 的位置打上日志断点,进行分析,不过日志点比较多,不太推荐。

  • 方法二:

根据留下的特征点,在关键的加密函数的位置上,断点分析,既能看到传入的明文,也能看到加密后的密文,能节省不少时间。我们搜索一下一些常见的加密函数 CryptoJS, AES,SHA, Base64 等等。

能找到差不多有 10 处左右进行加密,编码操作的函数,都写在一起,而且格式,特征都基本一致:

传入一个对象,来接收导出的加密函数:

可以发现里面还有标准的 ob 模式的混淆,主要导出的加密函数就是 o 函数,初始直接将 o 函数的返回值,赋值给 HS 对象,后续就传入 HS 对象到 o 函数再进行导出,所以 HS 对象应该包含所有的加密函数。

我们可以输出看看,找到如下位置断下,这里就是最后拼接生成 h5st 的位置:

然后 输出 HS 对象:

点击对应的加密函数,下断点,这样就能精准的知道是如何进行操作的(其实可以都打上断点)我这边求方便就只打下面这几个关键断点了:

  • AES

  • 哈希

  • Base64:

我们重新请求后,就在 AES 这断下了:

这里的 n, a 应该就是 key,iv ,可能有人看不懂,没事我们可以转换一下:

const CryptoJS = require('crypto-js');
var Bytes ={words: [1598895705, 1063548518, 1312043094, 1296456536],sigBytes: 16
};
var key = CryptoJS.enc.Utf8.stringify(Bytes);
console.log(key);
var Bytes = CryptoJS.enc.Utf8.parse(key);
console.log(Bytes);

测试一下,发现 AES 跟标准的 AES 结果不一致,可能是魔改了什么东西,问题不大,我们继续往下走;

将 AES 加密的结果进行 Base64 编码(也是魔改了的),我们可以在 return 的地方断下来:

继续往下走:

我们向上找一下堆栈,进到 test 可以很明显的发现是如何进行操作的:

然后找了一下这个 test 是怎么来的,发现是 request_algo 接口 返回,注意 rd 和加密的函数都是动态的

唯一要具体分析的就是 expandParams,这个也是走的上面魔改的 AES 加密生成,key 值不一样,明文主要就是一些环境值,可以先固定,这里就不具体分析了。

我们再来输出一下加密后的值,以防后续调用:

然后继续走,就断到这里了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

'5571a8dda12c510ad1922b90d6b048aba648d9a8c2fc679927fc1e7102520489appid:search-pc-java&body:64ef977e15f853295527f3ce1f15fc980963c43f27c40066d26dd19b542d0bd4&client:pc&clientVersion:1.0.0&functionId:pc_search_s_new&t:17152462710115571a8dda12c510ad1922b90d6b048aba648d9a8c2fc679927fc1e7102520489'
  • 加密结果为:
626bad7f7ebe126bb799ac619409778c8808864ad364bcb3d6a42bfb14af47b7

仔细观察明文其实就是 上面 test 函数生成的加密结果 + colorParamSign 的拼接 + test 函数生成的加密结果。

不过我们不知道他走的是哪个加密函数,我们可以通过 HS 对象下的加密函数来一一确认,也可以在其他的加密函数上打上断点,可能有的大佬可以直接秒,哈哈,已经确认走的是 SHA256 加密函数:

继续往下走就来到了最后拼接生成 h5st 参数的位置:

  • e:就是上面 SHA256 加密函数生成的;
  • t : 是时间戳;
  • r :由 t 转换生成。
function format() {var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Date.now(), t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "yyyy-MM-dd", r = new Date(e), n = t, a = {"M+": r.getMonth() + 1,"d+": r.getDate(),"D+": r.getDate(),"h+": r.getHours(),"H+": r.getHours(),"m+": r.getMinutes(),"s+": r.getSeconds(),"w+": r.getDay(),"q+": Math.floor((r.getMonth() + 3) / 3),"S+": r.getMilliseconds()};return /(y+)/i.test(n) && (n = n.replace(RegExp.$1, "".concat(r.getFullYear()).substr(4 - RegExp.$1.length))),w_(a).forEach((function(e) {if (new RegExp("(".concat(e, ")")).test(n)) {var t, r = "S+" === e ? "000" : "00";n = n.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : j_(t = "".concat(r)).call(t, a[e]).substr("".concat(a[e]).length))}})),n
};console.log(format(1715246309293, "yyyyMMddhhmmssSSS"))  // 20240509171829293
  • n:就是上面第一次 AES 加密进行魔改 Base64 编码后的结果;
  • _fingerprint:可以先写死,算法生成;
  • _appid:也可以先写死,页面里获取;
  • _token:request_algo 接口返回。

h5st 参数的生成都分析完,现在就差 HS 对象下的加密函数如何获取:

看似复杂,还有 ob 混淆等等,其实直接正常扣就行了,缺啥补啥,ob 混淆其实都没必要还原,手动扣就行,混淆的地方不多,大概有 10 处这样的函数,结构都一致:

扣完后,输出 HS 对象,就可以直接调用里面的加密函数,注意要校验和浏览器加密的结果一致:

结果验证

注意:正确的 h5st 不会出现 <Response [403]> 的情况,100% 可以拿到数据:

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

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

相关文章

MQTT 5.0 报文解析 04:PINGREQ 与 PINGRESP

欢迎阅读 MQTT 5.0 报文系列 的第四篇文章。在上一篇中&#xff0c;我们已经介绍了 MQTT 5.0 中的 SUBSCRIBE 报文和 UNSUBSCRIBE 报文。现在&#xff0c;我们将介绍用于维持连接的控制报文&#xff1a;PINGREQ 和 PINGRESP。 除了用于连接、发布和订阅的控制报文&#xff0c;…

WebSocket建立网络连接——小案例

WebSocket是一种实现全双工通信的网络技术标准&#xff0c;它允许在用户的浏览器和服务器之间进行持久的、双向的通信。以下是对WebSocket的具体介绍&#xff1a; 实时性&#xff1a;与传统HTTP请求相比&#xff0c;WebSocket提供了更高效的实时数据交换方式。一旦建立连接&am…

数字序列比大小 - 贪心思维

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布自己的解题思路&#xff0c;希望大家多指教 一、题目描述 A&#xff0c;B两个人万一个数字的游戏&#xff0c;在游戏前…

Python 求高斯误差函数 erf 和 erfc

文章目录 Part.I IntroductionPart.II 概念定义Chap.I 误差函数 erfChap.II 误差函数补 erfc Part.II 求值与绘图Chap.I 求取方式Chap.II 绘图 Reference Part.I Introduction 本文将对误差函数&#xff08;ERror Function, ERF&#xff09;进行简单的介绍&#xff0c;并探索如…

内网安全-隧道技术SSHDNSICMPSMB上线通讯LinuxMac 简单总结

第126天&#xff1a;内网安全-隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac_内网安全-隧道技术_ssh_dns_icmp_smb_上线通讯linux_mac-CSDN博客 内网渗透—隧道技术_隧道技术csdn-CSDN博客 #SMB 隧道&通讯&上线 判断&#xff1a;445 通讯 上…

优秀博士学位论文分享:面向数据流模型的代码生成技术研究

优秀博士学位论文代表了各学科领域博士研究生研究成果的最高水平&#xff0c;本公众号近期将推出“优秀博士学位论文分享”系列文章&#xff0c;对人工智能领域2023年优秀博士学位论文进行介绍和分享&#xff0c;方便广大读者了解人工智能领域最前沿的研究进展。 “博士学位论…

五子棋对战(网页版)

目录 一、项目背景 用户模块 匹配模块 对战模块 二、核心技术 三、相关知识 WebSocket 原理 报文格式 代码 服务器代码 客户端代码 四、项目创建 4.1、实现用户模块 编写数据库代码 数据库设计 配置MyBatis 创建实体类 创建UserMapper 创建UserMapper接口 实现UserMapper.xml 前…

工作太闲,平常有没有用手机能赚钱的,这里我推荐了4种可月入2000的副业

确实有许多通过手机赚钱的方式&#xff0c;以下是一些常见的方法 1.拍照卖图 如果你有一台相机或智能手机&#xff0c;喜欢拍照&#xff0c;那么可以将自己拍摄的图片上传到网站上&#xff0c;赚取稿费。 2. 做问卷调查 许多公司需要了解消费者的意见&#xff0c;所以会通过…

C语言学习(十)结构体

目录 一、结构体类型定义二、结构体变量的定义三、结构体变量赋值1. 定义结构体变量的同时进行赋值2. 定义结构体类型的同时定义变量并进行赋值3. 在定义结构体变量时对指定成员进行赋值4. 在定义完结构体变量后&#xff0c;通过.进行赋值 四、结构体成员访问五、结构体内部指针…

zabbix基础

监控系统基本介绍&#xff1a; 企业级应用中&#xff0c;服务器数量众多&#xff0c;一般情况下需要维护人员进行长时间对服务器体系、计算机或其他网络设备&#xff08;包括硬件和软件&#xff09;进行长时间进行性能跟踪&#xff0c;保证正常稳定安全的运行&#xff0c;于是…

Vue从入门到实战Day05

一、自定义指令 自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能 需求&#xff1a;当页面加载时&#xff0c;让元素将获得焦点 (autofocus在safari浏览器有兼容性) 操作dom&#xff1a;dom元素.focus() mounted() {this.$ref…

3W 3KVAC隔离 宽电压输入 AC/DC 电源模块——TP03AC 系列

TP03AC系列电源模块额定输出功率为3W&#xff0c;此系列产品输入电压范围宽&#xff0c;可以交直流两用。并具备高可靠性、高精度、更安全、更稳定&#xff0c;大功率密度&#xff0c;超小体积&#xff0c;无需外加散热器&#xff0c;输出电压稳定等特点&#xff0c;且均集成有…