暑假的时候看到的,第一天和别的比赛冲撞了,一直想复现

签到题

字符串点进来就可以看见这个界面,查看第一个第二个

image-20251007113550649

在第二个里面可以定位到这个函数里面

image-20251007113714279

第二题

check函数那很奇怪,把retn函数nop掉就可以看到真正的check函数

image-20251007135458249

ai一下看来是一个迷宫题

image-20251007151402090

起点和终点已经标出来了,而且dword_703020形成array的开头和结尾正好是这两个,直接写脚本拿出map,再在20F8上array拿到映射表

image-20251007151536192

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import math
from collections import deque

# ---------- 判断质数 ----------
def is_prime(n: int) -> bool:
if n < 2:
return False
if n == 2:
return True
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True

# ---------- 判断是否为两个质数的乘积 ----------
def defactor_prime(n: int) -> bool:
if n < 4:
return False
for p in range(2, int(math.sqrt(n)) + 1):
if n % p == 0:
q = n // p
if is_prime(p) and is_prime(q):
return True
return False

# ---------- 数据 ----------
maze_data = [
0x2C0E, 0x1312, 0x7F44, 0x4C2B, 0x966, 0x1E12, 0x1263, 0x1828, 0x31A1, 0x52AE,
0x1DC6, 0x4019, 0x3D89, 0x614D, 0x1A4A, 0x3A24, 0x5406, 0xE61, 0x658, 0xD4C,
0x5423, 0x4860, 0x7988, 0x1FA3, 0x705B, 0x4464, 0x63EF, 0x403E, 0x50CB, 0x1676,
0x5132, 0x68B5, 0x4A38, 0x6FF5, 0x189B, 0x170B, 0x2704, 0x20ED, 0x4938, 0x47F6,
0x7512, 0x5196, 0x2B7C, 0x4A50, 0x2E54, 0x6FBE, 0x3532, 0x7B54, 0xABD, 0x2889,
0x56C0, 0x323B, 0x3698, 0x31CF, 0x435A, 0x75FA, 0xA2B, 0x200B, 0x45ED, 0x163F,
0x2554, 0x62BB, 0x3393, 0x2A31, 0x2956, 0x3004, 0x3684, 0x3DEE, 0x47AC, 0x2267,
0x629E, 0x1E93, 0x7943, 0x661B, 0x7FB4, 0x255A, 0x3D37, 0x1804, 0x69E1, 0x312C,
0x3999, 0x293F, 0x2F0E, 0x743A, 0x117, 0x64CD, 0x7C76, 0x5CBF, 0x6AB0, 0x585,
0x6CFC, 0x3CE6, 0x6FAB, 0xF81, 0x511C, 0x24E4, 0x785, 0x5AEB, 0x2977, 0xBFB,
0x55F8, 0x39, 0x29DD, 0x4987, 0x133B, 0x5E2F, 0x7F4D, 0x6497, 0x62C2, 0x3774,
0x1826, 0x78C, 0x20BB, 0x5473, 0x68B6, 0x27FB, 0x7321, 0x1B0E, 0x6280, 0x54E2,
0x5133, 0x61E7, 0x2F6B, 0x5AE2, 0x1B09, 0x64BB, 0x71B, 0x6272, 0x453F, 0x22BD,
0xD68, 0x52A9, 0x3116, 0x19AD, 0x28F6, 0x141E, 0x6B10, 0x32AC, 0x2394, 0x353D,
0x6A40, 0x697, 0x80E, 0x6883, 0x4297, 0x175D, 0xB3A, 0x4584, 0x4FB8, 0x55D2,
0x2592, 0x5F99, 0x5986, 0x5A84, 0x71A3, 0x3975, 0x525, 0x3E15, 0x823, 0x12D7,
0x78EF, 0x636B, 0x471A, 0x531C, 0x23F8, 0x38D7, 0x7E64, 0x18DB, 0x344E, 0x5655,
0x1C69, 0xEE8, 0x23C, 0x25C8, 0x684, 0x776D, 0xB65, 0x7855, 0x602D, 0x277E,
0x60AC, 0x1885, 0x6E40, 0x3EEC, 0x175C, 0xD2B, 0x4F2E, 0x645, 0x6C70, 0x457D,
0x5CD8, 0x2B12, 0x11C, 0x7AAD, 0x2E5E, 0x37CB, 0x5CF8, 0x5C48, 0x648F, 0x3841,
0x6344, 0x7F63, 0x5C2, 0xBE2, 0x717A, 0x7317, 0x711A, 0x4344, 0x319, 0x756E,
0x2F5E, 0x6EF2, 0x23B0, 0x1ED5, 0x5A1B, 0x5FFF, 0x7494, 0x5C4C, 0x7D2C, 0x2C51,
0x4BE4, 0x5197, 0x2384, 0x64DD, 0x62E9, 0x5019, 0x447E, 0x1DA1, 0x70B3, 0x5B03,
0x17BC, 0x4ED4, 0x3E1F, 0x26F8, 0x2AF2, 0x7B64, 0x4634, 0x69D9, 0x75A, 0x344B,
0x27D0, 0xC9C, 0x385E, 0x2496, 0x5635, 0x57AA, 0x44A8, 0x62AF, 0x65E7, 0x3284,
0x7A73, 0x1CCF, 0x25F4, 0x5DCD, 0x5CDE, 0x109B, 0x7890, 0x45CF, 0x5FEF, 0x4ABB,
0x26, 0x47D, 0x6121, 0x3A42, 0x5519, 0x32AF, 0x2096, 0x18E7, 0x4181, 0x1FB2
]

