精易论坛

标题: js逆向求助 [打印本页]

作者: dwk1818    时间: 2024-12-23 15:54
标题: js逆向求助
目标站:aHR0cHM6Ly93d3cuc2xoYmN1LmNvbTo2MDAxLw==
参数:登陆的 xxx-API-XXX
https://www.15ko4v.com:6002/_next/static/wasm/5bd33e776bcea985.wasm
这个加密参数 我用nodejs 导出实现了 写的接口有点慢 这种wasm能改成js纯算法吗



作者: yl6666    时间: 2024-12-23 15:54
https://125.confly.eu.org/forum.php?mod ... &highlight=wasm
作者: 1425113841    时间: 2024-12-23 16:38
加密参数
nodejs实现
接口慢
wasm

这四个词汇为什么混在一起谈了, 到底想表达什么呢, 是nodejs生成加密参数慢吗
作者: dwk1818    时间: 2024-12-23 16:42
1425113841 发表于 2024-12-23 16:38
加密参数
nodejs实现
接口慢

对他是wasm的我用nodejs实现写成接口调用 但是nodejs生成好慢
作者: 1425113841    时间: 2024-12-23 16:47
dwk1818 发表于 2024-12-23 16:42
对他是wasm的我用nodejs实现写成接口调用 但是nodejs生成好慢

慢吗, 有多慢, 测试过耗时在哪里吗, 生成加密的那一部分上传来看看

补充内容 (2024-12-23 16:50):
nodejs的核心就是V8, V8还慢的话还有什么比V8快吗, 现在的浏览器js引擎都是V8
作者: dwk1818    时间: 2024-12-23 17:04
1425113841 发表于 2024-12-23 16:47
慢吗, 有多慢, 测试过耗时在哪里吗, 生成加密的那一部分上传来看看

补充内容 (2024-12-23 16:50):

[JavaScript] 纯文本查看 复制代码
// WebAssembly 模块导出和相关方法
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) {
                console.error("Throwing error: ", e, c);
            }
        }
    };
};

// 使用 fetch 获取 WebAssembly 文件
let i = fetch("https://www.15ko4v.com:6002/_next/static/wasm/5bd33e776bcea985.wasm");

// 确保 f 变量初始化
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;
    }
    f = i;
    return o;
}

// 获取 WebAssembly 内存中的 Int32Array 数据
function w(r) {
    let l = new Int32Array(r.memory.buffer);
    return l;
}

// 获取 WebAssembly 内存中的 Uint8Array 数据
function c(r) {
    return new Uint8Array(r.memory.buffer);
}

// 使用 TextDecoder 解码
let u = new (typeof TextDecoder === "undefined" ? require("util").TextDecoder : TextDecoder)("utf-8", {
    ignoreBOM: true,
    fatal: true
});

// 解码函数
function is(n, e, r) {
    return u.decode(c(r).subarray(n, n + e));
}

// 主动调用的函数,封装 WebAssembly 加载与调用逻辑,并返回解码结果
function processWasm(apiPath) {
    return i.then(function(response) {
        return WebAssembly.instantiateStreaming(response, o()); // 使用 fetch 的返回值传给 instantiateStreaming
    }).then(function (e) {
        let r = e.instance.exports;
        const u = r.__wbindgen_add_to_stack_pointer(-16); // 处理栈指针
        const c = a(apiPath, r.__wbindgen_malloc, r.__wbindgen_realloc, r); // 处理数据
        const d = f;
        const _ = a("prod", r.__wbindgen_malloc, r.__wbindgen_realloc, r); // 处理生产环境数据
        const l = f;

        // 调用 WebAssembly 模块中的 `sign` 函数
        r.sign(u, c, d, _, l);

        // 获取 WebAssembly 内存中的数据
        let t = w(r)[u / 4 + 0];
        let o = w(r)[u / 4 + 1];

        // 解码并返回结果
        return is(t, o, r);  // 返回解码后的字符串
    }).catch(function (err) {
        console.error("WebAssembly Instantiation Error:", err);
        throw err;  // 如果出错,抛出错误
    });
}

// 调用 processWasm 函数,传入自定义的 API 路径
processWasm("/site/api").then(function(result) {
    // 处理返回的解码结果
    console.log("Decoded result: ", result);
}).catch(function(err) {
    // 处理错误
    console.error("Error in processing WebAssembly:", err);
});

作者: dwk1818    时间: 2024-12-23 20:07
1425113841 发表于 2024-12-23 16:47
慢吗, 有多慢, 测试过耗时在哪里吗, 生成加密的那一部分上传来看看

补充内容 (2024-12-23 16:50):

// WebAssembly 模块导出和相关方法
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) {
                console.error("Throwing error: ", e, c);
            }
        }
    };
};

