CTF小技巧:文本解密工具 Text Decoder Toolkit

欢迎来到文本解码挑战赛!

T{4 G=C 9<=E B63 3<3;G /<2 9<=E G=C@A3:4^ G=C <332 <=B 43/@ B63 @3AC:B =4 / 6C<2@32 0/BB:3A` {4 G=C 9<=E G=C@A3:4 0CB <=B B63 3<3;G^ 4=@ 3D3@G D71B=@G 5/7<32 G=C E7:: /:A= AC443@ / 2343/B` {4 G=C 9<=E <37B63@ B63 3<3;G <=@ G=C@A3:4^ G=C E7:: AC11C;0 7< 3D3@G 0/BB:3`T _ !C< "HC^ "63 s@B =4 %/@

这是来自CTF的一串符号(当然不是原题,不过已经很相似了)。由于这个挑战已经结束,当时没有完成出来的家伙找到我,希望我帮助他们解决,至少今后遇到类似的问题他们不会再措手不及了。

现实中,需要解码的内容经常会附带一个脚本或者程序。因此几乎不会遇到一个编码的字符串,要求你独立破解出来。

有经验的CTF团队或许在十分钟之内就能破解,而我使用Calculator和Notepad也就用了十分钟。或许我应该使用电子表格。而在我做完这些之后,我发现我可以编写一个程序更快地解码这段字符串。

下面你将从何处着手破解?这里我提供了三个思路,但我相信一定会有其他更好的方法。

方法一:字符频率

单击“Statistics”(数据)选项中的“Get Stats”(统计)按钮,便会出现每个字母在脚本中出现的次数。这是你会发现“3”和“=”是出现最多的字符(除了空格之外)。

通过维基百科,我们知道最常用的英文字母为E T A O I N S H R......那让我们来看看“3”和“e”之间的差别。在“Difference”(差异)栏中输入这两个值,点击“Calculate Difference”(计算差别)按钮,我得到的值为“50”。

现在点击“Decoder”(解码器)菜单,输入“50”,选中“Character Shift”(字符替换)然后点击“Decode”(解码)。看起来我们的解码工作好像能够完成了。

方法二:枚举

第二个方法是把文本文件中,所有可能的值进行枚举,选择“Enumerate to File”(对文件进行枚举)和“Character Shift”(字符替换)。

检查结果文件,寻找线索。我搜索“the”的时候,发现第50行的看起来比较特别。第50行意味着值为50的字符替换已经被利用。

这是你可以去Decoder选项,进行一个值为“50”的字符替换,就像我们之前进行的那样。

方法三:距离计算器

两个字母之间的字符数与XOR长度相同,或者字符替换值应保持不变。

举个例子

单词h-e-l-l-o中字母间距离为-3、7、0和3(h和e间距离为-3,e与l间为7,诸如此类)如果我们将“hello”的值替换为10,产生的字符串为“rovvy”,而r-o-v-v-y间的距离仍然是3、7、0和3。

在“Statistics”选项中,你可以搜索“the”或者任何含有三个或更多字母的单词,工具箱会试图帮你找到字符串中的相同字符间距。

自定义替换表

三种不同的方法均发现值为50的字母替换是破译的起始点,但是文本中仍然还有一些未解之谜。

在输出框中,第三个字符看起来像“f”,因此前面的字符可能是“i”(if)。另外还有两个例子可以证实我们的推理可能正确,但还是让我们来验证一下。

回到“Statistics”选项中,我选中了一个应该是“I”的字符,然后单击“Get Hightlighted Char”(突出显示字符)。程序将在输入和输出框中提取相应的字符。

在这个例子中,我认为“{”应该是“I”,因此我做出了相应的转换,点击了“Calculate Difference”按钮。结果得到值“-50”。

现在我们就得到了两个不同的字符替换值。那么我该如何使用两个值解码?我需要再次映射字符,并利用ASCII表更直观地看到映射。因此我想出了“Custom Substitution Table”(自定义替换表)。

如果你在标题行输入一个值,该值会被复制到纵列。如果你需要为一个特定的字母输入一个值,那就在相应的框中输入该值。在这里,输入字符串中的空格字符被替换成了“R”。这里我并不想过多考虑这个,因此我在“032-SPC”框中输入了“0”。

如果有人在CTF之外的情况中用到了这个程序,记得要让我知道哟!

*原文链接:kahusecurity,编译/明明知道,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

在Java中如何避免“!=null”式的判空语句?

我整天都是在跟Java打交道。我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPoint...

1971
来自专栏HTML5学堂

面向对象系列讲解——混合模式

HTML5学堂:我们解释了面向对象以及使用面向对象的原因,并书写了最为基本的面向对象的代码。同时我们提出了一些问题,工厂模式存在着一些缺陷,在这篇文章当中我们就...

3436
来自专栏mySoul

设计模式-原型模式

关于Cloneable 接口,用途和Serializable一样为标记型接口,内部没有方法和属性,implements Cloneable 表示对象能被克隆,即...

881
来自专栏算法与数据结构

拓扑排序 ——个人理解,仅供参考

贴代码: #include <bits/stdc++.h> using namespace std; #define maxn 100//可以根据题目条件进行更...

2088
来自专栏逸鹏说道

必备 .NET - C# 异常处理

欢迎查看首个“必备.NET”专栏。您可以在其中了解 Microsoft .NET Framework 领域的所有最新动态,无论是 C# vNext 的最新进展(...

2786
来自专栏java一日一条

在Java中如何避免“!=null”式的判空语句?

我整天都是在跟Java打交道。我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空。这么做是为了避免NullPoint...

1392
来自专栏程序员的酒和故事

跟Google学写代码--Chromium工程中用到的C++11特性

Ttile 跟Google学写代码--Chromium工程中用到的C++11特性 Chromium是一个伟大的、庞大的开源工程,很多值得我们学习的地方。 《跟...

4574
来自专栏葡萄城控件技术团队

前端代码标准最佳实践:javascript篇

前言 最近一直重构项目的前端代码,也参考了各种前端代码的最佳实践,目的是让前端的HTML,CSS,JavaScript代码更符合标准,有更好的性能,更好的可维护...

2335
来自专栏黑泽君的专栏

传智播客_毕姥爷_2012年毕向东Java基础教程_毕向东老师

视频百度网盘下载链接:https://pan.baidu.com/s/1bpD3P07#list/path=%2F

1211
来自专栏逆向技术

win32编程简介

  我们要编写windos程序.都离不开API. 也就是我们所说的win32程序. 所以学好win32是你能不能再windows下编写程序的基础.

2493

扫码关注云+社区

领取腾讯云代金券