python爬虫之wasm逆向 wasm逆向 超详细

本文介绍了一种处理网页请求签名的方法,特别是当签名由WASM文件加密时。通过定位加密函数并分析其输入参数,文章详细展示了如何下载WASM文件、使用Python库pywasm解析它,并最终用Python代码复现了JS加密过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:wasm简介,在js逆向中,遇到wasm加密,wasm是通过字节码以二进制格式传输,由于模块的结构,可以通过浏览器并行编译,以便进一步加快速度。

一.问题:

在请求链接上,发现有签名,咋一看像个时间戳进行处理后的数据。

二.解决:

1.全局搜索sign(定位技巧),轻松找到sign,向上看使用$wasm进行加密。

 2.在谷歌中可以看见wasm源码,在火狐中看到就是base64编码,解码后看到的是一串乱码。

    谷歌查看:

    火狐查看:

3.先把wasm文件下载下来。

def get_wasm():
    url = "https://xxxxxxxx/js/Wasm.wasm"
    response = requests.get(url).content
    with open("Wasm.wasm", 'wb') as fp:
        fp.write(response)

 4.安装/导入第三方库pywasm ,pywasm 是一个使用纯 Python 实现的 WebAssembly 解释器。

# pip install pywasm
import pywasm

5.再来分析js加密。

# js加密代码
var n = (this.page - 1) * this.limit,
 e = this.$wasm.asm.encrypt(n, parseInt(Math.round((new Date).getTime() / 1e3).toString()));

# n就是翻页页码减1,再乘10
# parseInt(Math.round((new Date).getTime() / 1e3).toString())就是得到时间戳,取整,转为字符。

6.使用python代码复现。

import pywasm

def get_sign():
    for i in range(3):
        # 得到时间戳,取证
        t = int(time.time())
        # 读取wasm文件
        vm = pywasm.load("./Wasm.wasm")
        # 执行加密
        sign = vm.exec("encrypt", [i, t])
        print(sign)

结束语:怅寥廓,问苍茫大地,谁主沉浮

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白寸(渴~知)

钱包空空如也

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值