// 使用 fetch 获取 WebAssembly 文件
let i = fetch("https://www.15ko4v.com:6002/_next/static/wasm/5bd33e776bcea985.wasm");

// 确保 f 变量初始化
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;
    }
    f = i;
    return o;
}

// 获取 WebAssembly 内存中的 Int32Array 数据
function w(r) {
    let l = new Int32Array(r.memory.buffer);
    return l;
}

// 获取 WebAssembly 内存中的 Uint8Array 数据
function c(r) {
    return new Uint8Array(r.memory.buffer);
}

// 使用 TextDecoder 解码
let u = new (typeof TextDecoder === "undefined" ? require("util").TextDecoder : TextDecoder)("utf-8", {
    ignoreBOM: true,
    fatal: true
});

// 解码函数
function is(n, e, r) {
    return u.decode(c(r).subarray(n, n + e));
}

// 主动调用的函数,封装 WebAssembly 加载与调用逻辑,并返回解码结果
function processWasm(apiPath) {
    return i.then(function(response) {
        return WebAssembly.instantiateStreaming(response, o()); // 使用 fetch 的返回值传给 instantiateStreaming
    }).then(function (e) {
        let r = e.instance.exports;
        const u = r.__wbindgen_add_to_stack_pointer(-16); // 处理栈指针
        const c = a(apiPath, r.__wbindgen_malloc, r.__wbindgen_realloc, r); // 处理数据
        const d = f;
        const _ = a("prod", r.__wbindgen_malloc, r.__wbindgen_realloc, r); // 处理生产环境数据
        const l = f;

        // 调用 WebAssembly 模块中的 `sign` 函数
        r.sign(u, c, d, _, l);

        // 获取 WebAssembly 内存中的数据
        let t = w(r)[u / 4 + 0];
        let o = w(r)[u / 4 + 1];

        // 解码并返回结果
        return is(t, o, r);  // 返回解码后的字符串
    }).catch(function (err) {
        console.error("WebAssembly Instantiation Error:", err);
        throw err;  // 如果出错,抛出错误
    });
}

// 调用 processWasm 函数,传入自定义的 API 路径
processWasm("/site/api").then(function(result) {
    // 处理返回的解码结果
    console.log("Decoded result: ", result);
}).catch(function(err) {
    // 处理错误
    console.error("Error in processing WebAssembly:", err);
});

作者: 137240129    时间: 2024-12-23 21:26

难道是我找错加密地方了?,加密的是不是在这个模块里

作者: dwk1818    时间: 2024-12-23 22:11
137240129 发表于 2024-12-23 21:26
难道是我找错加密地方了?,加密的是不是在这个模块里

不是的在这里  
__wbindgen_add_to_stack_pointer(-16)
搜上面的
b方法
作者: dwk1818    时间: 2024-12-23 22:26
137240129 发表于 2024-12-23 21:26
难道是我找错加密地方了?,加密的是不是在这个模块里

搜这个
__wbindgen_add_to_stack_pointer(-16)
作者: Hoibben    时间: 2024-12-23 23:00
看了下这玩意儿可有可无的吧 真要搞的话就不用js 那效率肯定嘎嘎滴~



作者: dwk1818    时间: 2024-12-23 23:07
Hoibben 发表于 2024-12-23 23:00
看了下这玩意儿可有可无的吧 真要搞的话就不用js 那效率肯定嘎嘎滴~

登陆进去后的操作都需要
作者: Hoibben    时间: 2024-12-23 23:09
dwk1818 发表于 2024-12-23 23:07
登陆进去后的操作都需要

没有账号测试不了 方便就私信一下看看 我就随意登录的试了下~



作者: dwk1818    时间: 2024-12-23 23:32
Hoibben 发表于 2024-12-23 23:09
没有账号测试不了 方便就私信一下看看 我就随意登录的试了下~

jingyi1321----11111111aa

作者: Hoibben    时间: 2024-12-23 23:59
dwk1818 发表于 2024-12-23 23:32
jingyi1321----11111111aa

看了 登录后确实是有验证 还是那句话 这个玩意儿要效率就不要用js 当然了 这样一来就不是精币能解决的了~


作者: dwk1818    时间: 2024-12-24 01:35
Hoibben 发表于 2024-12-23 23:59
看了 登录后确实是有验证 还是那句话 这个玩意儿要效率就不要用js 当然了 这样一来就不是精币能解决的了~ ...

搞定了 我c打包成dll调用了快很多
作者: Hoibben    时间: 2024-12-24 01:58
dwk1818 发表于 2024-12-24 01:35
搞定了 我c打包成dll调用了快很多

之前就测试过 垃圾4代随随便便都能1s万把次计算最少吧估计是 主要是调用也方便不依赖环境 DLL也才几十白kb的样子~






欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4