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.pswp.cn/news/163811.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163811.shtml
英文地址,請注明出處:http://en.pswp.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…