python-trade

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}

加油!未来可期!!!

原文地址:https://www.cnblogs.com/rebirther/p/13050713.html