hackme.inndy.tw - pyyy

0x01 反编译

1.第一次尝试的时候我直接在线反编译,部分结果如下。

  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 : y(y)(*args)))
  ))
  )((lambda f: (lambda x: if x < 2:
  1None(x - 1) * x % n)
  ))(g % 27777)
      c = raw_input('Channenge #%d:' % i)
      if int(c) != l:
          print 'Wrong~'
          exit()
      z.append(l)
  print ''.join((lambda .0: continue)(range(16))) % ''.join((lambda .0: continue)(range(32)))

可以看到,在有lambda的地方它反编译的效果很差。。。根本看不懂,于是有了第二步。

2.第二次我使用了uncompyle2工具反编译,效果不错

安装及使用参考

反编译结果我就不放出来了,关键代码如下

  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)

### 0x02 分析代码

可以看到只需输入的c和l相等即可,既然我们得到了源码,那么直接把这段check注释掉就好了,然后运行一发就可得到flag~。


> ### 作者: LB919 > > ### 出处:http://www.cnblogs.com/L1B0/ > > ### 如有转载,荣幸之至!请随手标明出处;
posted @ 2018-04-01 14:13  L1B0  阅读(526)  评论(0编辑  收藏  举报