h = function (e, t, n, l) {
let s,
a;
try {
let d = r.__wbindgen_add_to_stack_pointer(- 16),
u = passStringToWasm0(e, r.__wbindgen_malloc, r.__wbindgen_realloc),
h = F,
g = passStringToWasm0(t, r.__wbindgen_malloc, r.__wbindgen_realloc),
m = F,
f = passStringToWasm0(n, r.__wbindgen_malloc, r.__wbindgen_realloc),
x = F,
p = passStringToWasm0(l, r.__wbindgen_malloc, r.__wbindgen_realloc),
v = F;
r.sign(d, u, h, g, m, f, x, p, v);
var o,
i = getInt32Memory0()[d / 4 + 0],
c = getInt32Memory0()[d / 4 + 1];
return s = i,
a = c,
o = i >>> 0,
W.decode(getUint8Memory0().subarray(o, o + c))
} finally {
r.__wbindgen_add_to_stack_pointer(16),
r.__wbindgen_free(s, a, 1)
}
}(i, d, u, e)
i = "6b3aebd9-af68-4c12-b349-38c68cb94924" //每次随机一个
d = "1704012139" //当前时间戳
u = "d192de21a79b50e44b7774c7887e2f465bb7e197" //一个固定值
e = "hello" // 变化的字符串
h 的最张结果应该是( sign 值):
"5b81e04144091fdcd8af6ec04931f08bf6ccea3b6136a141daa439274b2b6449"
更多附加信息
let F = 0, Q = null;
function getUint8Memory0() {
return (null === Q || 0 === Q.byteLength) && (Q = new Uint8Array(r.memory.buffer)),
Q
}
let q = "undefined" != typeof TextEncoder ? new TextEncoder("utf-8") : {
encode: ()=>{
throw Error("TextEncoder not available")
}
}
, G = "function" == typeof q.encodeInto ? function(e, t) {
return q.encodeInto(e, t)
}
: function(e, t) {
let n = q.encode(e);
return t.set(n),
{
read: e.length,
written: n.length
}
};
function passStringToWasm0(e, t, n) {
if (void 0 === n) {
let n = q.encode(e)
, r = t(n.length, 1) >>> 0;
return getUint8Memory0().subarray(r, r + n.length).set(n),
F = n.length,
r
}
let r = e.length
, l = t(r, 1) >>> 0
, s = getUint8Memory0()
, a = 0;
for (; a < r; a++) {
let t = e.charCodeAt(a);
if (t > 127)
break;
s[l + a] = t
}
if (a !== r) {
0 !== a && (e = e.slice(a)),
l = n(l, r, r = a + 3 * e.length, 1) >>> 0;
let t = getUint8Memory0().subarray(l + a, l + r)
, s = G(e, t);
a += s.written
}
return F = a,
l
}
let O = null;
function getInt32Memory0() {
return (null === O || 0 === O.byteLength) && (O = new Int32Array(r.memory.buffer)),
O
}
let W = "undefined" != typeof TextDecoder ? new TextDecoder("utf-8",{
ignoreBOM: !0,
fatal: !0
}) : {
decode: ()=>{
throw Error("TextDecoder not available")
}
};
猜测可能是
crypto.createHash('sha256').update(data).digest('hex');
但试了都不对,有没有人能帮忙解决下,谢谢!
1
yyf1234 327 天前 via iPhone
wasm 这玩意逆向只能靠动态调试,一步步跟逻辑。光代码段是分析不出来的
|
2
misdake 327 天前
给这么多都是胶水代码,没有实现。有效信息只有 4 个输入和 1 个输出,全靠蒙。
我猜就是这几个属性拼属性名然后排序拼接,过一遍 sha256 。可以调试进 wasm 找找常量字符串,看看属性名叫什么。 |
3
janemon 327 天前 via iPhone
先把 wasm 字节码捞出来然后反编译一下看看,你这都是外围胶水代码,没什么用
|
4
weixiangzhe 326 天前
wasm 当黑盒用不行吗
|