某宝 bx-pp参数 反编译wasm还原算法

  声明:

        本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

  前言:

        听说最近某宝水果滑块出了一个bx-pp参数 是wasm加密,抱着好奇的心态打开的网站.

        打开网站可以看到这个新的参数bx-pp

图片

        我们直接搜bx-pp可以定位到位置接下来跟栈的过程就略过直接到重要的部分,直接定位到下面这个位置,可以看到b应该就是加密的入口 其他则是加密的参数,我们看看参数都传了一些什么.
u:0
f:0
g:"a"
h:"1706839682508"
m:"md5"
k:'qweasdzxcg'
y:'673b248503cfe1dc61cbbe3feb7b6924f9b8ce84081dffc66e3175cb138da6c7db927017d1627c374db7fcb0b9a1931a'
a:'1'
i:'1'
r:'1
w:3000
        重复观察几次后发现会变动的参数是h、y 其他参数

图片

        我们继续跟进b方法看看,可以看到wasm的身影了,好接下来掏出反编译的工具进行分析

图片


 

        打开Ghidra把wasm下载下来之后拖入分析

图片

        我们看到调用的是o.h的方法,同理我们在Ghidra反编译的方法里面找到h方法如下图:

图片

        接下来我们据根据网页上的wasm跟Ghidra反编译的c代码进行联调,这里先拿一个func13方法进行讲解

图片

        我们可以看到这个部分是取了一个时间戳然后定义了一个1000的值两者进行除的操作我们这个可以在反编译的代码中也看到这个部分

图片

    

图片

        同理下面的代码就是11对应所以我们就可以用代码进行还原

图片

图片

        一一对应进行还原成js代码最后可以发现func13主要的操作就是把时间戳分成前十位和后三位,实现的js代码如下:

// js代码实现t = 1706842045600QY = t%1000QZ = parseInt(t/1000)

        这里我们可以看出func13处理出来的两个值的用途这里我分开去说先对QZ进行-1操作再经给下面进行循环*0x5851f42d4c957f2d后+1循环的次数就是QY的次数

图片

        这里为了方便我直接用c++进行接下来的还原操作

图片

        先定义入口然后再定义一个方法把我刚才说的操作用c++代码进行还原接下来的部分还是和一开始的部分一样根据Ghidra进行还原

图片

        还原后执行结果如下:

图片

        那上面这串字符串什么用呢?我们接着往下看跳过繁琐的过程我们讲最后是如何生成的,我们定位到下面这个部分在浏览器上我们输出一下这个位置的字符串(func6函数作用是获取了内存中这个位置存在字符串的长度)

图片

通过输出我们可以看到三个参数
第一个:32位的值
第二个:明文
第三个:就是我们上面一开始的y值

图片

        我们一开始可以看到有个md5的字眼再根据反编译中一段散列的hash算法我们可以大概率猜测第一个值是md5加密值,我们用工具进行校验看看,用加密工具加密明文后可以看到这个值刚好对上32位的值,成功验证了我们的猜想

图片

        接着往下看我们可以看到这里有一个类似占位符的代码那是不是这里是把刚才的几个值都填进去呢?

图片

        带着猜想我们继续控制台输出,可以看到这不就是我刚才输出的那一段么,到此距离成功复现加密值就差最后一步了

图片

        我们接着往下看的时候可以看到这一段代码,熟悉的人可能一眼就看出来这段代码做异或和移位操作去生成字符串

图片

        我们写一个算法来实现一下,上面那个是网页生成的下面是根据我们算法生成的我们可以看到在我画红点的部分charcode为10的时候他会处理成a、code为12的时候处理成c 那同理我们也对应处理

图片

        修改代码之后再次验证,这次我们可以看到等于true说明加密值对了,至此对于bx-pp的加密整体流程就算是结束了

图片

        最后可以直接用python代码还原算法

      

        有兴趣的可以加入我的星球后续会持续分享和更新

        

图片

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

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

相关文章

TCP 连接掉线自动重连

