南郵CTF逆向題第三道Py交易解題思路
首先看題
下載後顯示為Py.pyc 嘗試notepad++開啟顯示亂碼
所以直接百度
#!/usr/bin/env python # encoding: utf-8 import base64 def encode(message): #def定義了一個encode模組的變數 s = '' #為了存入最後的目標串 for i in message: #ord()函式主要用來返回對應字元的ascii碼 x = ord(i) ^ 32 #將輸入的字串中每個字元ascii碼都與32進行異或運算 x = x + 16 #每個都加上16 s += chr(x) #再將它們一個一個轉為字元 return base64.b64encode(s) #最後再將新串進行一次base64加密 correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt' #輸入的串 flag = '' #為了存入最後的目標串 print 'Input flag:' #螢幕提示資訊 請輸入flag flag = raw_input() #獲取輸入 if encode(flag) == correct: #如果加密後的flag與correct相同 輸出correct print 'correct' else: #否則輸出wrong print 'wrong'
所以我們只要將這個串"XlNkVmtUI1MgXWBZXCFeKY+AaXNt"解一次base64
再將每個字元ascii碼都減下16
接著與32異或即可得到flag
解密程式碼如下:
import base64
correct ='XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
s = base64.b64decode(correct)
flag =''
for i in s:
i = chr((ord(i)-16)^32)
flag += i
print flag
執行結果: