over 9 years ago

他鄉遇故知 (Cyprto & PPC 200)

描述

逃離到中國的米特尼克與以前的老朋友都失去了聯繫,這讓他常常懷念逝去的時光。在一次潛入某著名外企嘗試獲取重要資料的行動中,米特尼克還沒有拿到目標文件就不幸被保安發現了。在逃離的過程中,他闖進了一個辦公室,結果驚奇地發現自己二十年前的老朋友 Tupper 就在眼前。更神奇的是,Tupper 知道米特尼克需要什麼,給了他想要的東西並且幫助他成功脫逃。你知道米特尼克拿到的信息是什麼嗎? htp://bctf.cn/files/downloads/meeting-tupper_baaa58809f2a0435cb5f282ce4249fdf.txt

提示

  1. 論文很重要

解法

將該文件下載存為 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}

← BCTF 誘補陷阱 Writeup BCTF 真假難辨 Writeup →