某东-h5st参数逆向分析

news2024/11/13 10:56:41

目标:商品搜索翻页接口
直接搜索h5st就可以搜到,所有可疑位置都打上断点,然后翻页,最终断点位置:
在这里插入图片描述
window.PSign.sign(colorParamSign)是异步代码,colorParamSign是传入的参数,执行后把包含h5st的结果signedParams传递给了回调。
首先分析一下参数colorParamSign
在这里插入图片描述
也就一个body看着像加密的,并且上面就能看到赋值位置。明文如下图,传入了一个SHA256的函数加密
在这里插入图片描述
这都把饭喂到嘴边了,没道理吃不下,先不用去研究这个函数,直接拿着明文去试一下sha256加密的结果是否一致,不一致再去看加密函数。
加密结果如下:
在这里插入图片描述
跟网站结果一致,确实是用了标准的sha256加密,东哥诚不欺我。

加密参数就算拿到了,接下来抠window.PSign.sign
很显然,又是强行喂饭,生怕我抠不出来。都直接写明了调用了window.PSign的sign加密,那是不是可以直接搜window.PSign的赋值位置?
在这里插入图片描述
果然,这里new了一个ParamsSign。那就直接找ParamsSign的位置呗。
在这里插入图片描述
这不就来了!!!
把整个ParamsSign函数抠出
同时window.PSign = new ParamsSign的代码也抠出。
跑一下,补一下必须的环境,需要补的环境文章末尾提供
某东需要补的东西不多,主要是有node环境检测、原型链检测
这里顺便给大家提一嘴,过程比较杂就不贴图了,打字~
首先检测了node特有的process,这个我们浏览器环境是没有的,所以要删除掉。怎么知道的?该补的环境补完后发现怎么都拿不到正确的响应,代理了一下globalThis发现的。这一步完事后,发现还是拿不到正确的响应,环境实在找不到问题了,就打断点调试本地代码(优先看try,if这种容易被引入歧途的位置),在可疑位置debug,看看各个函数的参数,结果是从哪里开始不一样的,然后就一步一步走,最终让我发现了这里
在这里插入图片描述
因为我们环境里是要补document.all的,所以这里检测了document.all.proto === HTMLAllCollection.prototype,这里不能简单的补原型关系了,因为后面还有一句0 !== document.all,天杀的,all写在document中一样不走正确的逻辑。
然后在这里打断点,看看t.bu8进行了几次赋值,结果都是什么,就发现t.bu8这里一直是0,那不就简单了,还补啥原型啊,直接:
在这里插入图片描述
整这些花里胡哨的干啥,写死完事。

这些检测点做完就能拿到正确的结果了

哦对,东哥都强行喂饭了,那我也再喂一喂,这个加密是在异步中完成的,我们本地如何拿到结果?就这么拿
在这里插入图片描述
请求结果
在这里插入图片描述
成功拿到响应数据~~~
环境也双手奉上:

