X-CTF(REVERSE高級) 666

主函數輸入的字元會和key比較長度和enflag比較內容,所以這道題的flag和輸入有關

 

 key長度為0x12,enflag的值為:izwhroz""w"v.K".Ni

 

 

 

 對輸入進行加密的函數,首先比較輸入長度是否為0x12,然後以三個數字為一組,每組為一個循環,進行加密。

 

 正確的輸入經過加密等於enflag,所以對enflag的值進行逆向計算可以得到正確的輸入(flag),程式碼如下

key=[]
s="izwhroz\"\"w\"v.K\".Ni"
for i in s:
          key.append(i)
print("key:",key)
#key.reverse()
flag=''

for j in range(0,18,3):
          flag += chr((ord(key[j])^18)-6)

          flag += chr((ord(key[j+1])^18)+6)

          flag += chr(ord(key[j+2])^18^6)
          print(key[j])


print(flag)

有一個坑是+號的優先順序大於^,在第一次運算沒有給ord(key[j])^18這樣的^運算加上小括弧得到了錯誤結果,糾結了很久那裡寫錯了。