题目链接(提取码:8fw3 )
查看文件信息
通过Pyinstaller的python二进制程序,通过pyinstxtractor提取 PyInstaller 生成的 Windows 可执行文件。
项目地址:https://github.com/extremecoders-re/pyinstxtractor
提取后通过Uncompyle6对pyc文件进行反编译。
项目地址:https://github.com/rocky/python-uncompyle6/
结果这里就出现问题了,一直报错:
查了相关资料,解决办法是将struct二进制文件的前八个字节的内容进行替换即可。这个就是魔数的概念了,详细可以看这个uncompyle6反编译报错和PYC 文件的简单分析
省流:把py打包成exe的时候,pyc文件前面的8个字节会被抹掉,所以反编译的时候需要加回来,pyc同目录struct文件前8个字节就是需要的内容。
以下是run.py的反编译源码:
# uncompyle6 version 3.8.0
# Python bytecode 3.7.0 (3394)
# Decompiled from: Python 3.9.12 (main, Apr 4 2022, 05:22:27) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: run.py
from new import *
print('welcome!!!')
flag_input = input('please input flag:')
if set(word) >= set(flag_input):
pt = mmo(flag_input)
flag = pt()
if flag == '5WEU5ROREb0hK+AurHXCD80or/h96jqpjEhcoh2CuDh=':
print('right!!!')
print('your flag: flag{' + flag_input + '}')
else:
print('Error')
else:
print('please input again!')
# okay decompiling .\run.pyc
观察到flag好像是base64加密,结果解密无果。。。
查看调用引用库“new”,查询python没有第三方库,于是猜测可能调用了pyc文件,于是发现下图文件:
将起名字改为new.pcy,程序得以成功运行。(卡了好久,我不知道为什么pycharm还会报红,但是可以运行,算是踩的一个坑了吧!)
简单测试,发现字符串超过一定长度会发生错误:
这里有一个集合大小的判断函数,所以flag_input的内容一定是word集合里面的字符集。
base64直接解码不可以得出!!!
和本题无关
补充: base64的编码规则是三个字符转化为四个字符,根据恒等式“ ’3‘ * 8 == 6 * ’4‘ ”进行转换,不足三个字符的用等号补齐,所以base64编码后的字符串长度一定是4的倍数。
随便输入几下发现了类似于base64,三位换四位,但是后面的结果和前面的有关。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qWhuLdU4-1661822715475)(http://www.furrydragon.top/upload/2022/08/image-1661595328795.png)]
所以三位为一个单位进行暴力破解即可得出flag的真实值:
前30位:
from new import *
a=list(set(word))
print(len(a))
enc= '5WEU5ROREb0hK+AurHXCD80or/h96jqpjEhcoh2CuDh='
b64flag = ''
for i in range(0, 9):
for a1 in a:
for a2 in a:
for a3 in a:
t = b64flag + a1 +a2+ a3
pt = mmo(t)
flag = pt()
if enc.startswith(flag):
# 如果存在将其按顺序重新组合
b64flag = t
print(t)
print(b64flag)
后两位:
from new import *
a=list(set(word))
print(len(a))
enc= '5WEU5ROREb0hK+AurHXCD80or/h96jqpjEhcoh2CuDh='
for a1 in a:
for a2 in a:
t = '8b98aa2e10ac53e21240ee10a9054b' + a1 + a2
pt = mmo(t)
flag = pt()
if enc.startswith(flag):
print("flag is " + t)
解毕!
欢迎留言交流!!!
交流VX:GGBOND-0229
欢迎加入个人二进制学习圈:write-bug学习圈码:40060343