python-trade
難度系數: ⭐⭐⭐
題目來源: NJUPT CTF 2017
題目描述:
菜雞和菜貓進行了一場Py交易
題目場景: 暫無
文件是pyc,直接反編譯出源碼

import base64 def encode(message): s = '' for i in message: x = ord(i) ^ 32 x = x + 16 s += chr(x) return base64.b64encode(s) correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt' flag = '' print 'Input flag:' flag = raw_input() if encode(flag) == correct: print 'correct' else: print 'wrong'
然后分析,大致掃一眼,就是輸入的一個值(flag)等於correct就會輸出correct,基本就清楚了,correct就是flag的值,應該這樣說,flag經過加密最后成了correct。
着手解密就好了
ord(i)返回的是i的ASCLL碼,然后異或32,再移位16,再返回對應的ASCLL碼的值
邏輯清楚了,就可以寫啦
import base64 correct = "XlNkVmtUI1MgXWBZXCFeKY+AaXNt" temp = base64.b64decode(correct).decode("ISO-8859-1") //找了一個帖子,說這里只能用這個編碼,我試了一下,還真是 flag='' for i in temp: s = chr((ord(i)-16)^32) flag += s print(flag)
結果出來了是
nctf{d3c0mpil1n9_PyC}

加油!未來可期!!!