# ---------- 构建地图 ----------
layers, rows, cols = 3, 9, 10
maze = [[[ '#' for _ in range(cols)] for _ in range(rows)] for _ in range(layers)]

for layer in range(layers):
for i in range(rows):
for j in range(cols):
idx = layer * 90 + i * 10 + j
if defactor_prime(maze_data[idx]):
maze[layer][i][j] = '.'

# 起点终点
start = (0, 0, 0)
end = (2, 8, 9)
maze[start[0]][start[1]][start[2]] = 'E'
maze[end[0]][end[1]][end[2]] = 'S'

# ---------- BFS 搜索路径 ----------
dirs = [
(-1, 0, 0, 'u'), (1, 0, 0, 'n'),
(0, -1, 0, 'w'), (0, 1, 0, 's'),
(0, 0, -1, 'a'), (0, 0, 1, 'd'),
]

def bfs():
q = deque([(start, '')])
visited = set([start])
while q:
(z, y, x), path = q.popleft()
if (z, y, x) == end:
return path
for dz, dy, dx, move in dirs:
nz, ny, nx = z + dz, y + dy, x + dx
if 0 <= nz < layers and 0 <= ny < rows and 0 <= nx < cols:
if maze[nz][ny][nx] in ('.', 'S') and (nz, ny, nx) not in visited:
visited.add((nz, ny, nx))
q.append(((nz, ny, nx), path + move))
return None

path = bfs()

# ---------- 打印迷宫 ----------
for l in range(layers):
print(f"\nLayer {l}:")
for row in maze[l]:
print(''.join(row))

# ---------- 输出路径 ----------
if path:
print("\n找到路径!")
print("wasdun 路径指令:")
print(path)
print(f"\n路径长度: {len(path)}")
else:
print("\n没有找到通路。")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
table = '0123456789abcdefghijklmnopqrstuvwxyz'
path = 'dsuddssaassddnssaauasuddddwwndddnwaawwuddwwdusdsssasssd'

state = [0, 0, 0]
key = []

# 添加起点编码(S)
key.append(table[state[1] % len(table)])
key.append(table[(state[0]*12 + state[2]) % len(table)])

for step in path:
if step == 'd': state[2] += 1
elif step == 'a': state[2] -= 1
elif step == 's': state[1] += 1
elif step == 'w': state[1] -= 1
elif step == 'u': state[0] += 1
elif step == 'n': state[0] -= 1

key.append(table[state[1] % len(table)])
key.append(table[(state[0]*12 + state[2]) % len(table)])

print(''.join(key))

第三题

这道题就很恼人了 额

对我这个没耐心的人来说有点折磨 等我慢慢分析一下