攻防世界 reverse-for-the-holy-grail-350

攻防世界 reverse-for-the-holy-grail-350

题目链接
六十四位ELF

IDA找main函数

image.png

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

分析该函数

image.png

该函数整理思路是把字符串分为三组进行检验,每组内的相邻元素的下标相差3

  • 第一组:数组下标依次为0、3、6、9...
  • 第二组:数组下标依次为1、4、7、10...
  • 第三组:数组下标依次为2、5、8、11...
  1. 对输入的字符串的第一组数据进行检验
  2. 对整个字符串进行异或操作
  3. 通过一个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?}

posted @ 2021-02-19 11:35  Auuu  阅读(176)  评论(0)    收藏  举报