window = global;
__pro__ = process;
​
​
CSSRuleList = function () {
}
CSSStyleDeclaration = function () {
}
DOMRectList = function () {
}
DOMStringList = function () {
}
DOMTokenList = function () {
}
DataTransferItemList = function () {
}
FileList = function () {
}
HTMLAllCollection = function () {
}
HTMLCollection = function () {
}
HTMLFormElement = function () {
}
HTMLSelectElement = function () {
}
MediaList = function () {
}
MimeTypeArray = function () {
}
NamedNodeMap = function () {
}
NodeList = function () {
}
Plugin = function () {
}
PluginArray = function () {
}
SVGLengthList = function () {
}
SVGNumberList = function () {
}
SVGPointList = function () {
}
SVGStringList = function () {
}
SVGTransformList = function () {
}
SourceBufferList = function () {
}
StyleSheetList = function () {
}
TextTrackCueList = function () {
}
TextTrackList = function () {
}
TouchList = function () {
}
MutationObserver = function () {
}
WebKitMutationObserver = function () {
}
PromiseRejectionEvent = function () {
}
dispatchEvent = function () {
}
// regeneratorRuntime = {}
​
​
window.crypto = {}
XMLHttpRequest = function () {
}
window.document = {
    querySelector: function () {
    },
    all: [],
    createElement: function (args) {
        console.log("document_createElement_args:", args)
        if (args === 'script') {
            return {
                parentNode: {},}
        }
        if (args === 'canvas') {
            return {
                getContext: function () {
                    return {
                        fillRect: function () {
                        },
                        arc: function () {
                        },
                        stroke: function () {
                        },
                        fillText: function () {
                        },
                    }
                },
                toDataURL: function () {
                    return ""
                }
            }
        }
        return {}
    },
    documentElement: {},
    createEvent: function (args) {
        console.log("document_createEvent_args:", args)
    },
    getElementsByTagName: function (args) {
        console.log("document_getElementsByTagName_args:", args)
        if (args == 'head') {
            return [
                {
                    appendChild: function () {
                        return ''
                    }
                }
            ]
        }
        return []
    },
    head: {
        childElementCount: 35
    },
    body: {
        childElementCount: 33
    },
    cookie: '脱敏处理,自己补',
}
​​
localStorage = {
    getItem: function (key) {
        return null
    },
    removeItem: function (key) {
        return delete localStorage[key]
    },
    setItem: function (key, value) {
        localStorage[key] = value
    }
}
navigator = {
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
    webdriver: false,
    languages: [
        "zh-CN",
        "zh",
        "en"
    ],
    plugins: {
        "0": {
            "0": {},
            "1": {}
        },
        "1": {
            "0": {},
            "1": {}
        },
        "2": {
            "0": {},
            "1": {}
        },
        "3": {
            "0": {},
            "1": {}
        },
        "4": {
            "0": {},
            "1": {}
        }
    },
    platform: 'Win32',
    hardwareConcurrency: 12,
}
location = {
    'host': '脱敏处理,自己补',
}delete global;
delete process;
delete Buffer;
delete setImmediate;

个人gongzhong号,不定期大厂逆向案例分享,欢迎关注!!!
在这里插入图片描述

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

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

相关文章

基于YOLOv5的教室人数检测统计系统

基于YOLOv5的教室人数检测统计系统可以有效地用于监控教室内的学生数量,适用于多种应用场景,比如 自动考勤、安全监控或空间利用分析 以下是如何构建这样一个系统的概述,包括环境准备、数据集创建、模型训练以及如何处理不同类型的媒体输入…

【机器学习】--- 序列建模与变分自编码器(VAE)

在机器学习领域,序列建模与变分自编码器(Variational Autoencoder, VAE) 是两个至关重要的技术,它们在处理时间依赖性数据与复杂数据生成任务中都发挥着关键作用。序列建模通常用于自然语言处理、语音识别等需要保持顺序关系的任务…

【老板必看!】电脑怎么看使用软件时间记录?一文读懂5种超实用的方法!

在企业管理中,电脑虽不善言语、不会说话,但会留下无数线索,就像一场未解之谜,等待着各位福尔摩斯得到来,去揭开它的秘密面纱。 你是否曾好奇过,当你不在的时候,员工都在用电脑都在忙些什么&…

基于python+django+vue的影视推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的影…

大表数据如何在OceanBase中进行表分区管理的实践

背景 将Zabbix的数据库迁移至OceanBase后,以其中的几个大表作为案例,本文将分享如何利用ODC(OceanBase 开发者工具),来进行自动管理OB数据库中的表分区的方案。 因为原始表里已经有大量的数据,如果贸然对…

快速掌握Postman接口测试

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL16

使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器 描述 ②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。 可将优先编码器Ⅰ的代码添加到本题答案中,并例化。 优先编码器Ⅰ的代码如下: module…

BERT模型解读与简单任务实现(论文复现)

BERT模型解读与简单任务实现(论文复现) 本文所涉及所有资源均在传知代码平台可获取 概述 相关背景 语言模型:语言模型是指对于任意的词序列,它能够计算出这个序列是一句话的概率。 预训练:预训练是一种迁移学习的概念…

c++类和对象(6个默认成员函数)第二级中阶

