[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


浙公网安备 33010602011771号