准备做一下马上爬的题,不知道能不能做出来,看着来吧。也算是从简单到复杂的一次练习。

网址:

1
aHR0cHM6Ly93d3cubWFzaGFuZ3BhLmNvbS8=

1-3题

1、入门题1

image-20260110112950686

没反爬,复制cURL(bash)到postman,拷贝编写循环

image-20260110113430036

image-20260110113913544

2、入门题2

一切步骤照旧,甚至直接换掉url就能拿到结果

image-20260110143135318

3、入门题3

有反调试检测

image-20260110143329107

打开一个空页面后开启断点后再访问

image-20260110143459974

直接使用两个窗口也一样

image-20260110144812612

或者用抓包工具抓取请求包,同理只需要修改请求url

image-20260110144434786

4-6 题

4、简单题1

抓包,发现有变化值sign,直接搜索

image-20260110145352611

image-20260110145441467

此处很像,符合要求,断点查看一下

image-20260110145812518

此处结果出来,sign为:md5(‘tuling’ + 13位时间戳 + 当前页面),编写代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import requests
import hashlib
import time


def get_time():
return str(int(time.time() * 1000))


def encrypt_md5(text: str) -> str:
"""MD5计算"""
return hashlib.md5((text).encode('utf-8')).hexdigest()


url = "https://www.mashangpa.com/api/problem-detail/4/data/"

headers = {
'cookie': 'sessionid=;'
}

total = 0
for page in range(1, 21):
timestamp = get_time()
data = {
"page": page,
"sign": encrypt_md5('tuling' + timestamp + str(page)),
"_ts": timestamp
}
sign = encrypt_md5('tuling' + get_time() + str(page))
response = requests.get(url, headers=headers, params=data)
for value in response.json()["current_array"]:
total += value

print(total)
5、简单题2

image-20260110221459486

通过抓包得出是将请求体加密了,直接搜索分析加密点

image-20260110221620470

断点后扣代码,发现是RSA加密

image-20260110221848680

直接全部代码扣下来运行,发现报错

image-20260110222519061

补上CryptoJS,运行正确

1
CryptoJS = require('crypto-js')

image-20260110222631424image-20260110222637906

与浏览器一致。其他的没什么需要注意的了

6、简单题3

根据重放不生效得知,请求头有加密,根据题目发现,返回值有加密

image-20260110230445111

image-20260110230512592

直接打上xhr断点,请求后断开

image-20260110232129924

image-20260110232151199

发现核心加密点就在此处,headers的值为window.hhh,返回值加密为xxxxoooo(data.t)

同理全部扣下来,补上CryptoJS,能正常运行,结果一致

image-20260110232932368

image-20260110232954679

从上面的代码能看出是一段AES加密,同时有了密钥和偏移量,直接让AI帮我们写一段解密函数

image-20260110235527568

完成

更多内容也在公众号更新:码字的秃猴

tuhou