avatar

(wp)buuctf杂项达芬奇密码

buuctf是一个收录了各个比赛的题目的靶场,真的是什么题都有,各种脑洞,稀奇古怪的加密编码类型,甚至还有什么中文电码之类的稀奇古怪。

大家有兴趣可以去刷刷,很棒的刷题地方。

解题思路

首先这道题题目是达芬奇密码,百度之后发现这是一部电影,当时也没想的去看一下电影的简介什么的,后面加buuctf关键字,也没有找到相应的wp。果断google,找到大佬的wp,发现在电影简介中会提到——斐波那契数列。

1
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
2
3
4
5
6
7
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的第三位。

以此类推……,写出如下脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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,然后复原被覆盖的值。

文章作者: 0pt1mus
文章链接: https://superj.site/2020/03/26/20200326003719/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 0pt1mus

评论