JS逆向之wasm逆向(二)

本文仅供技术交流和技术学习 不做其他用途
接着上一篇继续讲:

上篇地址:
JS逆向之wasm逆向(二进制)
网址:
aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1

这个网站我们后面可以继续讲他的debugger 和滑块和登录加密
上一篇我们把定位和原理讲得差不多了 现在讲这个我们怎么去调用他;
请添加图片描述
两种方法调用:
我们这里只讲一种 node调用 因为c调用的话估计很多人听不懂了 比较麻烦。
node里面有WebAssembly这个api 比较坑就是必须版本16以上的node才能调用的
cmd查看node的版本 自己查看一下版本

node --version

请添加图片描述在这里插入
后面我们来分析代码

    function() {var e, c, t, f, n = {};var d = {38464: function() {return {"./wasm_api_sign_bg.js": {__wbg_now_513c8208bd94c09b: function() {return void 0 === e && (e = a.c[88867].exports),e.ei()},__wbg_random_9f33d5bdc74069f8: function() {return void 0 === c && (c = a.c[88867].exports),c.Aw()},__wbg_floor_a68aa7c1b572044e: function(e) {return void 0 === t && (t = a.c[88867].exports),t.OS(e)},__wbindgen_throw: function(e, c) {return void 0 === f && (f = a.c[88867].exports),f.Or(e, c)}}}}}, r = {2284: [38464]};a.w = {},a.f.wasm = function(e, c) {(r[e] || []).forEach((function(t, f) {var r = n[t];if (r)c.push(r);else {var b, o = d[t](), i = fetch(a.p + "static/wasm/" + {2284: {38464: "63d1a0a2a2e13f93b6f2"}}[e][t] + ".wasm");if (o && "function" === typeof o.then && "function" === typeof WebAssembly.compileStreaming)b = Promise.all([WebAssembly.compileStreaming(i), o]).then((function(e) {return WebAssembly.instantiate(e[0], e[1])}));else if ("function" === typeof WebAssembly.instantiateStreaming)b = WebAssembly.instantiateStreaming(i, o);else {b = i.then((function(e) {return e.arrayBuffer()})).then((function(e) {return WebAssembly.instantiate(e, o)}))}c.push(n[t] = b.then((function(e) {return a.w[t] = (e.instance || e).exports})))}}))}}()

他用fetch去加载了wasm的代码 (相对网络请求去获取二进制文件)

下面是我们改写的代码

var o = function () {return {"./wasm_api_sign_bg.js": {__wbg_now_513c8208bd94c09b: function () {return  Date.now()},__wbg_random_9f33d5bdc74069f8: function () {return Math.random()},__wbg_floor_a68aa7c1b572044e: function (e) {return Math.floor(e)},__wbindgen_throw: function (e, c) {return void 0 === f && (f = a.c[88867].exports),f.Or(e, c)}}}
};
let i = fetch("https://www.7q6cyj.com:9001/_next/static/wasm/63d1a0a2a2e13f93b6f2.wasm");let b = WebAssembly.instantiateStreaming(i, o())
b.then(function(e) {let s=e.instance.exports;console.log(s)
}
)
​
​
​
​
​

写完之后执行就拿到了sign方法 和其他几个我们需要执行的方法 o方法非常的简单 我这里怎么还原的 你们随便调试一下就知道了
请添加图片描述
WebAssembly.instantiateStreaming这个方法的讲解可以去官网看一下https://developer.mozilla.org/zh-CN/docs/WebAssembly/JavaScript_interface/instantiateStreaming_static

这里下面就继续跟着我们咋天调试的步伐继续还原 还原b方法 b方法里面取值的一些方法就不一一调试了 里面的方法非常的简单
请添加图片描述

