解密:粽子的密码

2020-07-27 15:41:48 浏览数 (1)

两天前的这次粽子红包解密活动受到了许多读者的关注,许多读者都在询问解题方法。

活动回顾:我打赌!90%程序员都破解不了这个粽子,不信你试!

如今所有红包都已经领完了,今天就来解答一下一下通关方法。

第一关

入口是这张粽子图片:

稍微仔细一点看就能看到左边有一个二维码:

够明显的了吧?话说当初我想调得更淡一点,直到肉眼看不出来,不过想了想还是让大家都能发现,这样参与的人才积极。

不过二维码虽然发现了,很多人后台留言说扫不出来,那是自然,如果这样直接就扫出来了,那还算是一个关卡吗?想扫描出来还是需要费点功夫的!

最直接的想法就是用PS调整图片的色阶、颜色通道值等等手段,把二维码对比加深,直到能够扫描出来位置。

这里推荐一个在线的PS工具,简单轻便,绝大部分日常用到的功能都覆盖了,不需要再单独去装一个PhotoShop,费时费力

https://www.uupoop.com/

当然这里PS操作不只一种方式,这里只举一种方法

打开图片,通过调整图片

先进行反向:

接着进行黑白调整,直到可以清晰看到二维码:

扫描即可得到第一关的口令和下一关的入口:

第二关

上面得到的第二关是一个URL:

https://static01.imgkr.com/temp/a9032397b67b4ecf919cd0e1db5c764e.png

浏览器中打开它,看到的是一个满是字符的png图片:

一眼就可以看出这肯定是经过什么编码算法处理过的,可以从常用的编码算法来进行尝试解码。继续观察字符特征,可以基本判断就是base64编码!

不过想要解码的前提是得拿到这一段字符文本,现在摆在面前的是一张图片,如何把图片中的字符提取出来呢?

这一关的关键就是这里!

从图片中提取文本,自然就是OCR技术了!

找一找在线的OCR服务,基本都会面临一个问题就是:

  • 0 和 O
  • 1 和 l
  • w 和 vv

绝大多数的OCR服务都无法完美的区分这三种情况,所以在OCR帮我们完成了主要工作后,还需要手动来校验,所以这里还需要考验一下大家的细心和耐心。

当然如果你不去校验的话,直接拿着OCR识别的结果去base64解码,也能拿到第二关的口令:

第三关

第二关解码的结果中,除了有第二关的口令以外,还有另一段编码内容。

这里需要强调的是:如果在第二关中的OCR识别结果没有做校验,那么解码得到的内容就会出错,也将会影响到第三关的解题。

这一段编码又是一层base64编码,你说我怎么知道是base64?

首先,base64是最常用的编码算法,所以首先应该尝试它,如果不对再想其他编码算法。

其次,观察编码串出现的字符,base64就是26个英文字符的大小写共计52个、10个阿拉伯数字、加号 、斜杠/,共计64个字符。

那不对啊,前面的图片中有等于号=出现呢,注意,这也就是base64的一个非常重要的特征,具体原因可以看一下base64编码方式,总之记住,如果出现只有上面64个字符的情况,再如果结尾还有等号出没的情况下,基本上就是base64没跑了。

当然除了base64还有很多变种,比如base85、base92、base128等众多算法。

将第二关解码的这一串字符串,再次解码:

这次发现,左边乱码了!!!

再观察,开头出现了PNG三个特征字符,有理由怀疑,这是一个PNG图片的编码结果。

打开Python,六行代码,将解码的结果写成一个后缀为png的图片文件:

代码语言:javascript复制
import base64
content = 'iVBORw0KGgoAAAANSUhEUg···' # 省略完整字符串
decodeContent = base64.b64decode(content)
fo = open("3.png", "w")
fo.write(decodeContent)
fo.close()

打开生成的文件,第三关的口令随之揭晓:

而这个最终关的口令,其实一直都在文章的这张图中:

总结

这一次端午节游戏,没想到大家热情都挺高的,这有点出乎我的意料,感谢大家的捧场支持。

本次活动只是牛刀小试,不久之后的关注破万活动,更多有趣的玩法,更加刺激的套路,更加多元的技术知识,更加心动的红包将向你砸来,期待大家的继续支持和参与!

0 人点赞