最近一段时间做了不少netforce上steg(隐写)方向的题目,感觉在这方面的功力有一点长进.然而碰到题目还是磕磕绊绊,只能说学无止境.等我真的能在这个问题上才思敏捷的时候,再作文聊以总结吧.这次只说这一道题.
题目给了一张几乎空白的图.用力辨识的话能勉强看到上面有一些像素点不是白的.根据一贯的风格,毫无疑问题目就是从这里下手的了.
用PIL写了个程序读出了所有不是白色的像素点和它们的坐标.看了看却没什么头绪.不像是能拼凑出字符串的样子.再仔细观察发现,像素点的RGB值总是一个(250,70,*)的风格,几乎可以确定相同的前两位是无用的.于是关注第三个通道.发现可以把它们重组成一个10~50的等差数列.
虽然重组之后仍然看不出什么,但是无疑已经走在了正确的方向上.像素点的rgb值估计不太可能还隐藏了什么信息,于是开始考虑坐标中是否隐藏了什么信息.
接下来就是不断的尝试了.终于发现像素的x和y值相减得到的是可读字符的ascii值,根据刚才的顺序排列,恰好可以得到一个形如GoodEyes的字符串.
到这里已经几乎可以知道答案了,然而最后某一个字符是不可见字符,其ascii值是3.顿时让我陷入了困惑,不知道该怎么办.根据flag一贯的风格,常常用长得像的字符进行替换以混淆视听,然而几次改换提交仍是无果.终于想起来,3和e虽然方向不同,但勉强也可以说长得像,果然这就是最终的flag了.