(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 | 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还是1,没有位移。
第一位233是斐波那契数列的第十二位(以0开始算),因此下面神秘数字串的第一位的6是原本flag的第十二位。
第二位3是斐波那契数列的第三位,因此下面神秘数字串的第二位的9是原本flag的第三位。
以此类推……,写出如下脚本。
1 | # coding=utf-8 |
输出结果中还存在a
,是因为斐波那契数列中存在两个1,而在index()找位置的时候,是从前往后找的,因此两次的1会覆盖掉。所以要将m中t的第二次出现1的位置上的数替换给a,然后复原被覆盖的值。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 0pt1mus!
评论