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這樣的^運算加上小括弧得到了錯誤結果,糾結了很久那裡寫錯了。

