def sub_1591(a1, a2):
val = -10 * a1 + a2 * a1
if (val % 3):
v2 = a1 // a2 + 1
else:
v2 = 4 * (a1 // a2)
return v2 + val
v4 = [0] * 25
v4[0] = sub_1591(3, 11)
v4[1] = 97
v4[2] = sub_1591(1, 61)
v4[3] = 113
v4[4] = sub_1591(11, 13)
v4[5] = 147
v4[6] = sub_1591(15, 27)
v4[7] = 52
v4[8] = sub_1591(3, 41)
v4[9] = 86
v4[10] = sub_1591(2, 20) - 1
v4[11] = 193
v4[12] = sub_1591(2, 93) - 1
v4[13] = 234
v4[14] = sub_1591(4, 57) - 2
v4[15] = 39
v4[16] = sub_1591(6, 13)
v4[17] = 0
v4[18] = sub_1591(4, 32)
v4[19] = 81
v4[20] = sub_1591(2, 19)
v4[21] = 245
v4[22] = sub_1591(10, 23)
v2 = []
v3 = 119
v2.append(v4[0] ^ v3)
for i in range(1, 12):
v2.append(v4[2 * i] ^ v4[2 * i - 1])
v2_string = ''.join(chr(c) for c in v2)
custom_b64 = 'rOGzmPRodD2ZUCMJFVAbIBq/icj5ptu31K7Xn46QT+lsh9efkSwaEv0YyWLxHg8NT'
def char_to_index(c):
return custom_b64.index(c)
def custom_base64_decode(s):
output = bytearray()
i = 0
while i < len(s):
c1 = s[i]
i += 1
c2 = s[i] if i < len(s) else 'A'
i += 1
c3 = s[i] if i < len(s) else 'A'
i += 1
c4 = s[i] if i < len(s) else 'A'
i += 1
b1 = char_to_index(c1)
b2 = char_to_index(c2)
b3 = char_to_index(c3)
b4 = char_to_index(c4)
num = (b1 << 18) + (b2 << 12) + (b3 << 6) + b4
output.append((num >> 16) & 0xFF)
if c3 != '=':
output.append((num >> 8) & 0xFF)
if c4 != '=':
output.append(num & 0xFF)
return bytes(output)
decoded_bytes = custom_base64_decode(v2_string)
flag_content = decoded_bytes.decode('utf-8').strip('\\x00')
print(f"Flag is: scpCTF{{{flag_content}}}")
함수 구현하면 된다.
