今天一樣是在 Hackme CTF 找題目~因為很多題目都是 linux 環境的執行檔,時間應該會來不及,最後選了一題應該是 Python 環境的題目 pyyy
。
雖然是 Python 題,但後來發現不是 Python 3 而是 Python 2,總之先用 pyenv 裝一下 XD
下載下來是一個 pyc 檔案,其實就是經過編譯的 bytecode,也是可以直接執行的:
> python pyyy.pyc
Channenge #0:
看起來應該是要我們輸入東西來取得 flag。
在 Google 搜尋 pyc,就可以看到前幾個就有反編譯工具,我們丟上去試試看。
解出來大致長這樣(太長了去頭去尾):
...
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)
...
很明顯就是中間的 if int(c) != l:
在影響結果,先把反編譯後的程式碼直接貼到一個新的 .py
檔並執行:
> python pyyy.py
Channenge #0:
看來是可以執行的 XD。
因為有迴圈會跑很多次,我們直接把使用者輸入那行改成 c = l
就可以不用輸入很多次了。
執行,成功得到 flag~
老實說每天都寫真的不太容易 XD,但想著就算寫一點也比放棄好,寫著寫著也過了 2/3 了。確實這樣下來也累積了一些進步,如果這些學習的紀錄剛好能對誰有幫助那就太好了。