目录 6个默认成员函数介绍 构造函数 构造函数是什么? 构造函数的6种特性 析构函数 析构函数是什么? 析构函数的特性 拷贝构造函数 什么是拷贝构造函数 拷贝函数的特性 四.默认生成的拷贝构造实行的是浅拷贝(值拷贝)&am…

【2024】前端学习笔记9-内部样式表-外部导入样式表-类选择器

学习笔记 内部样式表外部导入样式表类选择器&#xff1a;class 内部样式表 内部样式表是将 CSS 样式规则写在 HTML 文档内部。通过<style>标签在 HTML 文件的<head>部分定义样式。 简单示例&#xff1a; <!DOCTYPE html><html><head><style…

【linux】基础IO(上)

1. 共识原理 文件 内容 属性文件分为 打开的文件 没打开的文件打开的文件 &#xff1a; 是进程打开的 ----- 本质是要研究文件和进程的关系没打开的文件 &#xff1a; 没打开的文件储存在磁盘上&#xff0c;由于没打开的文件很多&#xff0c;所以需要分门别类的防止好&…

常用函数式接口的使用

FunctionalInterface注解 函数式接口在java中是指:有且仅有一个抽象方法的接口。 虽然知道怎么使用&#xff0c;但是没有搞懂使用场景&#xff0c;暂且记录下使用方法吧&#xff0c;不至于看到源码的时候不知所云。 要我自己写代码&#xff0c;我是想不起来这样用的&#xff0…

YOLOv9改进策略【注意力机制篇】| 2024 SCSA-CBAM 空间和通道的协同注意模块

一、本文介绍 本文记录的是基于SCSA-CBAM注意力模块的YOLOv9目标检测改进方法研究。现有注意力方法在空间-通道协同方面未充分挖掘其潜力&#xff0c;缺乏对多语义信息的充分利用来引导特征和缓解语义差异。SCSA-CBAM注意力模块构建一个空间-通道协同机制&#xff0c;使空间注…

C语言 结构体和共用体——典型实例:洗发牌模拟

目录 如何表示52张扑克牌&#xff1f; 如何保存一副扑克牌&#xff1f; 如何发牌&#xff1f; 如何设计主函数&#xff1f; 如何模拟洗牌&#xff1f; 如何表示52张扑克牌&#xff1f; 如何保存一副扑克牌&#xff1f; 如何发牌&#xff1f; 如何设计主函数&#xff1f; 如…

窗户检测系统源码分享

窗户检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

十大常用加密软件排行榜|2024年好用的加密软件推荐(企业必备)

在数字化时代&#xff0c;数据安全已经成为企业生存和发展的关键因素之一。随着网络攻击和数据泄露事件的频发&#xff0c;企业对数据加密的需求日益增长。选择一款可靠的加密软件&#xff0c;不仅能保护企业的核心数据&#xff0c;还能确保业务的连续性和合规性。本文将为您介…

Stable Diffusion 使用详解(11)--- 场景ICON制作

目录 背景 controlNet 整体描述 Canny Lineart Depth 实际使用 AI绘制需求 绘制过程 PS打底 场景模型选择 设置提示词及绘制参数 controlnet 设置 canny 边缘 depth 深度 lineart 线稿 效果 背景 这段时间不知道为啥小伙伴似乎喜欢制作很符合自己场景的ICON。…

共享wifi哪家公司正规合法?看这3点就够了!

随着共享wifi项目的热度不断上升&#xff0c;越来越多的公司都开始加入到共享wifi贴码的研发行列之中&#xff0c;让意向入局该项目的创业者拥有更多选择的同时&#xff0c;也让许多想要借此割一波韭菜的不法分子有了可乘之机。在此背景下&#xff0c;共享wifi哪家公司正规合法…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核启动】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核&#xff08;LiteOS-M&#xff09; 轻量系统内核&#…

Docker安装rabbitmq并配置延迟队列

下载rabbitmq镜像 docker pull rabbitmq:management 运行rabbitmq镜像 docker run -id --namerabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 -e RABBITMQ_DEFAULT_USERtom -e RABBITMQ_DEFAULT_PASStom rabbitmq:management …