REVERSE-像素迷宫
ISCC2026 WriteUp 提交模板
REVERSE-像素迷宫
解题思路


输入从 std::getline 读取,存储到 input 字符串中。然后调用 extractPath 提取 ISCC{...} 中的路径内容,再由 validatePath 验证路径有效性。

validatePath(path)— 从(0,0)出发按路径走,每步调用isValidMove检查方向可行性,验证是否能到达(9,9)isValidMove调用getDecryptedPixel(y, x)获取当前格子的方向位掩码- 位映射: bit0=
E, bit1=W, bit2=S, bit3=N
2迷宫数据


迷宫为 10×10,加密数据分三段存储,统一 XOR 0x7F 解密:
- PART1 (
0x1400bd180): y=0~2 - PART2 (
0x1400bd0e0): y=3~6 - PART3 (函数栈数组): y=7~9
3BFS 解码结果

ISCC{SSENEEESENNEESWSESSSWNNWWWNWSSSWWSSEENESEENEESWSEEES}
Exp
from collections import deque
# ENCRYPTED_PART1 (y=0..2) from 0x1400bd180
part1 = [0x7B, 0x7E, 0xCE, 0xBC, 0x2D, 0xAE, 0xAE, 0x8B, 0x5E, 0xCB,
0x1B, 0x2E, 0xCE, 0x7E, 0x8B, 0xC7, 0x5B, 0xFD, 0xCB, 0x89,
0xDE, 0x07, 0xFB, 0x8D, 0x8E, 0x57, 0x9E, 0xFB, 0xA3, 0xB6]
# ENCRYPTED_PART2 (y=3..6) from 0x1400bd0e0
part2 = [0x9A, 0x8B, 0x5B, 0xB7, 0xDD, 0x7D, 0xED, 0x6B, 0x87, 0x17,
0xD6, 0x85, 0x0B, 0x4A, 0xDB, 0xF9, 0x97, 0xFB, 0x36, 0x4C,
0xFB, 0xAD, 0x1D, 0x87, 0xE3, 0xA5, 0xE7, 0xDD, 0x0E, 0xAD,
0x0B, 0x09, 0xFE, 0x9B, 0xC7, 0xCE, 0x7E, 0xEB, 0x5A, 0xBD]
# Stack part3 (y=7..9) qword low/high dwords extracted from function at 0x1400016b0
part3 = [0xBE, 0xBE, 0x37, 0x2E, 0x7E, 0xB7, 0x8B, 0x1D, 0x66, 0x9D,
0x6E, 0x4A, 0x3C, 0x5A, 0x7D, 0xA9, 0x3E, 0xEE, 0x2E, 0xEB,
0x76, 0xEE, 0x4D, 0x0C, 0x67, 0x49, 0xAD, 0x7C, 0x3D, 0x00]
# Decrypt maze with XOR 0x7F
maze = []
for y in range(10):
row = []
for x in range(10):
if y <= 2:
v = part1[y * 10 + x]
elif y <= 6:
v = part2[(y - 3) * 10 + x]
else:
v = part3[(y - 7) * 10 + x]
row.append(v ^ 0x7F)
maze.append(row)
# Direction mapping from isValidMove
# bit0=E(right), bit1=W(left), bit2=S(down), bit3=N(up)
dirs = [(0, 1, 'E'), (0, -1, 'W'), (1, 0, 'S'), (-1, 0, 'N')]
bit_map = {'E': 1, 'W': 2, 'S': 4, 'N': 8}
# BFS from (0,0) to (9,9)
parent = {}
q = deque()
q.append((0, 0))
parent[(0, 0)] = None
found = False
while q and not found:
cy, cx = q.popleft()
cell = maze[cy][cx]
for dy, dx, name in dirs:
ny, nx = cy + dy, cx + dx
if 0 <= ny < 10 and 0 <= nx < 10 and (ny, nx) not in parent:
if cell & bit_map[name]:
parent[(ny, nx)] = (cy, cx, name)
if ny == 9 and nx == 9:
found = True
break
q.append((ny, nx))
# Reconstruct path
path = []
cur = (9, 9)
while parent[cur] is not None:
cy, cx, d = parent[cur]
path.append(d)
cur = (cy, cx)
path.reverse()
print(f"Flag: ISCC{{{''.join(path)}}}")
print(f"Length: {len(path)}")

浙公网安备 33010602011771号