def zigzag_indices(h, w): """ 生成 h x w 矩阵的二维 zigzag 顺序坐标 """ result = [] for s in range(h + w - 1): diag = [] r_start = max(0, s - (w - 1)) r_end = min(h - 1, s) for r in range(r_start, r_end + 1): c = s - r diag.append((r, c))
if isinstance(vocab, list): idx2char = {i: ch for i, ch in enumerate(vocab)} elif isinstance(vocab, dict): if all(isinstance(k, int) for k in vocab.keys()): idx2char = vocab else: idx2char = {v: k for k, v in vocab.items()} else: raise TypeError("unknown vocab format")
result = []
for vec in cache: # 计算与所有 embedding 向量的距离 dists = torch.norm(emb - vec.unsqueeze(0), dim=1) idx = torch.argmin(dists).item() result.append(idx2char[idx])
flag = "".join(result) print(flag)
解得最后的flag为DesCTF{n3ur4l_st3g0_1n_emb3dd1ng_sp4c3}
infrared_code
根据题意,遥控操作中隐藏着某种暗号信息,我们打开文件看看
打开ir_challenge.txt,我们可以看到里边是很多的地址和命令,这个文件包含了捕获的红外信息数据,也即是NEC扩展协议,在pdf可以看到这台电视配的是 IR / EN2B36H 遥控器
for idx, seg in enumerate(segments, 1): for ch in seg: if ch == "U": r = (r - 1) % 6 # 纵向环绕 elif ch == "D": r = (r + 1) % 6 elif ch == "L": c = max(0, c - 1) # 水平不环绕 elif ch == "R": c = min(5, c + 1)
cur = grid[r][c]
# 第12次确认实际上是“删除”操作,删掉上一个字符 if idx == 12: if out: out.pop() else: out.append(cur)
result = "".join(out) print(f"Flag: flag{{{result[4:].lower()}}}")
# From the recovered hint.dll / screenshots. # `p` is the Shamir field modulus. P = int( "666c61677b3431e120579912cdf6831aed2476b0f3fab7c37b86a5c7b847e226a97f72f45783", 16, )
# These are the corrected values that appeared in the earlier recovery session. # Two shares were copied from evidence with the same truncation that the prior solve used. SHARES = [ int("4e769b2cb222e299d33ea4b89e2831e12399a6b0117336e981a567371726b3368c73f3488e18", 16), int("47bb1ac5f6a422e8b4d483334b5d7fe2f8bae6ae665322ff30b2cade7f03e434a2e849d08599", 16), int("3f961ff18045be09c0ef92b6a5813cdfe8dc365f613b130ed430095e657c8391a1c03ac5ace5", 16), int("f0fe0b8be939ecd598f774ca043352f43dfb9fa3b74678aa9f9c9f68ab385f071d84376e64e", 16), int("4a37c5fad9d060d12f2cf65650fdd718d18d7e0a777276e85e1dd70a4a3c5b842d1feb896c42", 16), ]
def lagrange_at_zero(xs, ys, mod): total = 0 for i, xi in enumerate(xs): num = 1 den = 1 for j, xj in enumerate(xs): if i == j: continue num = (num * (-xj)) % mod den = (den * (xi - xj)) % mod total = (total + ys[i] * num * pow(den, -1, mod)) % mod return total