在参加 CTF 比赛时,尤其是MISC的赛题,经常会遇到这样的情况:题目只给出一段看起来毫无规律的字符串,却没有告诉你它究竟是什么。这是啥呀,都没想继续分析下去的动力了。还有一些国产加密算法sm系列,简直了。
例如:
SGVsbG8gV29ybGQ=
5d41402abc4b2a76b9719d911017c592
48656c6c6f
U2FsdGVkX1...
这些字符串可能是 Base64 编码、MD5 Hash、Hex 编码,也可能是经过 AES 加密的数据。
如果不知道具体类型,应该从哪里入手?
其实,有不少工具可以帮助我们快速识别未知字符串。本文整理一些 CTF 比赛中比较实用的在线和离线工具,介绍它们的特点、安装方法和常用命令。
一、在线工具:不用安装,打开浏览器就能用
1. CyberChef
项目地址:https://gchq.github.io/CyberChef/
CyberChef 是英国政府通信总部(GCHQ)开源的一款数据分析和转换工具,在 CTF 比赛中非常实用。
它支持 Base64、Base32、Hex、URL、HTML、ROT、AES、DES、Hash 等多种操作。
最方便的是它提供了一个叫 Magic 的功能,可以根据输入内容自动尝试识别编码方式。
使用方法:
打开 CyberChef。 将未知字符串粘贴到左侧输入框。 在右侧搜索 Magic。 将 Magic 操作拖入 Recipe 区域。 查看工具给出的分析结果。
例如,输入:
SGVsbG8gV29ybGQ=
可以尝试识别为 Base64,解码结果为:
Hello World
如果遇到多层编码,也可以继续添加解码操作。
对于刚接触 CTF 的同学,CyberChef 非常值得收藏。
2. Hashes.com
网站:https://hashes.com/
Hashes.com 主要用于 Hash 识别和查询。
例如,拿到一段 32 位十六进制字符串,可以提交到网站尝试判断它是否为 MD5,并查询是否已经存在对应的明文结果。
它适合处理 MD5、SHA1、SHA256、NTLM 等常见 Hash。
需要注意,在线 Hash 查询通常依赖已有的数据记录,并不意味着所有 Hash 都能查询出明文。
另外,不建议将真实业务中的密码 Hash 提交到第三方网站。
3. dCode
网站:https://www.dcode.fr/
如果题目不是常见编码,而是古典密码,dCode 就比较有用了。
它支持:
凯撒密码(Caesar Cipher) 维吉尼亚密码(Vigenère) 栅栏密码(Rail Fence) 摩斯密码(Morse) 替换密码 字符频率分析
例如,拿到一段看起来像随机字母的字符串,可以使用 dCode 尝试分析是否属于古典替换密码。
这类工具在密码学方向的 CTF 题目中比较常见。
4. Boxentriq
网站:https://www.boxentriq.com/
Boxentriq 也是一个比较实用的在线密码分析网站。
它主要提供古典密码识别、密码破解、字符频率分析等功能。
如果 dCode 没有找到合适结果,也可以换用 Boxentriq 继续分析。
二、离线工具:比赛环境没有网络也能使用
在线工具虽然方便,但 CTF 比赛中不一定能够随时访问互联网。因此,建议提前在 Kali Linux 或 Ubuntu 中安装一些命令行工具。
1. Name-That-Hash
项目地址:https://github.com/HashPals/Name-That-Hash
Name-That-Hash 是一个专门用于识别 Hash 类型的工具。
它可以根据字符串的长度、格式和特征,匹配可能的 Hash 算法。
支持常见的 MD5、SHA1、SHA256、NTLM、bcrypt、Argon2 等类型。
安装:
pip install name-that-hash
识别单个 Hash:
nth --text '5d41402abc4b2a76b9719d911017c592'
识别文件中的 Hash:
nth --file hashes.txt
尝试 Base64 预处理:
nth --text '5d41402abc4b2a76b9719d911017c592' --base64
Name-That-Hash 的优点是操作简单,适合快速判断未知 Hash。
2. hashid
项目地址:https://github.com/psypanda/hashID
hashid 是一个比较经典的 Hash 识别工具,在 Kali Linux 中也很常见。
它可以识别多种常见 Hash,并给出对应的 Hashcat Mode 和 John the Ripper 格式。
安装:
sudo apt install hashid
识别 Hash:
hashid '5d41402abc4b2a76b9719d911017c592'
显示 Hashcat 对应模式:
hashid -m '5d41402abc4b2a76b9719d911017c592'
显示 John the Ripper 对应格式:
hashid -j '5d41402abc4b2a76b9719d911017c592'
例如,识别出 MD5 后,就可以进一步使用 Hashcat 或 John 进行密码恢复。
3. hash-identifier
这是一个交互式 Hash 识别工具。
安装:
sudo apt install hash-identifier
运行:
hash-identifier
然后直接输入需要识别的字符串。
工具会给出可能的 Hash 类型,例如:
Possible Hashs:
[+] MD5
Least Possible Hashs:
[+] NTLM
[+] MD4
[+] MD5(HMAC)
它的优点是操作直观,适合初学者。
不过,由于很多 Hash 算法使用相同的输出长度,识别结果可能存在多个候选。
4. Hashcat 8.0
项目地址:https://github.com/hashcat/hashcat
Hashcat 大家应该比较熟悉,它是一款非常强大的密码恢复工具,支持 CPU 和 GPU 加速。
很多人使用 Hashcat 主要是为了破解 Hash,但 Hashcat 8.0 也支持使用 --identify 参数识别 Hash 类型。
准备 Hash 文件:
echo -n '5d41402abc4b2a76b9719d911017c592' > hash.txt
识别 Hash:
hashcat --identify hash.txt
Hashcat 会根据输入格式,列出可能匹配的 Hash 类型及对应 Mode。
需要注意:
MD5:可以尝试识别。 SHA1:可以尝试识别。 SHA256:可以尝试识别。 NTLM:可以尝试识别。 Base64:不是它的主要识别范围。 AES 密文:不能仅凭密文保证识别出加密算法。
Hashcat 的 --identify 不是通用编码识别工具,识别结果也只是候选类型,不代表一定就是实际使用的算法。
5. Ciphey
项目地址:https://github.com/Ciphey/Ciphey
Ciphey 和前面介绍的 Hash 识别工具有所不同。
它不只是判断字符串属于什么类型,还会尝试自动解码和分析。
处理单个字符串:
ciphey -t "SGVsbG8gV29ybGQ="
处理文件:
ciphey -f encrypted.txt
它适合尝试处理:
Base64 Base32 Hex Caesar Vigenere Morse Binary 部分 XOR 等简单密码或编码
但要注意,Ciphey 并不能自动破解所有加密算法,尤其是 AES、RSA 这类安全的现代加密算法。
6. CyberChef 离线版
CyberChef 不仅可以在线使用,也支持离线运行。
项目地址:https://github.com/gchq/CyberChef
可以提前下载官方 Release 版本,将文件复制到比赛电脑,直接使用浏览器打开。
这样即使没有网络,也可以进行 Base64、Hex、URL 编码等分析。
对于经常参加 CTF 的同学,建议提前准备一份离线版 CyberChef。
三、常见字符串特征速查表
在实际比赛中,并不是每次都需要依赖工具。
很多时候,观察字符串的长度、字符集和特殊前缀,就能初步判断它是什么类型。
1. 常见 Hash 特征
$2a$$2b$、$2y$ | ||
$argon2id$ |
例如:
5d41402abc4b2a76b9719d911017c592
长度为 32 位,可能是 MD5、NTLM 或 MD4。
但仅凭长度不能确定它究竟是哪一种算法。
2. 常见编码特征
%20、%3D 等 | |
&、A 等 | |
Salted__ |
这些特征只能帮助我们缩小范围,不能直接作为最终结论。
四、CTF 实战:拿到未知字符串应该怎么分析?
假设比赛中给出一段字符串:
U2FsdGVkX1+abc123xxxxxxxxxxxxxxxx
没有任何提示,应该怎么处理?
我建议按照下面的顺序进行。
第一步:观察字符串特征
先看长度、字符集、特殊符号和前缀。
例如:
是否只有十六进制字符? 是否包含 Base64 常见字符? 是否有 $2b$、$argon2id$等特殊前缀?是否存在明显的 JWT 结构?
第二步:使用工具进行识别
如果怀疑是编码,优先使用 CyberChef Magic,尝试 Base64、Base32、Hex 等常见解码。
如果怀疑是 Hash,可以使用以下工具交叉判断:
hashcat --identify hash.txt
nth --text '待识别字符串'
hashid '待识别字符串'
第三步:根据识别结果进行下一步分析
如果是 Base64、Hex 等编码,尝试解码。
如果是 MD5、SHA256、NTLM 等 Hash,可以根据题目条件使用 Hashcat 或 John 进行密码恢复。
如果是古典密码,可以使用 dCode 或 Ciphey 尝试分析。
如果疑似 AES、RSA 等加密数据,就需要结合题目给出的密钥、IV、加密模式和其他线索继续分析。
第四步:验证结果
不要因为工具给出了一个结果就直接认定正确。
还需要检查:
解码后是否为可读文本? 是否符合题目中的 Flag 格式? 是否存在下一层编码? 是否符合题目描述和上下文?
五、最后:CTF 推荐工具组合
如果准备一套自己的 CTF 工具环境,我比较推荐下面这个组合:
如果只想记住三个工具,我的建议是:
CyberChef + Name-That-Hash + Hashcat 8.0。
这三个工具基本可以覆盖 CTF 中最常见的编码识别、Hash 判断和密码恢复需求。
最后还要区分三个概念:
编码(Encoding):例如 Base64、Hex,通常可以直接逆向解码。 Hash(哈希):例如 MD5、SHA256,是单向摘要,不能直接解密,只能通过字典、规则或暴力尝试寻找原始输入。 加密(Encryption):例如 AES、RSA,需要相应的密钥或其他可利用条件才能解密。
弄清楚这三者的区别,再配合上面的工具,遇到 CTF 中的未知字符串就不会一上来无从下手了。我当时看到一串字符串内心os就是这是啥呀,现在好多了,感觉掌握了方法和工具还是可以一战的。 另外,涉及真实业务或未公开的密码 Hash 时,尽量使用离线工具,不要随意提交到在线 Hash 查询网站。
- END -