当前位置: 首页 > news >正文

JS逆向分析某枝网的HMAC加密、wasm模块加密

这是我2022年学做JS逆向成功的例子,URL:(脱敏处理)aHR0cHM6Ly93d3cuZ2R0di5jbi9hdWRpb0NoYW5uZWxEZXRhaWwvOTE=

逆向分析:

1、每次XHR的GET请求携带的headers包括:

{"X-ITOUCHTV-Ca-Timestamp": "1697608868940","X-ITOUCHTV-Ca-Signature": "hGlre/JKwbHvCWLpO5JQdUHF7nP4HiaA5ya1DenJToA=","X-ITOUCHTV-Ca-Key": "89541443007807288657755311869534","X-ITOUCHTV-CLIENT": "WEB_PC","X-ITOUCHTV-DEVICE-ID": "WEB_1c2f8b90-6bd8-11ee-96e0-5bc8d7091aa8"
}

2、该网站的JS文件采用webpack形式。找出关键的加密逻辑:

this.s = function(t, n, a) {                var s = i.default.getUser, u = i.default.getJWT, c = i.default.getDeviceId, d = (new Date).getTime(), f = {}, p = "", _ = "";a && (p = (0,r.default)(a),_ = l.default.stringify(p));var m = "".concat(t, "\n").concat(n, "\n").concat(d, "\n").concat(_);return f = {"Content-Type": "application/json","X-ITOUCHTV-Ca-Timestamp": d,"X-ITOUCHTV-Ca-Signature": l.default.stringify((0,o.default)(m, "dfkcY1c3sfuw0Cii9DWjOUO3iQy2hqlDxyvDXd1oVMxwYAJSgeB6phO8eW1dfuwX")),"X-ITOUCHTV-Ca-Key": "89541443007807288657755311869534","X-ITOUCHTV-CLIENT": "WEB_PC","X-ITOUCHTV-DEVICE-ID": e.__DEVICEID__ || c()},u() && (f.Authorization = u()),s() && s().pk && (f["X-ITOUCHTV-USER-PK"] = s().pk),e.__X_FORWARDED_FOR__ && (f["X-Forwarded-For"] = e.__X_FORWARDED_FOR__),f
};

3、初步分析:

(1)X-ITOUCHTV-Ca-Timestamp很明显是时间戳。

(2)X-ITOUCHTV-Ca-Key这个值是固定的"89541443007807288657755311869534",可以写死。

(3)"X-ITOUCHTV-CLIENT": "WEB_PC"也是固定写死的。

(4)X-ITOUCHTV-DEVICE-ID:设备UUID,随便撸一串字符串都可以,但该网站要求一定要以 "WEB_"开头,比如:WEB_9527-3547-709394。

(5)X-ITOUCHTV-Ca-Signature:这是至关重要的签名值。

l.default.stringify((0, o.default)(m, "dfkcY1c3sfuw0Cii9DWjOUO3iQy2hqlDxyvDXd1oVMxwYAJSgeB6phO8eW1dfuwX"))

这一行代码前面的 l.default 可以不管了,因此理解为:o.default(m, "dfkcY1c3sfuw0Cii9DWjOUO3iQy2hqlDxyvDXd1oVMxwYAJSgeB6phO8eW1dfuwX");

其中长串字符是密钥,通过 o.default 方法把 m 值和密钥进行加密。

m 是什么?上面几行已写清楚了:

var m = "".concat(t, "\n").concat(n, "\n").concat(d, "\n").concat(_);

m 是由 t、n、d、_值串联起来的字符。通过断点跟踪,可以得知:t 是发送请求的方式(GET、POST、OPTION之类),n 是URL链接,d 是时间戳,至于“_”嘛,是个空字符串,然后每个子字符串以换行符拼接,因此这一行可以简化成 m = t + '\n' + n + '\n' + d + '\n'。

4、算法分析:

通过断点跟踪上面提及的 o.default 方法,o 值来源于“o = a(n(1305))”,是通过WebPack调取第序列号为1305的方法,可以看到

