攻防世界--python-trade

末鹿安然 提交于 2019-11-28 18:34:59

测试文件:https://adworld.xctf.org.cn/media/task/attachments/69c8f29912ae4f679d92a6cd36c33196.pyc

 

这里需要用到一个pyc文件反编译的工具,可以使用在线https://tool.lu/pyc/,也可以使用命令下载

pip install uncompyle

 

1.准备

pyc文件就是 py程序编译后得到的字节码文件 (py->pyc)

 

2.pyc文件逆向

在命令窗口执行

uncompyle6 test.pyc > test.py

打开得到的test.py

# uncompyle6 version 3.4.0
# Python bytecode 2.7 (62211)
# Decompiled from: Python 2.7.16 (default, Apr  6 2019, 01:42:57) 
# [GCC 8.3.0]
# Embedded file name: 1.py
# Compiled at: 2017-06-03 10:20:43
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'
# okay decompiling test.pyc

 

2.1 代码分析

通过查看这段Python2代码,我们知道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)

 

3.get flag!

nctf{d3c0mpil1n9_PyC}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!