攻防世界 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

相關文章
相關標籤/搜索