附件下载下来,解压,发现是一个python打包的exe
这里用pyinstxtractor进行反编译,后面会得到一个文件夹,里面有一个pyc文件
这里可以用进行网站进行对pyc进行反编译:在线Python pyc文件编译与反编译 (lddgo.net)
反编译的python结果如下:
# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.7
def check():
a = input('plz input your flag:')
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]
if len(a) != 42:
print('wrong length')
return 0
b = None
for i in range(len(a)):
if ord(a[i]) * 33 % b != c[i]:
print('wrong')
return None
print('win')
check()
逻辑还是比较简单的,但就是这个b的值不知道,后面考虑到前四个字符固定是"flag",所以可以先把b给爆破出来,爆破b的脚本如下:
str=[144,163,158,177] flag="flag"for j in range(len(flag)): for b in range(1,1000): if (ord(flag[j])*33)%b==str[j]: print(b) 运行结果如下:
可以得到b=179,接着跟着代码逻辑继续爆破:
flag="" b=179 for i in range(len(c)): for num in range(32,127): if num*33%b==c[i]: flag+=chr(num) print(flag) 运行结果: flag:flag{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca} ps:如果一开始用uncompyle6进行反编译pyc文件的话,b的值是可以反编译出来的,也就不用去爆破b的值 标签:反编译,爆破,--,range,re,flag,2022,print,pyc From: https://www.cnblogs.com/GGbomb/p/17823072.html