function(e, _t, n) {var r;e.exports = (r = n(43),n(393),n(285),r.HmacSHA256)
},

也就是使用HmacSHA256算法加密,然后输出BASE64字符串。

找一个Python的HmacSHA256的加密代码尝试一下:

import hmac
from base64 import b64encode
from hashlib import sha256key = '。。。。。。'  # HMAC-SHA256加密的密钥
text = '。。。。。。' # 加密前的明文字符串
signature = str(b64encode(hmac.new(key.encode('utf-8'), text.encode('utf-8'), digestmod=sha256).digest()), 'utf-8')
print(signature)

输入明文、密钥,生成的结果结果对碰上了,跟开发者工具里看到的请求头的X-ITOUCHTV-Ca-Signature一致,幸好该网站没有魔改加密算法,因此接下来用Python的 hmac 库和 base64 库加密代码就水到渠成了。

2023年10月19日更新:

最近该网站的.js文件作了修改,在所有.js文件里已经找不到上述提到的加密逻辑了,而是通过wasm模块(WebAssembly)进行加密,逆向的难度进一步增强。

我通过逆向wasm、插桩分析,最后得知wasm只是纸老虎,加密算法依然是HmacSHA256而且没有被魔改,只是密钥以及 X-ITOUCHTV-Ca-Key 的值变了。

需要源代码的朋友欢迎联系我(+V:Scott373519)。

参考来源:

Python使用HmacSHA256并用base64加密_sha256+base64-CSDN博客

相关文章:

JS逆向分析某枝网的HMAC加密、wasm模块加密

