攻防世界刷题记录Crypto篇
前言
继续高手进阶区题目~sherlock
咦?夏洛克?
下载题目附件得到的是一个内容很长很长的txt文件,大体看了看就是很常规的英语文章,不过有一些突然大写的字母。感觉可能是需要提取出来什么吧,一看别人写的wp确实是要先筛出来文章里的大写字母。在这里顺便学到了如何在命令行里筛选出文件内容,好在mac和Linux命令可以通用呀。
解题步骤
1.筛选出文中的大写字母
先把题目附件改名为sherlock.txt,在该文件路径下打开终端,输入如下命令:
cat sherlock.txt | grep -o '[A-Z]' | tr -d '\n'
形如“命令A | 命令B”的这种Linux命令是把A执行的结果作为B的输入,所以这行完整命令的执行过程是将sherlock.txt的文件内容筛选出大写字母再去掉换行显示出来。(个人理解,如有错误欢迎指出)
这行命令也是从别人的wp学来的,好像还看见过更复杂的命令,只要能解题就先怎么简单怎么来吧!
得到的结果如下图所示,观察发现全都是ZERO和ONE这两个单词,所以想到下一步把它们转换成用数字0和1显示。
![筛选出大写字母的结果](https://img-blog.csdnimg.cn/026c873232714ebf894e84b722a1d31b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz5Y-Y5by65ZWK,size_20,color_FFFFFF,t_70,g_se,x_16)
2.借助Python处理字符串
打开Python交互式编程,将ZERO和ONE转换成0和1显示出来:
![写Python代码做字符转换](https://img-blog.csdnimg.cn/36ff384f8b984ded872428bb57c7d344.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz5Y-Y5by65ZWK,size_20,color_FFFFFF,t_70,g_se,x_16)
因为只涉及到两个单词,所以就两种情况用if…else语句即可,关键代码很简单:
i=0
while i<len(s):
if(s[i] == 'Z'):
print(0,end='')
i+=4
else:
print(1,end='')
i+=3
以0和1显示后,想到借助在线网页工具做一下进制转换,转成16进制比较好用Python恢复成bytes。比较喜欢用的网站在这:http://www.hiencode.com/![借助工具做进制转换](https://img-blog.csdnimg.cn/9e1c76cd9378428a8cdda12722794a68.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95oOz5Y-Y5by65ZWK,size_20,color_FFFFFF,t_70,g_se,x_16)
然后复制出来16进制数,放到Python的bytes.fromhex中得到flag啦!
![拿到flag的字符串](https://img-blog.csdnimg.cn/ab8c2bbcd9224290a48419e4908b2181.png)
bytes.fromhex('424954534354467b683164335f316e5f706c34316e5f353137337d')
总结
有时候会懒得去搜索去学新东西,比如暂时还不知道在Python里是不是直接就能做进制转换,只要能解决问题,就想到啥用啥了。继续学习吧。