var o = function () {return {"./wasm_api_sign_bg.js": {__wbg_now_513c8208bd94c09b: function () {return Date.now()},__wbg_random_9f33d5bdc74069f8: function () {return Math.random()},__wbg_floor_a68aa7c1b572044e: function (e) {return Math.floor(e)},__wbindgen_throw: function (e, c) {return void 0 === f && (f = a.c[88867].exports),f.Or(e, c)}}}
};
let i = fetch("https://www.7q6cyj.com:9001/_next/static/wasm/63d1a0a2a2e13f93b6f2.wasm");
let f=0;
function a(n, e, t,rs) {let r = n.length, o = e(r);const u = c(rs);let i = 0;for (; i < r; i++) {const e = n.charCodeAt(i);if (e > 127)break;u[o + i] = e}if (i !== r) {0 !== i && (n = n.slice(i)),o = t(o, r, r = i + 3 * n.length);const e = c().subarray(o + i, o + r);i += _(n, e).written}return f = i,o
​
}
function w(r) {let l = new Int32Array(r.memory.buffer);return l;
}
function c(r) {return new Uint8Array(r.memory.buffer);
}
let u = new ("undefined" === typeof TextDecoder ? (0,n.require)("util").TextDecoder : TextDecoder)("utf-8", {ignoreBOM: !0,fatal: !0});
function is(n, e, r) {return u.decode(c(r).subarray(n, n + e));
}
let b = WebAssembly.instantiateStreaming(i, o())
b.then(function (e) {let r = e.instance.exports;const u = r.__wbindgen_add_to_stack_pointer(-16), c = a("/act/api", r.__wbindgen_malloc, r.__wbindgen_realloc,r), d = f, _ = a("prod", r.__wbindgen_malloc, r.__wbindgen_realloc,r), l = fr.sign(u, c, d, _, l);var t = w(r)[u / 4 + 0], o = w(r)[u / 4 + 1];console.log(is(t, o, r))
}
)
​
​
​
​
​

执行结果输出
请添加图片描述

感兴趣的朋友去可以看看这个网站 里面有滑块 debugger 还有wasm 这些都值得去练习和玩玩的

感谢大家观看 拜拜
欢迎大家关注我的公众号 后面会持续输出更多的好文章

请添加图片描述

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

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

相关文章

[点云分割] Clustering of Pointclouds into Supervoxels

介绍 “Clustering of Pointclouds into Supervoxels” 是一种点云数据聚类的方法&#xff0c;用于将点云数据分割成具有相似特征的超体素&#xff08;supervoxel&#xff09;。 超体素是一种在点云数据中表示连续区域的方法&#xff0c;类似于像素在图像中表示连续区域。超体…

C 语言 http通信

1&#xff0c;C语言本身不包含直接支持HTTP协议的功能&#xff0c;但你可以使用第三方库来实现HTTP客户端或服务器。 以下是一些常用的C语言HTTP库&#xff1a; libcurl&#xff1a;一个支持多种协议的开源库&#xff0c;包括HTTP、HTTPS、FTP等。它提供了一组简单的API&…

因果发现31种高效经典方案汇总,附配套算法和代码

因果发现&#xff08;Causal Discovery&#xff09;是一个复杂的过程&#xff0c;其目标是从大量的数据中确定变量之间的因果关系。这个过程通常涉及到的是如何从纷繁复杂的数据中发现其中隐含的因果关系。有时&#xff0c;研究者可以通过随机实验进行干预来发现因果关系&#…

解决PDF预览时,电子签章、日期等不显示问题

文章目录 问题描述问题排查问题解决 问题描述 在预览PDF时&#xff0c;部分签章或控件没有显示。如下图&#xff1a; 正确应该要这样&#xff1a; 问题排查 根据网上搜索&#xff0c;排查&#xff0c;我先看看&#xff0c;pdf.worker.js 里的这三行代码&#xff0c;是否已经注…

JVM 类加载

① 类加载过程 从上面的图片我们可以看出整个 JVM 执行的流程中&#xff0c;和程序员关系最密切的就是类加载的过程了&#xff0c;所以 接下来我们来看下类加载的执行流程。 对于一个类来说&#xff0c;它的生命周期是这样的&#xff1a; 其中前 5 步是固定的顺序并且也是类加载…

Android : Spinner(列表选项框) + BaseAdapter -简单应用

​​容器与适配器&#xff1a;​​​​​ http://t.csdnimg.cn/ZfAJ7 示例图&#xff1a; 实体类 Demo.java package com.example.mygridviewadapter.entity;public class Demo {private String text;private int img;public Demo(String text, int img) {this.text…

虚拟机解决Linux中Uos和Deepin登录密码忘记的问题 标题Linux Uos Deepin

Uos是切换网络模式解决的(之前有绑定过用户) 因为之前用的是桥接模式登录的时候一直无法联网,改为Nat模式后可以和电脑共用一个网络ip,可以重置密码了,以此解决 ps: 特别说明rw single init/bin/bash 方法和systemd.debug-shell1方法已经失效,不要再做无谓的尝试了Deepin23社区…

Vue + Element UI 实现复制当前行数据功能(复制到新增页面组件值不能更新等问题解决)

