0%

ISCC-1

36

1、迷失之门

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
def reverse_simulate_check(transformed_string):

​ v16 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 大写字母
​ v10 = "abcdefghijklmnopqrstuvwxyz" # 小写字母
​ v4 = "0123456789+/-=!#&*()?;:^%" # 特殊字符和数字
​ v3 = "DABBZXQESVFRWNGTHYJUMKIOLPC" # 转换基准

​ possible_inputs = []

# 遍历转换后的字符串

for i in range(len(transformed_string)):
​ transformed_char = transformed_string[i]
​ current_v3_char = v3[i % len(v3)]
​ possible_chars = []

# 检查 v16

for index, char in enumerate(v16):
if char == transformed_char:
​ original_char = chr(ord(current_v3_char) + index)
if 32 < ord(original_char) != 127:
​ possible_chars.append(original_char)

# 检查 v10

for index, char in enumerate(v10):
if char == transformed_char:
​ original_char = chr(ord(current_v3_char) + index + 26)
if 32 < ord(original_char) != 127:
​ possible_chars.append(original_char)

# 检查 v4

for index, char in enumerate(v4):
if char == transformed_char:
​ original_char = chr(ord(current_v3_char) + index + 52)
if 32 < ord(original_char) != 127:
​ possible_chars.append(original_char)

​ possible_inputs.append(possible_chars)

return possible_inputs

# 已转换后的字符串

transformed_string = "FSBBhKrVSGeafuZDJkuYqROaYY6"
original_input_possibilities = reverse_simulate_check(transformed_string)
for i, possibilities in enumerate(original_input_possibilities):
print(f"Character position {i+1} possible originals: {possibilities}")

得到flag ISCC{b|Ze\dlv|`WQ}xmw\Widh}

37

  1. 函数声明:这是main函数的入口,采用标准的C++形式,接收命令行参数。

  2. 关键逻辑分析

    • if (strlen(Buffer) <= 0x1B)
      

      :这个条件检查输入的长度是否小于等于27个字符。

      • 如果是,进入循环检查Buffer中的字符:

        • 循环从索引5到25,检查字符是否是小写字母或下划线(islower(Buffer[i]) || Buffer[i] == '_')。如果不是,v7设为0。
        • 调用check(Buffer)函数,此函数可能是用来检查Buffer中是否包含有效的flag。
    • 如果输入长度超过27个字符,输出一条错误消息并暂停。

Check

38

初始化了三个字符数组:

  • v16 存储大写字母 A-Z。
  • v10 存储小写字母 a-z。
  • v4 存储数字和特殊字符。
  • v3 存储了一个特定的字母序列 “DABBZXQESVFRWNGTHYJUMKIOLPC”,看起来像是一个密钥或映射。

  • 循环遍历输入字符串 a1

    ,对每个字符进行检查和变换:

    • 跳过ASCII值为127和小于等于32的字符(控制字符和空白)。
    • 对于其他字符,根据与v3中对应位置字符的差值,进行替换:
      • 如果差值小于或等于0,输出”flag is wrong”。
      • 如果差值在1到25之间,使用 v16(大写字母)中对应的字符替换。
      • 如果差值在26到51之间,使用 v10(小写字母)中对应的字符替换。
      • 如果差值大于51,使用 v4(数字和特殊字符)中对应的字符替换。

check2

39

验证输出,这里相当于直接告诉你flag要求了,写个脚本秒了

transformed_string = “FSBBhKrVSGeafuZDJkuYqROaYY6”

image-20240510231929311

image-20240510232036513

-------------本文结束感谢您的阅读-------------