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}
加油!未来可期!!!