[SUCTF2018]dead_z3r0

知识点

pyc反编译
pyc隐写:stegosaurus

做题过程

010打开:


可以看到文件开头是一段base64, 末尾有一些字符串,猜测是pyc反编译
在线反编译:https://tool.lu/pyc/
反编译出来有点问题

记录一下用uncompyle6进行反编译
参考:https://www.cnblogs.com/pcat/p/11625300.html
uncompyle6是一个原生python的跨版本反编译器和fragment反编译器。uncompyle6可将python字节码转换回等效的python源代码,它接受python 1.3版到3.8版的字节码,这其中跨越了24年的python版本,此外还包括Dropbox的Python 2.5字节码和一些PyPy字节码。
安装:pip install uncompyle6

使用:
uncompyle6 -o . pyc文件名
-o后面可以加上文件路径,代表反编译文件输出的位置,“.”表示输出到当前文件夹
反编译成功后会返回“ # Successfully decompiled file ”


attachment开头的部分应该是密文,写脚本解密:

import base64
import urllib.parse

def decrypt(text):
    key = 'LordCasser'
    cipher = base64.b64decode(text).decode()
    #print(cipher)
    plain=""
    for i in range(len(cipher)):
        plain+=chr(ord(key[i%len(key)])^ord(cipher[i]))
    print(plain)
    print(base64.b64decode(plain).decode())
    print(urllib.parse.unquote(base64.b64decode(plain).decode()))
    
f = open("cipher.txt","r")
decrypt(f.read())

Stegosaurus 是一款隐写工具,它允许我们在 Python 字节码文件( pyc 或 pyo )中嵌入任意 Payload。由于编码密度较低,因此我们嵌入 Payload 的过程既不会改变源代码的运行行为,也不会改变源文件的文件大小。 Payload 代码会被分散嵌入到字节码之中,所以类似 strings 这样的代码工具无法查找到实际的 Payload。 Python 的 dis 模块会返回源文件的字节码,然后我们就可以使用 Stegosaurus 来嵌入 Payload 了。
复制1.pyc到stegosaurus根目录,python stegosaurus.py -x 1.pyc

posted @ 2021-07-13 10:19  云千  阅读(443)  评论(0)    收藏  举报