(wp)buuctf雜項達芬奇密碼

轉自個人博客0pt1mus

buuctf是一個收錄了各個比賽的題目的靶場,真的是什麼題都有,各種腦洞,稀奇古怪的加密編碼類型,甚至還有什麼中文電碼之類的稀奇古怪。

大家有興趣可以去刷刷。

解題思路

首先這道題題目是達芬奇密碼,百度之後發現這是一部電影,當時也沒想的去看一下電影的簡介什麼的,後面加buuctf關鍵字,也沒有找到相應的wp。果斷google,找到大佬的wp,發現在電影簡介中會提到——斐波那契數列。

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309

對比蒙娜麗莎中的數字列,發現數值一樣,但是進行了位移。

之後對比,題目中給到的兩個數列的長度都是32,並且flag也是32位,可以推測,神祕數列是通過flag位移後得出的,而位移的規則是斐波那契數列的位移。

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309

1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711



36968853882116725547342176952286

規則如下:

第零位1還是1,沒有位移。

第一位233是斐波那契數列的第十二位(以0開始算),因此下面神祕數字串的第一位的6是原本flag的第十二位。

第二位3是斐波那契數列的第三位,因此下面神祕數字串的第二位的9是原本flag的第三位。

以此類推…,寫出如下腳本。

# coding=utf-8
fb = '1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309'

t = '1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711 '

m = '36968853882116725547342176952286'
s = 'a' * 32
s = list(s)
fb = fb.split(' ')
t = t.split(' ')


for i in range(32):
    s[fb.index(t[i])] = m[i]
for i in range(32):
    print(s[i], end='')

輸出結果中還存在a,是因爲斐波那契數列中存在兩個1,而在index()找位置的時候,是從前往後找的,因此兩次的1會覆蓋掉。所以要將m中t的第二次出現1的位置上的數替換給a,然後復原被覆蓋的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章