文章目录 TCP 连接掉线自动重连定义使用连接效果 TCP 接收数据时防止掉线。TCP 连接掉线自动重连。多线程环境下TCP掉线自动重连。 欢迎讨论更好的方法! TCP 连接掉线自动重连 定义 定义一个类,以编写TCP连接函数Connect(),并且&#xff1a…

MySQL原理(五)事务

一、介绍: 1、介绍: 在计算机术语中,事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。 2、事务的4大特性 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性…

比瓴科技入围软件供应链安全赛道!为关键信息基础设施安全建设注入新动力

1月20日,中关村华安关键信息基础设施安全保护联盟会员大会暨关键信息基础设施安全保护论坛在北京成功举办,比瓴科技作为会员单位受邀出席。 本次论坛发布了《关键信息基础设施安全保护支撑能力白皮书(2023)》,比瓴科技…

Jmeter直连mysql数据库教程

mysql数据库能够通过Navicat等远程连接工具连接 下载驱动并加入jmeter 1.mysql驱动下载地址:MySQL :: Download MySQL Connector/J (Archived Versions) 找到对应的驱动下载:如下图: 把驱动jar包加入jmeter 配置jmeter连接mysql数据库…

区间时间检索

前端 <el-col :md"6" v-if"advanced"><el-form-item :label"$t(inRecord.column.createTime)"><el-date-pickerstyle"width: 100%;"v-model"daterangeCreateTime"value-format"yyyy-MM-dd"type&qu…

【sentinel流量卫兵搭建与微服务整合】

sentinel流量卫兵搭建与微服务整合 搭建sentinel dashboard控制台微服务整合 搭建sentinel dashboard控制台 1、下载 官网链接 由于官网github网络原因&#xff0c;导致长时间下载失败。 网盘链接 网盘提取码&#xff1a;dwgj 2、运行 将下载jar包放在任意非中文、不包含特殊…

Java数组的遍历

目录 数组的遍历使用for循环遍历数组使用for-each循环遍历数组使用while循环和迭代器遍历数组使用Java 8的流API遍历数组 数组遍历的应用求数组中的最大值查询数组中指定位置的元素将查指定元素对应的索引的功能提取为方法添加数组元素删除数组元素 数组的遍历 Java数组的遍历…

【Kafka专栏】windows搭建Kafka环境 详细教程(01)

文章目录 01 引言1.1 官网地址1.2 概述简介1.3 kafka与zookeeper 02 部署zookeeper2.1 下载组件包2.2 解压压缩包&#xff08;1&#xff09;解压到任意路径&#xff08;2&#xff09;解压后的目录创建数据目录data 2.3 修改zoo配置2.4 设置系统变量2.5 启动zookeepe服务&#x…

小程序中picker多列选择器

需求&#xff1a;实现类似省市联动的效果&#xff0c;选择第一列后&#xff0c;第二列数据变化 html部分: <view class"section"><view>多列选择器</view><picker mode"multiSelector" bindchange"bindMultiPickerChange"…

自然语言处理(NLP)—— Dialogflow ES聊天机器人

1. 背景介绍 这个实验室的目标是让你了解并使用Google的Dialogflow服务。Dialogflow是一个可以让你创建聊天机器人的服务&#xff0c;这个过程不需要或者只需要很少的编程技能。 1.1 账号的创建 为了完成这个实验室&#xff0c;你需要在以下网站上创建账号&#xff1a…

完整的 HTTP 请求所经历的步骤及分布式事务解决方案

1. 对分布式事务的了解 分布式事务是企业集成中的一个技术难点&#xff0c;也是每一个分布式系统架构中都会涉及到的一个东西&#xff0c; 特别是在微服务架构中&#xff0c;几乎可以说是无法避免。 首先要搞清楚&#xff1a;ACID、CAP、BASE理论。 ACID 指数据库事务正确执行…

MySql主从同步,同步SQL_ERROR 1032解决办法

1.登录从库 mysql -u root -p 2.输入命令查看状态 SHOW SLAVE STATUS\G; 3.找到对应的错误数据位置 Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB: app_push_centerReplicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Tabl…