图灵逆向——题十一-wasm小试牛刀
典型的wasm
加密逻辑,适合新手入门的JS
逆向案例~
过程分析
打开控制台,直接看请求,发现头里面没有,载荷里面有一个m
,那这个m
参数就是我们要逆向的值了,下面的_ts
是个十位!!
的时间戳。。(不是13位的,看仔细~)
还是跟踪启动器,找到最后的位置,打上断点跟栈分析~
跟到loadPage
这里的时候发现m
参数就是在这里生成的了。。。
所以在生成的地方打上断点,开始分析逻辑~
上面内个e
就是生成了一个十位的
时间戳,主要还是下面的这个f
参数。
继续往下跟就会发现加密的具体位置了
所以这个window['exports']['encrypt']
就是核心加密方法了,进去看一下,你会发现它是依托。。。
这里可以看到,这是一个用 WebAssembly Text Format (WAT) 编写的模块,WAT 是 WebAssembly(Wasm)
的一种人类可读的表示形式。这一段代码大致可以分为几个部分,主要实现了栈的管理以及一个名为 encrypt
的函数。
所以核心的加密逻辑就是这个encrypt
函数咯。。。
(func $encrypt (export "encrypt")
(param $var0 i32) ;; 第一个参数:整数类型,记作 var0
(param $var1 i32) ;; 第二个参数:整数类型,记作 var1
(result i32) ;; 函数返回一个整数
local.get $var0 ;; 将参数 var0 压入栈顶
local.get $var1 ;; 将参数 var1 压入栈顶
i32.const 3 ;; 压入常数 3
i32.div_s ;; var1 / 3(带符号整数除法)
i32.add ;; 结果 + var0
i32.const 16358 ;; 压入常数 16358
i32.add ;; 再加上 16358
)
这样是不是就能看懂了[doge],所以这其实不是一种加密,就是进行了一个数学运算而已,直接用python
模拟即可。。。
OK逆向结束~
代码实现
贴出代码如下:
"""
-*- coding: utf-8 -*-
@File : .py
@author : @鲨鱼爱兜兜
@Time : 2025/04/06 19:37
"""
import time
import requests
cookies = {
'sessionid': '你的值',
'Hm_lvt_b5d072258d61ab3cd6a9d485aac7f183': '1743870511,1743871379,1743932867,1743933915',
'HMACCOUNT': '你的值',
'Hm_lpvt_b5d072258d61ab3cd6a9d485aac7f183': '1743938833',
}
headers = {
'accept': '*/*',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'no-cache',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://stu.tulingpyton.cn/problem-detail/11/',
'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
}
s = 0
for page in range(1, 21):
_ts = int(time.time())
params = {
'page': f'{page}',
'm': f'{int(page + (_ts / 3) + 16358)}',
'_ts': f'{_ts}'
}
response = requests.get('https://stu.tulingpyton.cn/api/problem-detail/11/data/', params=params, cookies=cookies,
headers=headers)
response.raise_for_status()
response.encoding = 'utf-8'
print(response.json())
s += sum(response.json()['current_array'])
print(s)
第十一题,秒了~[doge]
@鲨鱼爱兜兜