
下载附件拿到一个 exe 文件

使用 exeinfo 检测程序特征,识别为 PyInstaller 打包的 Python 可执行文件

使用 pyinstxtractor 对 附件给的exe 程序进行解包,提取出其中的 .pyc 字节码文件
python pyinstxtractor.py pyre.exe

弄完操作后,就可以得到一个文件夹

打开后,发现了一个 1.pyc 直接就是一眼丁真,这就是我们的目标。
使用 uncompyle6 对 .pyc 字节码进行反编译,还原为 Python 源码:
uncompyle6 1.pyc > 1.py

搞定之后就能得到一个 1.py

打开进去可以看到加密算法

观察校验逻辑可知,每个字符满足:
ord(a[i]) * 33 % 179 == c[i]
由于输入字符范围有限(ASCII),可以通过枚举可打印字符进行反推。
python
c = [144, 163, 158, 177, 121, 39, 58, 58, 91, 111, 25, 158, 72, 53, 152,
78, 171, 12, 53, 105, 45, 12, 12, 53, 12, 171, 111, 91, 53,
152, 105, 45, 152, 144, 39, 171, 45, 91, 78, 45, 158, 8]
mod = 179
flag_ord = []
for target in c:
for ch in range(32,127):
if (ch * 33) % mod == target:
flag_ord.append(ch)
break
print(flag_ord)
flag_str = ""
for i in range(len(flag_ord)):
flag_str += chr(flag_ord[i])
print(flag_str)
运行后就能得到 flag
python
flag{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca}