程序员密码

这几天在V2EX上看到一个面向程序员的小游戏——在网页中找到一个隐藏的密码即可过关。游戏目前总共有两个level, level1有10道题,level2有5道题。游戏规则虽然简单,但是想要过关还是需要掌握不少知识,比如:’Chrome Developer Tools’工具使用、Baes64解码、图片隐写术等等。
游戏挺有意思的,在这里记录下,写者无心,读者请闭眼。

Level1

进入游戏只有一个密码输入框,第一反应是打开开发者工具,寻找蛛丝马迹。通过细心观察,果然发现Console有信息打印,并且对源码进一步分析,游戏核心代码在js/app/level.js文件里。level.js粗略看下来,主要包含两部分重要信息:关卡通过对玩家输入的密码进行md5加密验证以及每个关卡执行的函数(存放在LevelManager.prototype.levels数组里)。
总体分析下来,得到的信息如下:
1)Console有信息提示
2)每个关卡的触发函数
3)md5加密

level1-0

密码:

1
Hello, world!

level1-1

Console打印的信息进行Base64解码 (为啥会想到Base64?因为字符最后的=号)
密码:

1
I'm a programmer.

level1-2

cGluZyB3d3cucHJvZ3JhbW1lcnBhc3N3b3JkLmNvbQ==进行Base64解码,得到

1
ping www.programmerpassword.com

进而在终端执行ping,获取ip地址
密码:

1
47.104.152.148

level1-3

本关卡没有在Console里打印信息,但是通过对关卡函数分析,本关卡在页面上插入了一段html代码,并且设置了透明样式。
密码:

1
密码是123456

level1-4

Console打印了一串数字,使用String.fromCharCode()将十六进制整数转ascii码。
密码:

1
Bug running

level1-5

本关卡在页面上插入了一段html代码,只显示了一个#。开始以为是和jQuery的id选择器有关,结果答案却是#文字的RGB颜色值。
密码:

1
#2f4584

level1-6

图片的Base64编码,需要添加头部data:image/jpeg;
密码:

1
463700

level1-7

访问img.src指定的url。
密码:

1
better to miss than to meet

level1-8

Console里输入window.getPassword("H4sIAAAAAAAAC7MPcHq2ZWH987ndEfYA5w4bAwwAAAA=")
密码:

1
25LTQWMP9Y

level1-9

最坑爹的关卡,以为密码会隐藏在给出的PHP代码里,然而,然而,被坑了。。。把图片下载下来,然后使用十六进制编辑器打开图片,从jpg图片里可找到cd /data/log/../www/; pwd附加信息。
jpg隐写技巧原理可以参考这篇文章隐写技巧-利用JPEG文件格式隐藏payload
密码:

1
/data/www

总结Level1关卡,整体难度其实并不高,只要善于使用谷歌开发者工具以及掌握Html&Css、Base64编码、JPG隐写术等知识点就能轻松过关。

Level2

Level2总共有5道题,虽然题目减少,但是难度较Level1提升了好几个档次。当然,坑更多…

level2-0

页面提示区显示了一段乱码,显然本关卡只需要解决乱码问题即可找到密码。
打开开发者工具,找到发起的ajax请求,如下图:
关卡请求
通过分析可以发现,Html页面编码采用UTF-8,而ajax请求Http Response Content-Type Header设置了GBK编码类型,这就是导致乱码的原因。破解此题,只需如下操作:
拷贝Curl请求
右键拷贝curl请求,然后打开终端,执行curl请求:
执行Curl请求
密码:

1
春花秋月何时了

level2-1

本关卡提示信息是一张写有二进制的图片,显然第一反应是把图片上的二进制转成字符串,可以得到error!。经过试验,密码并不是error!。那么error!这几个字母是不是作者给我们的提示了,记过漫长时间的思考,终究没有找到答案。得放弃这个方向了,又是图片隐写术了?把图片下载下来,分析发现这是一张正常的图片,并没有添加额外的附加信息。又经过一段时间的思考,突然想到,是不是密码存放在图片属性里。立马右键图片,查看属性内容,果然图片添加了“备注”,心里一乐。

密码:

1
ZCFHJJUKLI

上文里其实介绍过JPG隐写术,本关卡也是隐写术的一种,使用JPEGsnoop工具打开图片亦可查找到备注信息。

感谢你对我的支持,让我继续努力分享有用的技术和知识点