Pueritia 发表于 2023-4-13 20:36

某某电影网页wasm逆向思路

本帖最后由 Pueritia 于 2023-4-13 20:40 编辑

本文仅供学习交流使用,如有侵权,联系我删除。


网址:aHR0cHM6Ly9tLndhbmRhY2luZW1hcy5jb20vbG9naW4=
发送验证码后,发现协议头的中的check加密了,在发送方法下断点,往下跟踪

找到了加密的方法gowasm.sp,将时间戳,url头等信息传进去加密。

跟进去发现调用了wasm的resume方法,本人新手,面对wasm毫无思路,在多方搜索后无果后最后注册吾爱发现不少wasm的逆向文章,
最后参考的:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1492577 成功逆向。
找到wasm的加载的地方,打断点,刷新下网页让他重新加载wasm,注入脚本:


wasm = i.instance.exports;
memories =
viewDWORD = (addr) =>{
    const arr = new Uint32Array(memories.buffer.slice(addr, addr + 16));
    return arr;
};
viewChar = (addr, size = 16) =>{
    const arr = new Uint8Array(memories.buffer.slice(addr, addr + size));
    return String.fromCharCode.apply(null, arr);
};
viewHEX = (addr, size = 16) =>{
    const arr = new Uint8Array(memories.buffer.slice(addr, addr + size));
    return (Array.from(arr, x =>x.toString(16).padStart(2, '0')).join(' '));
};
viewHexCode = (addr, size = 16) =>{
    const arr = new Uint8Array(memories.buffer.slice(addr, addr + size));
    return (Array.from(arr, x =>'0x' + x.toString(16).padStart(2, '0')).join(', '));
};
dumpMemory = (addr, size = 16) =>{
    const arr = new Uint8Array(memories.buffer.slice(addr, addr + size));
    return arr;
};
viewString = (addr, size = 16) =>{
    const arr = new Uint8Array(memories.buffer.slice(addr, addr + size));
    let max = size;
    for (let i = 0; i < size; i++) {
      if (arr === 0) {
            max = i;
            break;
      }
    }
    return String.fromCharCode.apply(null, arr.slice(0, max));
};
search = function(stirng) {
    const m = new Uint8Array(memories.buffer);
    // vid=35402, 9AAizQZJ
    // vid=20268, a3fMpSkB
    const k = Array.from(stirng, x =>x.charCodeAt());

    const match = (j) =>{
      return k.every((b, i) =>m === b);
    };
    const max = Math.min(10_000_000, m.byteLength || m.length);
    for (let i = 0; i < max; i++) {
      if (match(i)) {
            console.info(i);
      }
    }
    console.info('done');
}

注入之后就可以通过view方法来查看wasm申请的内存,非常方便。
接上面,在wasm的入口继续往下追踪,发现实际是通过md5加密,在加密方法的入口处下断点,通过viewChar来观察入参。


发现有数据,增加长度后就发现了加密前的字符串,经过验证确认gowasm.sp传入的参数经过加盐操作后md5就得到了check。









同样的,在另一个地方的加密调用的gowasm.sa方法 跟进去后发现使用的AES加密,
这个算法不懂,因为这个wasm是go语言的转的,百度go的ASE算法实现

在wasm找到对应的方法,下断点,成功获取到key。然后mode 和 padding都试一遍就试出来了。




















alanhays 发表于 2023-4-26 17:42

wblylh 发表于 2023-4-22 09:16
网址:aHR0cHM6Ly9tLndhbmRhY2luZW1hcy5jb20vbG9naW4=

怎么能还原网址?

Base64 解码

zhy1992 发表于 2023-4-14 11:15

这是破解了?

路人王2021 发表于 2023-4-14 16:19

学习一下啦

tybo8083006 发表于 2023-4-14 16:24

好牛逼的样子

vipzzc 发表于 2023-4-14 16:58

这个不错

MWH 发表于 2023-4-14 18:29

非常有帮助,感谢老哥分享

wumianren 发表于 2023-4-14 19:05

学习一下

ppplp 发表于 2023-4-14 19:52

学习一下啦

a524559 发表于 2023-4-14 20:22

这是抓包吗

swl0515 发表于 2023-4-14 22:09

学习一下{:1_893:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 某某电影网页wasm逆向思路