攻防世界 reverse-for-the-holy-grail-350
攻防世界 reverse-for-the-holy-grail-350
题目链接
六十四位ELF
IDA找main函数

思路很简单,就一个关键函数,参数为输入的字符串,只要让函数的返回值大于等于零就能成功
分析该函数

该函数整理思路是把字符串分为三组进行检验,每组内的相邻元素的下标相差3
- 第一组:数组下标依次为0、3、6、9...
- 第二组:数组下标依次为1、4、7、10...
- 第三组:数组下标依次为2、5、8、11...
- 对输入的字符串的第一组数据进行检验
- 对整个字符串进行异或操作
- 通过一个while循环对异或后的第二三组数据进行检验
写脚本逆向
firstchar = [65, 105, 110, 69, 111, 97]
thirdchar = [751, 708, 732, 711, 734, 764]
masterArray = [471, 12, 580, 606, 147, 108]
flag = [0] * 18
tem = [0] * 18
v7 = 666
for i in range(18):
tem[i] = v7 # 参与异或的数组
v7 += v7 % 5
# 第一组
index = 0
for i in range(0, 18, 3):
flag[i] = firstchar[index]
index += 1
# 第三组
index = 0
for i in range(2, 18, 3):
flag[i] = thirdchar[index] ^ tem[i]
index += 1
# 爆破第二组
index = 0
for i in range(1, 18, 3):
for j in range(32, 126):
if (flag[i - 1] ^ tem[i - 1]) * (j ^ tem[i]) % (flag[i + 1] ^ tem[i + 1]) == masterArray[index]:
flag[i] = j
index += 1
break
print('tuctf{', end='')
for i in range(len(flag)):
print(chr(flag[i]), end='')
print('}', end='')
flag: tuctf{AfricanOrEuropean?}

浙公网安备 33010602011771号