over 9 years ago
他鄉遇故知 (Cyprto & PPC 200)
描述
逃離到中國的米特尼克與以前的老朋友都失去了聯繫,這讓他常常懷念逝去的時光。在一次潛入某著名外企嘗試獲取重要資料的行動中,米特尼克還沒有拿到目標文件就不幸被保安發現了。在逃離的過程中,他闖進了一個辦公室,結果驚奇地發現自己二十年前的老朋友 Tupper 就在眼前。更神奇的是,Tupper 知道米特尼克需要什麼,給了他想要的東西並且幫助他成功脫逃。你知道米特尼克拿到的信息是什麼嗎? htp://bctf.cn/files/downloads/meeting-tupper_baaa58809f2a0435cb5f282ce4249fdf.txt
提示
- 論文很重要
解法
將該文件下載存為 tupper.txt
後打開,可以發現是加密過後的對話記錄。
嘗試在網路上尋找與 Tupper 有關的資訊後得到 Tupper's self-referential formula,根據該公式撰寫解密程式。
import re
import sys
import numpy
import matplotlib.pyplot as plt
def plot(h, w, k):
g = numpy.zeros((h, w))
def tupper(x, y):
return (y // h // (2 ** (h*x + y%h))) % 2
for y in range(h):
for x in range(w):
g[y][x] = tupper(x, y + k)
plt.imshow(g, cmap='Greys')
plt.gca().invert_yaxis()
plt.savefig('tupper.png', bbox_inches='tight')
plt.show()
if __name__ == '__main__':
h, w, k = map(int, sys.argv[-3:])
plot(h, w, k)
來看看會發生什麼事吧!
$ python tupper.py 17 300 $(ruby -e 'print IO.read("tupper.txt").scan(/\d+/)[0]')`
$ python tupper.py 17 300 $(ruby -e 'print IO.read("tupper.txt").scan(/\d+/)[1]')`
$ python tupper.py 17 300 $(ruby -e 'print IO.read("tupper.txt").scan(/\d+/)[2]')`
$ python tupper.py 61 500 $(ruby -e 'print IO.read("tupper.txt").scan(/\d+/)[3]')
耶比 BCTF{p1e4se-d0nt-g1ve-up-cur1ng}
。