JS逆向:Wasm文件导出函数的调用|猿人学爬虫对抗赛第十五题

2023-10-14 00:30

本文主要是介绍JS逆向:Wasm文件导出函数的调用|猿人学爬虫对抗赛第十五题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实战地址

http://match.yuanrenxue.com/match/15

抓包分析

地址栏输入 地址,按下F12并回车,发现数据在这里:

cookie无加密,有个params参数m,切换 Initiator,查看调用栈:

跟踪进去,直接就跟踪到了数据加密及发送的地方:

关键加密函数 window.q,控制台输入,发现无法跟进,看到上面的定义代码,原来是  WebAssembly。没接触过,该怎么办?

不慌,我们有强大的搜索引擎。

wasm逆向分析

通过一番搜索后,找到了wasm文件的在线解析网站:

https://webassembly.github.io/wabt/demo/wasm2wat/

上传文件后,解析的部分代码如下:

快1000多行的代码,如果硬刚的话,是不是有点掉头发?

不慌,继续使用搜索引擎,看看有没有直接调用wasm文件的库。

通过一番搜索后,找到了 pywasm 这个库:

http://accu.cc/content/py/pywasm/overview/

根据它上面的示例代码,很快就写出了爬取代码:

# -*- coding: utf-8 -*-
import math
import random
import time
import pywasm
import requestsdef main():sums = 0headers = {"User-Agent": "yuanrenxue.project",}t = int(time.time())t1 = int(t / 2)t2 = int(t / 2 - math.floor(random.random() * 50 + 1))vm = pywasm.load("./main.wasm")r = vm.exec("encode", [t1, t2])m = f"{r}|{t1}|{t2}"for i in range(1, 6):params = {"m":m,"page":i,}response = requests.get(url="http://match.yuanrenxue.com/api/match/15",params = params,headers=headers).json()for each in response["data"]:print (each["value"])sums += each["value"]print(sums)# 219388if __name__ == "__main__":main()

部分代码由 @Sitoi提供,在此感谢。

通篇下来,基本没啥难度吧。

遇到这类问题时先不要慌,搜索引擎能解决 99% 的问题,另外1%可能就需要充钱解决了。

这篇关于JS逆向:Wasm文件导出函数的调用|猿人学爬虫对抗赛第十五题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/206898

相关文章

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

js+css二级导航

效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

Python爬虫-贝壳新房

前言 本文是该专栏的第32篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某房网为例,如下图所示,采集对应城市的新房房源数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM6Ly93aC5mYW5nLmtlLmNvbS9sb3VwYW4v 目标:采集对应城市的

js小题:通过字符串执行同名变量怎么做

在JavaScript中,你不能直接使用一个字符串来直接引用一个变量,因为JavaScript是一种静态类型语言(尽管它的类型在运行时可以变化),变量的名字在编译时就被确定了。但是,有几种方法可以实现类似的功能: 使用对象(或Map)来存储变量: 你可以使用一个对象来存储你的变量,然后使用字符串作为键来访问这些变量。 let myVars = { 'var1': 'Hello', 'var

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3

神经网络第一篇:激活函数是连接感知机和神经网络的桥梁

前面发布的文章介绍了感知机,了解了感知机可以通过叠加层表示复杂的函数。遗憾的是,设定合适的、能符合预期的输入与输出的权重,是由人工进行的。从本章开始,将进入神经网络的学习,首先介绍激活函数,因为它是连接感知机和神经网络的桥梁。如果读者认知阅读了本专题知识,相信你必有收获。 感知机数学表达式的简化 前面我们介绍了用感知机接收两个输入信号的数学表示如下:

逆向学习汇编篇:内存管理与寻址方式

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/3ceeb9ae6d98​​ 在汇编语言的世界中,内存管理和寻址方式是构建程序的基础。理解这些概念不仅对于编写高效的汇编代码至关重要,也是进行逆向工程分析的关键技能。本文将深入探讨内存管理的基本原则和多种寻址方式,并通过代码案例来展示它们的实际应用。 1. 内存管理 内存管理涉及如何分配