这是我2022年学做JS逆向成功的例子,URL:(脱敏处理)aHR0cHM6Ly93d3cuZ2R0di5jbi9hdWRpb0NoYW5uZWxEZXRhaWwvOTE 逆向分析: 1、每次XHR的GET请求携带的headers包括: {"X-ITOUCHTV-Ca-Timestamp":…...

论坛介绍|COSCon'23开源商业(V)

众多开源爱好者翘首期盼的开源盛会:第八届中国开源年会(COSCon23)将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是:“开源:川流不息、山海相映”!各位新老朋友们,欢迎到成都&a…...

在word、ppt、excel编辑软件标题栏顶部左上角加入自定义功能:另存为、导出PDF

...

Flink学习笔记(三):Flink四种执行图

文章目录 1、Graph 的概念2、Graph 的演变过程2.1、StreamGraph (数据流图)2.2、JobGraph (作业图)2.3、ExecutionGraph (执行图)2.4、Physical Graph (物理图) 1、Graph 的概念 Flink 中的执行图可以分成四层:StreamGraph -> JobGraph -> ExecutionGraph -&g…...

堆-----数据结构

引言 什么是堆?堆是一种特殊的数据结构(用数组表示的树)。 为什么要使用到堆?比如一场比赛,如果使用擂台赛的方式来决出冠军(实力第一),就很难知道实力第二的队伍是什么了。 但是…...

震撼登场 | 拓世科技集团新品亮相成为2023世界VR产业大会全场焦点

在当今世界,新一轮科技革命和产业变革蓬勃发展,虚拟现实作为这一浪潮中的代表性技术,伴随着5G商用及元宇宙概念的迅速兴起,已经成为推动数字经济发展和产业转型升级的关键技术,深刻地改变着人类的生产和生活方式。 10…...

后端接口的查询方式

在与前端对接过程中一直都会遇到一个问题,就是我们后端接口提供好了,自测也通过了,前端却说接口不通,当我们去排查时却发现大都不是接口不通,很多情况是前端使用的姿势不对,比如接口明明写的参数是放到ULR路…...

Maven首次安装配置

所有版本下载地址 http://archive.apache.org/dist/maven/ 配置环境变量 变量名: MAVEN_HOME 值: D:\apache-maven-3.9.5 Path:%MAVEN_HOME%\bin 是否安装成功 mvn -v 出现版本号就安装成功 配置本地仓库 也就是从服务器上下载的JAR包地址&a…...

使用html2canvas将html转pdf,由于table表的水平和竖直有滚动条导致显示不全(或者有空白)

结果: 业务:将页面右侧的table打印成想要的格式的pdf,首先遇到的问题是table表上下左右都有滚轮而html2canvas相当于屏幕截图,那滚动区域如何显示出来是个问题? gif有点模糊,但是大致功能可以看出 可复制…...

EDID详解

文章目录 字节含义一些概念YCC位 文章目录 字节含义一些概念YCC位 字节含义 EDID通常由128个字节组成,这些字节提供了关于显示器的各种详细信息。以下是EDID中每个字节位表示的一般含义: Header(头部): 字节0: Header&#xff…...

浅谈云原生

目录 1. 云原生是什么? 2. 云原生四要素 2.1 微服务 2.2 容器化 2.3 DevOps 2.4 持续交付 3. 具体的云原生技术有哪些? 3.1 容器 (Containers) 3.2 微服务 (Microservices) 3.3 服务网格 (Service Meshes) 3.4 不可变基础设施 (Immutable Inf…...

【K8S】Kubernetes

mesos apache基金会,后来是推特公司 mesos分布式资源管理框架2019淘汰 marathon 容器编排框架 用来调度、编排运行的常驻服务 mesos marathon 容器管理 k8s容器或云平台两种趋势(工资好) 1.K8s是什么 K8s全称为 Kubernetes&#xff…...

面试题 01.01. 判定字符是否唯一

​​题目来源: leetcode题目,网址:面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode) 解题思路: 遍历计数即可。 解题代码: class Solution { public:bool isUnique(string astr) {if(astr.l…...

C++(Qt)软件调试---linux使用dmesg定位程序崩溃位置(14)

C(Qt)软件调试—linux使用dmesg定位程序崩溃位置(14) 文章目录 C(Qt)软件调试---linux使用dmesg定位程序崩溃位置(14)1、前言2、ELF文件3、常用工具4、使用dmesg定位异常位置1.1 异常发生在可执行程序中1.2 异常发生在动态库中 1、…...

38 WEB漏洞-反序列化之PHPJAVA全解(下)

目录 Java中的API实现序列化和反序列化演示案例WebGoat_Javaweb靶场反序列化测试2020-网鼎杯-朱雀组-Web-think java真题复现 文章参考: https://www.cnblogs.com/zhengna/p/15737517.html https://blog.csdn.net/MCTSOG/article/details/123819548 ysoserial生成攻…...

LeetCode 面试题 10.10. 数字流的秩

文章目录 一、题目二、C# 题解 一、题目 假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说: 实现 track(int x) 方法,每读入一个数字都会调…...

Vue3项目上线打包优化

之前整理过 Vue2项目上线打包优化,在vue3中,使用vite打包,配置稍微改了改。 1 开启gzip压缩 1.1 安装依赖 npm i vite-plugin-compression -D1.2 vite.config.ts 配置 import viteCompression from vite-plugin-compressionexport defaul…...

【算法题】2525. 根据规则将箱子分类

题目: 给你四个整数 length ,width ,height 和 mass ,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子 类别 的字符串。 如果满足以下条件,那么箱子是 “Bulky” 的: 箱子 至少有一个…...

python字典

字典 字典定义创建字典 字典定义 字典是python语言中唯一的映射类型。这种映射类型由键(key)和值(value)组成,是“键值对”的无序可变序列 定义字典时,每个元组的键和值用冒号隔开,相邻元素用…...

thinkphp队列的使用?

1.安装队列依赖 由于框架版本原因可以选择适合的版本 composer require topthink/think-queue 由于我是tp框架5.1的,所以选择了think-queue 1.1.6 composer require topthink/think-queue 1.1.6 判断安装成功 php think queue:work -h image.png 2.配置文件…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

安卓基础(aar)

重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)​现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...