攻防世界python-trade

攻防世界python-trade

1、题目

攻防世界python-trade

2、下载文件后发现是一个pyc文件,对pyc文件进行反编译

注:pyc文件是python编译产生的中间文件。python是一个先编译再解释型语言。python解释器由一个编译器和一个虚拟机构成,python.exe先将源码编译成字节码(即将.py 文件换转成.pyc 文件),.pyc不是二进制码,而是一种字节码文件,它是与平台无关的中间代码,不管是在Windows 还是Linux 平台都可以执行,运行时再由虚拟机逐行把字节码翻译成目标代码。

方法一:在网上找了一个反编译网站

反编译pyc文件

方法二:利用python命令反编译

pip介绍

1、按装uncompyle库
pip install uncompyle
2、用命令反编译trade.pyc文件并将结果写入trade1.py文件中
C:\Users\Administrator\Desktop\trade>uncompyle6 trade.pyc > trade1.py

反编译结果

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'
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'

3、分析代码内容,我们知道flag进行encode函数中的操作,得到‘XlNkVmtUI1MgXWBZXCFeKY+AaXNt’。因此,我们只要反过来执行,就能够得到flag,写出代码

import base64

def decode(message):
    s = ''
    imessage = base64.b64decode(message)

    for i in imessage:
        x = ord(i) - 16
        x = x ^ 32
        s += chr(x)

    return s

correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'

flag = decode(correct)
print(flag)

4、运行代码,得到flag

nctf{d3c0mpil1n9_PyC}

你可能感兴趣的:(攻防世界python-trade)