1、需求 使用Vue Element UI 实现在列表的操作栏新增一个复制按钮&#xff0c;复制当前行的数据可以打开新增弹窗后亦可以跳转到新增页面&#xff0c;本文实现为跳转到新增页面。 2、实现 1&#xff09;列表页 index.vue <el-table> <!-- 其他列 --> <el-t…

JOSEF 漏电继电器 LLJ-100FG φ45 50-500mA 卡轨安装

系列型号&#xff1a; LLJ-10F(S)漏电继电器LLJ-15F(S)漏电继电器LLJ-16F(S)漏电继电器 LLJ-25F(S)漏电继电器LLJ-30F(S)漏电继电器LLJ-32F(S)漏电继电器 LLJ-60F(S)漏电继电器LLJ-63F(S)漏电继电器LLJ-80F(S)漏电继电器 LLJ-100F(S)漏电继电器LLJ-120F(S)漏电继电器LLJ-125F(S…

推荐一个简单的在线压缩PNG和JPG图片大小的网址

问题描述&#xff1a;推荐一个简单的在线压缩PNG和JPG图片大小的网址 解决&#xff1a; https://www.iloveimg.com/zh-cn/compress-image/compress-png

将对象转成URL参数

背景 有的时候前端跳转到其他平台的页面需要携带额外的参数&#xff0c;需要将对象转成用 & 连接的字符串拼接在路径后面。 实现方法

C++中对SQLite进行增删改查

#include <iostream> #include <sqlite3.h>// 创建数据库连接 sqlite3* OpenDatabase(const char* dbFilePath) {sqlite3* db;// 打开数据库if (sqlite3_open(dbFilePath, &db) ! SQLITE_OK) {std::cerr << "Error opening database." <<…

HTTP ERROR 403 No valid crumb was included in the request

1、报错截图&#xff1a; 2、产生原因&#xff1a; 开启了csrf&#xff0c;即跨站请求伪造 3、新版本不支持页面修改&#xff0c;故需要修改jenkins配置文件 3.1 进入编辑配置文件 vim /etc/sysconfig/jenkins 3.2 修改JENKINS_JAVA_OPTIONS&#xff0c;并保存修改 JENKI…

深度学习之四(循环神经网络Recurrent Neural Networks,RNNs)

概念 循环神经网络(Recurrent Neural Networks,RNNs)是一类专门用于处理序列数据的神经网络,它在处理时考虑了序列数据的顺序和上下文信息。RNNs 在自然语言处理、时间序列分析、语音识别等领域得到广泛应用。 1. 基本结构: RNN 的基本结构包含一个或多个循环单元,每个…

Ubuntu 系统上使用 QQ 邮箱的 SMTP 服务器发送邮件,msmtp(已验证)

安装 msmtp sudo apt-get update sudo apt-get install msmtp2 .配置 msmtp nano ~/.msmtprcdefaults auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.logaccount qq host …

Lua脚本解决redis实现的分布式锁多条命令原子性问题

线程1现在持有锁之后&#xff0c;在执行业务逻辑过程中&#xff0c;他正准备删除锁&#xff0c;而且已经走到了条件判断的过程中&#xff0c;比如他已经拿到了当前这把锁确实是属于他自己的&#xff0c;正准备删除锁&#xff0c;但是此时他的锁到期了&#xff0c;那么此时线程2…

Android : ExpandableListView(折叠列表) +BaseExpandableListAdapter-简单应用

示例图&#xff1a; 实体类DemoData.java package com.example.myexpandablelistview.entity;public class DemoData {private String content;private int img;public DemoData(String content, int img) {this.content content;this.img img;}public String getContent()…

STM32——外部中断

文章目录 0.中断关系映射1.使能 IO 口时钟&#xff0c;初始化 IO 口为输入2.设置 IO 口模式&#xff0c;触发条件&#xff0c;开启 SYSCFG 时钟&#xff0c;设置 IO 口与中断线的映射关系。3.配置NVIC优先级管理&#xff0c;并使能中断4.编写中断服务函数。5.编写中断处理回调函…

springboot多数据源集成

springboot多数据源集成 1、添加依赖2、添加配置3、代码使用4、动态切换数据库 1、添加依赖 <!--多数据源--> <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version…

[个人笔记] Windows的IT运维笔记

IT技术 - 运维篇 第二章 Windows的IT运维笔记 IT技术 - 运维篇系列文章回顾一、Windows10专业版添加gpedit.msc二、海康威视前端页面导出通道名称参考链接 系列文章回顾 第一章 快速下载微软评估版本镜像的方法 一、Windows10专业版添加gpedit.msc 执行以下bat脚本 echo off…