📚 Termux 无 Root 学习开发系列
✅ 阶段一:环境搭建与终端基础(01-05)
✅ 阶段二:编程开发环境(06-09)
✅ 阶段三:网络与远程操作(10-12)
✅ 阶段四:Termux:API 与自动化(13-14)
✅ 阶段五:proot-distro 完整 Linux(15-17)
✅ 阶段六:AI 与 AIGC 实战(18-20)
▸ 阶段七:安全工具实战(21-23)
✓ 21 信息收集与端口扫描
✓ 22 sqlmap 注入测试与 hydra 爆破
• 23 密码哈希破解与取证工具 ← 本篇
阶段八至九共 5 篇,后续持续更新
上一篇用 sqlmap 从数据库导出了密码哈希,用 hydra 撞出了明文密码。但当你拿到的是一串 5f4dcc3b5aa765d61d8327deb882cf99 这样的 MD5 哈希时,hydra 无能为力——它只能撞在线登录接口,不能反向破解哈希。本篇学习离线哈希破解(hashcat + John the Ripper)和数字取证工具(binwalk + foremost + exiftool),完成从"在线攻击"到"离线分析"的能力闭环。
目录
§1 哈希破解基础:从明文到哈希
§2 hashcat:GPU 加速破解与手机限制
§3 John the Ripper:CPU 哈希破解实战
§4 binwalk:固件与隐藏数据分析
§5 foremost 与 strings:文件雕刻与字符串提取
§6 exiftool:元数据与隐藏信息
§7 综合实战:CTF 取证全流程
§8 网络抓包分析(受限环境)
§1 哈希破解基础:从明文到哈希
密码存储的安全演进经历了三个阶段:明文存储(最早期)、加密存储(可逆)、哈希存储(不可逆)。现代系统几乎都采用哈希存储——注册时将密码通过哈希函数转换为定长字符串存入数据库,登录时比对哈希值而非明文。
哈希的核心特性是"单向":从明文算哈希很容易(毫秒级),但从哈希反推明文只能靠"爆破"——逐一尝试候选密码,算出哈希后比对。因此哈希破解的速度取决于两个因素:候选密码数量(字典大小)和哈希计算速度(硬件性能)。
常见哈希算法对照
| 算法 |
输出长度 |
安全等级 |
典型场景 |
| MD5 |
128 bit (32 hex) |
低 |
旧系统、文件校验 |
| SHA-1 |
160 bit (40 hex) |
中低 |
Git、旧 TLS 证书 |
| SHA-256 |
256 bit (64 hex) |
中 |
区块链、现代系统 |
| bcrypt |
184 bit (动态) |
高 |
现代 Web 应用 |
| Argon2 |
动态 |
极高 |
密码竞赛冠军 |
关键区别在于"加盐"和"迭代次数"。MD5 和 SHA-1 是纯哈希函数,不加盐、不迭代——相同输入永远产生相同输出,可以预计算彩虹表一次性破解。bcrypt 和 Argon2 是"慢哈希",内置盐值和可调迭代次数(cost factor),每次计算需要毫秒级甚至秒级,让爆破成本成千倍增加。
Bash
# 用 Python 生成不同算法的哈希
python3 -c "import hashlib;print(hashlib.md5(b'password').hexdigest())"
# 输出:5f4dcc3b5aa765d61d8327deb882cf99
python3 -c "import hashlib;print(hashlib.sha256(b'password').hexdigest())"
# 输出:5e884898da28047151d0e56f8dc6292773603d0d6aabbddc...(64位)
💡 小贴士
识别哈希类型是破解的第一步。32 位十六进制字符几乎一定是 MD5;40 位是 SHA-1;64 位是 SHA-256;以 $2a$ 开头是 bcrypt;以 $argon2 开头是 Argon2。hashcat 和 John the Ripper 都有自动识别功能,但手动识别能帮你选择正确的破解参数。
§2 hashcat:GPU 加速破解与手机限制
hashcat 是世界上最快的密码恢复工具,号称利用 GPU 算力可达到每秒数百亿次哈希计算。当前最新版本为 v7.1.1(2026年8月发布),支持 300+ 种哈希算法和 5 种攻击模式。但它在手机上有严重限制。
⚠️ 手机限制说明
hashcat 依赖 OpenCL 或 CUDA 进行 GPU 计算,不支持纯 CPU 模式。手机 GPU 的 OpenCL 支持因设备而异——高通 Adreno 有一定支持,ARM Mali 多数不兼容。即使能编译运行,手机 GPU 的算力远低于桌面显卡,MD5 破解速度可能只有每秒几万次(桌面显卡可达每秒数百亿次)。本节以理论学习和参数理解为主,实际破解推荐用 John the Ripper(§3)。
安装尝试(实验性质)
Bash
|
1
2
3
4
5
6
7
8
|
# 尝试在 proot Ubuntu 中安装 hashcat
apt install -y hashcat
# 验证安装
hashcat --version
# 检测 GPU/OpenCL 设备
hashcat -I
# 若无 GPU 设备输出,则无法运行 GPU 模式
|
hashcat 核心参数与攻击模式
即使无法在手机上实际运行,理解 hashcat 的参数体系对安全评估至关重要——在桌面环境或云服务器上同样适用:
五种攻击模式
| 模式 |
代号 |
说明 |
| 字典攻击 |
-a 0 |
用字典文件逐一尝试 |
| 组合攻击 |
-a 1 |
两个字典的笛卡尔积 |
| 掩码攻击 |
-a 3 |
按字符模式穷举生成 |
| 混合-字典+掩码 |
-a 6 |
字典词+掩码后缀 |
| 混合-掩码+字典 |
-a 7 |
掩码前缀+字典词 |
Bash
|
1
2
3
4
5
6
7
8
|
# 字典攻击 MD5 哈希
hashcat -m 0 -a 0 hash.txt rockyou.txt
# 掩码攻击:4小写字母+2数字(如 abcd12)
hashcat -m 0 -a 3 hash.txt "?l?l?l?l?d?d"
# SHA-256 哈希(-m 1400)
hashcat -m 1400 -a 0 hash.txt rockyou.txt
# bcrypt 哈希(-m 3200,速度极慢)
hashcat -m 3200 -a 0 hash.txt rockyou.txt
|
掩码占位符:?l 小写字母(a-z)、?u 大写字母(A-Z)、?d 数字(0-9)、?s 特殊字符、?a 全部字符。掩码攻击本质是"按规则穷举",4位纯数字PIN只有1万种组合,瞬间完成。
常见哈希类型编号
| 编号 |
哈希类型 |
GPU 速度参考 |
-m 0 |
MD5 |
极快(~100 GH/s) |
-m 100 |
SHA-1 |
快(~50 GH/s) |
-m 1400 |
SHA-256 |
中(~20 GH/s) |
-m 3200 |
bcrypt |
极慢(~50 KH/s) |
💡 小贴士
GPU 速度参考列基于 RTX 4090 桌面显卡。手机 GPU 的算力大约低 3-4 个数量级——MD5 每秒可能只有几万次。这也是为什么 hashcat 在手机上不实用的根本原因。但在桌面或云环境(AWS p3 实例),hashcat 是无可替代的王者。理解其参数体系在职业安全评估中是必备知识。
§3 John the Ripper:CPU 哈希破解实战
John the Ripper(JtR)是 hashcat 的 CPU 替代方案。它不需要 GPU,纯靠 CPU 多线程并行计算,虽然速度远低于 GPU 版的 hashcat,但在手机上实际可用。推荐使用 bleeding-jumbo 分支(社区增强版,基于 1.9.0-jumbo-1,已有数千次提交),支持 300+ 种哈希格式。
安装与编译
Bash
|
1
2
3
4
5
6
7
8
|
# proot Ubuntu 中直接安装
apt install -y john
# 或从源码编译最新版(推荐)
git clone https://github.com/openwall/john.git
cd john/src
./configure && make -j4
# 验证安装
john --list=formats | head -20
|
基本破解流程
JtR 的典型流程:准备哈希文件 → 自动识别格式 → 字典攻击 → 查看结果:
Bash
|
1
2
3
4
5
6
7
8
9
10
|
# 创建测试哈希文件
echo "5f4dcc3b5aa765d61d8327deb882cf99" > hash.txt
# 自动识别格式 + 字典攻击
john --wordlist=rockyou.txt hash.txt
# 指定格式(避免误识别)
john --format=Raw-MD5 --wordlist=rockyou.txt hash.txt
# 查看已破解的结果
john --show hash.txt
|
JtR 会自动尝试识别哈希格式。如果识别错误(比如把 MD5 当成了其他格式),用 --format= 手动指定。--show 显示已破解的凭据,格式为 用户名:密码。
哈希提取工具
JtR jumbo 版自带一系列哈希提取工具,能从各种文件格式中提取哈希:
| 工具 |
用途 |
zip2john |
从加密 ZIP 文件提取密码哈希 |
rar2john |
从加密 RAR 文件提取密码哈希 |
pdf2john |
从加密 PDF 文件提取密码哈希 |
ssh2john |
从 SSH 私钥提取密码哈希 |
office2john |
从 Office 文档提取密码哈希 |
Bash
|
1
2
3
4
5
|
# 破解加密 ZIP 文件密码
zip2john secret.zip > zip_hash.txt
john --wordlist=rockyou.txt zip_hash.txt
# 破解 SSH 私钥密码
ssh2john id_rsa > ssh_hash.txt && john ssh_hash.txt
|
增量模式与规则
字典跑完没命中时,JtR 的增量模式(incremental)可以按字符组合穷举,相当于 hashcat 的掩码攻击。但纯 CPU 跑增量模式非常慢,只适合短密码(6 位以下):
Bash
# 增量模式(穷举,指定最长4位)
john --incremental --max-length=4 hash.txt
# 使用规则变换字典(首字母大写+末尾加数字)
john --wordlist=rockyou.txt --rules=Wordlist hash.txt
💡 小贴士
JtR 的规则引擎是其最大优势。一条规则如 Az"[0-9]" 会在每个字典词末尾追加 0-9,把 10 万词的字典扩展为 100 万条候选——比手写 100 万行的字典文件高效得多。规则语法虽简,但组合后威力巨大,是 CTF 比赛中的常用技巧。
§4 binwalk:固件与隐藏数据分析
binwalk 是逆向工程和固件分析的利器,能扫描二进制文件中嵌入的文件头、压缩流、加密数据等。当前最新版 v3.1.0 已用 Rust 重写,性能大幅提升。它能识别固件镜像中隐藏的内核、文件系统、配置文件等——CTF 比赛中"图片里藏了个 ZIP"这类隐写题,binwalk 是首选工具。
安装与基本用法
Bash
|
1
2
3
4
5
6
7
|
# proot Ubuntu 安装 binwalk v3
apt install -y binwalk
# 扫描文件中的嵌入数据
binwalk firmware.bin
# 提取所有识别到的嵌入文件
binwalk -e firmware.bin
|
分析输出解读
binwalk 扫描后会输出一个表格,列出文件中每个识别到的数据块的偏移量、类型和描述:
Text
|
1
2
3
4
5
|
DECIMAL HEX DESCRIPTION
------------------------------------------------------------------
0 0x0 PNG image header
1024 0x400 gzip compressed data
4096 0x1000 SquashFS filesystem
|
上面的输出表示:文件开头是一张 PNG 图片(正常外观),但在 1024 字节处隐藏了一段 gzip 压缩数据,在 4096 字节处嵌入了完整的 SquashFS 文件系统。-e 参数会自动提取这些嵌入数据到 _firmware.bin.extracted/ 目录。
熵分析
binwalk 的熵分析功能(-E)能检测文件中的加密或高压缩区域——熵值接近 1.0 的区域要么是加密数据,要么是高度压缩的数据:
Bash
# 熵分析(输出 ASCII 图表)
binwalk -E suspicious_file.bin
# 递归提取(提取后再扫描提取出的文件)
binwalk -eM firmware.bin
💡 小贴士
binwalk 的 v3 用 Rust 重写后扫描速度比旧 Python 版快 10 倍以上,但提取功能(-e)仍依赖系统工具(unzip、gunzip、unsquashfs 等)。proot Ubuntu 中安装 apt install -y squashfs-tools unzip gzip 确保提取功能完整。CTF 中常见套路:一张 PNG 图片用 binwalk 扫描发现内嵌 ZIP,提取后发现 ZIP 里有加密的 flag.txt,再用 John the Ripper 的 zip2john 破解——这就是工具链的联动。
§5 foremost 与 strings:文件雕刻与字符串提取
binwalk 靠文件头签名识别嵌入文件,而 foremost 用"文件雕刻"技术——即使文件头已被损坏或删除,它仍能根据文件内部结构特征恢复文件。这在恢复误删文件、分析磁盘镜像时非常有用。
foremost 文件雕刻
Bash
|
1
2
3
4
5
|
# 安装 foremost
apt install -y foremost
# 从磁盘镜像恢复所有图片和文档
foremost -t all -i disk.img -o output/
# 只恢复 PDF 和 ZIP 文件
foremost -t pdf,zip -i disk.img -o output/
|
-t 指定文件类型(all/pdf/zip/jpg/png/gif/doc/xlsx 等),-i 输入文件,-o 输出目录。foremost 会按文件类型在输出目录中创建子目录,每个恢复的文件自动编号。
strings 字符串提取
strings 是最简单但最常用的取证工具——从二进制文件中提取所有可读字符串(连续 4+ 个 ASCII 可打印字符)。在分析 APK、可执行文件、固件时,strings 能快速暴露内部路径、API 密钥、URL、调试信息等:
Bash
|
1
2
3
4
5
6
7
|
# 提取所有可读字符串
strings app.apk | head -50
# 搜索 URL(API 端点泄露)
strings app.apk | grep -E "https?://"
# 搜索 API 密钥模式
strings app.apk | grep -iE "(api_key|token|secret|password)"
|
file 命令:文件类型识别
file 命令通过检查文件的"魔数"(magic number)来识别真实文件类型,不依赖扩展名。这在取证中至关重要——攻击者常把可执行文件改名为 .jpg 来绕过检测:
Bash
file mystery_file
# 输出:mystery_file: ELF 64-bit LSB executable, ARM aarch64
# 批量识别目录下所有文件
file *
💡 小贴士
strings + grep 是安全审计的黄金组合。在分析一个未知的 APK 或可执行文件时,先用 strings file | grep -iE "(http|api|key|token|password|secret)" 快速扫描,往往能发现开发者留下的硬编码凭据、内部 API 端点、调试路径等敏感信息。这种"懒人审计"在实际渗透测试中命中率极高。
§6 exiftool:元数据与隐藏信息
ExifTool(v13.59,2026年5月发布)是元数据提取的事实标准。手机拍的照片、单反导出的 JPEG、甚至是 PDF 文档,都携带大量元数据——拍摄时间、GPS 坐标、设备型号、软件版本等。在隐私保护和安全取证中,这些信息可能暴露拍摄者的精确位置和设备指纹。
基本用法
Bash
|
1
2
3
4
5
6
7
|
# 安装 exiftool
apt install -y exiftool
# 查看照片所有元数据
exiftool photo.jpg
# 只提取 GPS 信息
exiftool -n -gpslatitude -gpslongitude photo.jpg
|
GPS 坐标提取实战
许多手机拍照默认记录 GPS 坐标。提取后在地图上定位就能看到拍摄精确位置:
Bash
|
1
2
3
4
5
6
7
8
|
# 提取 GPS 坐标(-n 输出十进制格式)
exiftool -n -gpslatitude -gpslongitude photo.jpg
# 输出示例:
# GPS Latitude : 39.904200
# GPS Longitude: 116.407400
# 在浏览器中打开 Google Maps
echo "https://maps.google.com/?q=39.9042,116.4074"
|
清除元数据保护隐私
Bash
# 删除所有元数据(保留图片本身)
exiftool -all= photo.jpg
# 只删除 GPS 信息
exiftool -gps:all= photo.jpg
💡 小贴士
社交媒体平台(微信、微博等)会在上传时自动剥离 EXIF 元数据,但通过邮件附件、云盘分享、即时通讯软件原图传输的图片仍可能携带完整 GPS 信息。发图前用 exiftool -all= photo.jpg 清除元数据是最简单的隐私保护措施。注意:清除后原文件会被覆盖,exiftool 会自动备份原始文件为 photo.jpg_original。
§7 综合实战:CTF 取证全流程
CTF(Capture The Flag)比赛中的取证题通常是一个神秘文件——可能是一张图片、一个固件镜像、一个加密压缩包。目标是找到隐藏在其中的 flag 字符串。下面模拟一个典型的取证解题流程:
取证流程六步法
| 步骤 |
工具 |
目标 |
| 1. 识别 |
file |
确认文件真实类型 |
| 2. 扫描 |
binwalk |
发现嵌入数据 |
| 3. 提取 |
binwalk -e / foremost |
提取隐藏文件 |
| 4. 破解 |
john |
破解加密文件密码 |
| 5. 搜索 |
strings + grep |
搜索 flag 字符串 |
| 6. 验证 |
exiftool |
检查元数据残留线索 |
Bash
|
1
2
3
4
5
6
7
8
9
10
11
12
|
# 步骤1:识别文件类型
file challenge.png
# challenge.png: PNG image data, 1920 x 1080
# 步骤2:扫描嵌入数据
binwalk challenge.png
# 发现 1024 字节处有 ZIP 数据
# 步骤3:提取嵌入文件
binwalk -e challenge.png
# 进入提取目录,发现 secret.zip
# 步骤4:破解 ZIP 密码
zip2john secret.zip > hash.txt && john --wordlist=rockyou.txt hash.txt
|
Bash
|
1
2
3
4
5
|
# 步骤5:搜索 flag
strings flag.txt | grep -i "flag{"
# 步骤6:检查原图 EXIF 是否有额外线索
exiftool challenge.png | grep -i "comment"
|
💡 小贴士
CTF 取证题的 flag 常藏在意想不到的地方:图片 EXIF 的 Comment 字段、音频频谱图中、PDF 的元数据中、固件的配置文件里。养成"每个工具都跑一遍"的习惯——file 确认类型、binwalk 扫嵌入、strings 搜关键词、exiftool 查元数据。CTFtime.org 上有全球赛事日历和往届 writeup,是学习取证工具链最佳途径。
§8 网络抓包分析(受限环境)
网络抓包是安全分析的另一大方向。在 Termux 无 root 环境下,实时抓包功能严重受限——tcpdump 需要 root 权限访问网卡接口,tshark(Wireshark CLI)同样如此。但分析已有的 pcap 文件完全可行。
tshark:分析 pcap 文件
Bash
|
1
2
3
4
5
6
7
|
# 安装 tshark(proot Ubuntu)
apt install -y tshark
# 统计协议分布
tshark -r capture.pcap -q -z io,phs
# 提取所有 HTTP 请求 URL
tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri
|
Python 深度分析
用 Python 的 scapy 库可以更灵活地解析 pcap 文件——自定义过滤、统计分析、协议提取:
Python
|
1
2
3
4
5
6
7
8
9
10
11
|
from scapy.all import rdpcap, TCP
# 读取 pcap 文件
packets = rdpcap("capture.pcap")
# 统计 IP 地址访问频率
ips = {}
for pkt in packets:
if pkt.haslayer("IP"):
ip = pkt["IP"].src
ips[ip] = ips.get(ip, 0) + 1
for ip, cnt in sorted(ips.items(), key=lambda x: -x[1])[:10]:
print(f"{ip}:{cnt}")
|
⚠️ 注意
在 Termux 无 root 环境下无法实时抓包,但可以从电脑导出 pcap 文件用 tshark 分析。另外,如果上一篇文章中搭建了 DVWA 靶机,可以在 DVWA 的命令注入模块中用 tcpdump 抓包(因为 DVWA 运行在 proot Ubuntu 中,有 root 权限),生成 pcap 文件后再用 tshark 或 Python 分析。
💡 小贴士
本篇是阶段七安全工具实战的收官篇。从第21篇的信息收集(nmap/masscan),到第22篇的漏洞利用(sqlmap/hydra),到本篇的离线破解与取证(John/binwalk/exiftool),覆盖了渗透测试从侦察到取证的完整链条。记住:安全工具的学习不是为了攻击他人,而是为了理解攻击者的思路,从而更好地防护自己的系统。
分级练习
🟢 基础级
1. 在 proot Ubuntu 中安装 John the Ripper,用 john --list=formats 查看支持的哈希格式,统计有多少种。
2. 用 Python 生成 password 的 MD5 哈希,存入文件,用 JtR + rockyou.txt 破解。
3. 用 exiftool 查看一张手机拍摄的照片,提取 GPS 坐标并在 Google Maps 上定位。
🟡 进阶级
4. 创建一个加密 ZIP 文件,用 zip2john 提取哈希后用 JtR 破解密码。
5. 用 binwalk 扫描一个 APK 文件,查看其中嵌入了哪些数据类型,用 -e 提取并浏览提取结果。
6. 用 strings 分析一个 APK 文件,搜索其中的 URL 和 API 密钥模式,记录发现。
🔴 挑战级
7. 制作一个 CTF 取证挑战:在一张 PNG 图片中嵌入一个加密 ZIP 文件(含 flag.txt),写出完整的解题 writeup(file → binwalk → zip2john → john → strings)。
8. 用 Python + scapy 编写脚本,读取 pcap 文件并统计 Top 10 IP 地址、Top 10 目标端口、HTTP 请求 URL 列表。
9. 对比 hashcat v7.1.1 和 JtR 的哈希破解速度:生成 100 个常见密码的 MD5 哈希,分别用两个工具破解(若 hashcat 可运行),对比耗时。
知识回顾
hashcat v7.1.1
John the Ripper
MD5/SHA-256/bcrypt
字典攻击
掩码攻击
增量模式
zip2john
binwalk v3.1.0
foremost
strings
exiftool v13.59
GPS 提取
文件雕刻
tshark
CTF 取证流程
下一篇预告
24 Gitea 私有 Git 服务器与静态站托管
安全工具实战阶段完结!下一篇进入阶段八:自托管服务。在手机上用 Gitea 搭建私有 Git 代码托管平台,配合 Caddy 或 Nginx 反向代理,实现代码仓库管理、Issue 追踪、CI/CD 触发。从安全攻防转向运维自托管——在 Termux 上构建你自己的"GitHub + 个人站点"。