pyyy

[src = hackme] pyyy

题目描述

Can you pass the challenage?

WP

下载题目文件为一个pyc文件(python字节码文件,有python虚拟机解释执行),因此首先需要反编译,这里我们使用uncompyle6来反编译。

如果没有安装,可以使用下面的命令安装:

1
pip install uncompyle6

安装成功后使用该工具反编译题目给定的pyc文件:

1
uncompyle6 pyyy.pyc > pyyy.py

反编译后的结果保存为python源代码文件pyyy.py。打开阅读发现有有大片数据,关键代码在一个用户输入的位置,源代码对l和c进行比较,如果输入的c与l不相等,就退出了,再读代码发现程序的结果实际跟输入没有关系,所以直接注释掉输入和判断语句执行,就得到flag。注释部分(代码中带#部分)如下所示:

1
2
3
4
5
6
7
8
9
for i, f in enumerate(F):
n = pow(f, m, g)
this_is = 'Y-Combinator'
l = (lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args))))(lambda f: lambda x: 1 if x < 2 else f(x - 1) * x % n)(g % 27777)
# c = raw_input('Channenge #%d:' % i)
# if int(c) != l:
# print 'Wrong~'
# exit()
z.append(l)

然后运行得flag:

1
2
bitsec@bitsec-ubuntu:~/hackme/pyyy$ python pyyy.py
flag is FLAG{VBXDVV4jkVVS4hVVj7NVV1heVVX1jVVh}