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

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

六十四位ELFpython

IDA找main函数数组

image.png

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

分析该函数code

image.png

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

  • 第一组:数组下标依次为0、三、六、9...
  • 第二组:数组下标依次为一、四、七、10...
  • 第三组:数组下标依次为二、五、八、11...
  1. 对输入的字符串的第一组数据进行检验
  2. 对整个字符串进行异或操做
  3. 经过一个while循环对异或后的第二三组数据进行检验

写脚本逆向ast

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?}class

相关文章
相关标签/搜索