目录
-
- 项目简介
- [John the Ripper 是什么](#John the Ripper 是什么)
- [John the Ripper 的主要特性](#John the Ripper 的主要特性)
-
- [1. 多种哈希支持](#1. 多种哈希支持)
- [2. 破解模式](#2. 破解模式)
- [3. 性能优化](#3. 性能优化)
- [John the Ripper 的使用方法](#John the Ripper 的使用方法)
- [HarmonyOS 适配过程](#HarmonyOS 适配过程)
- 环境准备
-
- [1. 系统要求](#1. 系统要求)
- [2. 安装 Autotools](#2. 安装 Autotools)
- 构建脚本详解
-
- [build_ohos.sh 关键代码](#build_ohos.sh 关键代码)
- 脚本关键点解析
-
- [1. 进入 src 目录](#1. 进入 src 目录)
- [2. autoconfig.h.in 生成](#2. autoconfig.h.in 生成)
- [3. autoconfig.h 生成](#3. autoconfig.h 生成)
- [4. 禁用 OpenSSL](#4. 禁用 OpenSSL)
- 关键问题解决
-
- [问题 1:构建系统位置错误](#问题 1:构建系统位置错误)
- [问题 2:autoconfig.h 生成问题](#问题 2:autoconfig.h 生成问题)
- [问题 3:OpenSSL 依赖问题](#问题 3:OpenSSL 依赖问题)
- [autoconfig.h 生成问题](#autoconfig.h 生成问题)
-
- 问题分析
- 解决方案
-
- [方法 1:从 autoconfig.h.in 创建](#方法 1:从 autoconfig.h.in 创建)
- [方法 2:修复 #undef 行](#undef 行)
- [OpenSSL 依赖问题](#OpenSSL 依赖问题)
- [HNP 包配置](#HNP 包配置)
- 构建结果
- 使用示例
-
- [在 HarmonyOS 上使用 John the Ripper](#在 HarmonyOS 上使用 John the Ripper)
- 总结
- FAQ
-
- [Q1: 为什么构建系统在 src 目录下?](#Q1: 为什么构建系统在 src 目录下?)
- [Q2: 为什么需要禁用 OpenSSL?](#Q2: 为什么需要禁用 OpenSSL?)
- [Q3: 如何验证构建的二进制文件?](#Q3: 如何验证构建的二进制文件?)
- [Q4: 禁用 OpenSSL 会影响功能吗?](#Q4: 禁用 OpenSSL 会影响功能吗?)
- 相关链接
项目简介
John the Ripper(简称 John)是一个快速密码破解工具,用于检测弱密码。它支持多种密码哈希类型,包括 Unix crypt、Kerberos、Windows LM 哈希等,以及数百种额外的哈希和密码算法(在 "jumbo" 版本中)。
仓库地址: git@gitcode.com:nutpi/john.git
版本: v1.0.0
Tag: 1.0.0_ohos
John the Ripper 是什么
John the Ripper 是一个密码破解工具,主要用于检测弱密码。它支持多种密码哈希类型,可以用于安全审计、密码恢复等场景。
主要优势
- 快速破解:优化的算法,破解速度快
- 多种哈希支持:支持数百种密码哈希类型
- 可扩展:支持自定义哈希算法和破解模式
- 跨平台:支持多种操作系统
应用场景
- 安全审计:检测系统中的弱密码
- 密码恢复:恢复忘记的密码(需要合法授权)
- 安全研究:研究密码安全性
- 渗透测试:评估系统安全性
John the Ripper 的主要特性
1. 多种哈希支持
- Unix crypt(DES、MD5、Blowfish、SHA-256、SHA-512)
- Kerberos/AFS 哈希
- Windows LM 和 NTLM 哈希
- 数百种额外的哈希类型(jumbo 版本)
2. 破解模式
- 字典模式:使用字典文件破解
- 暴力破解:尝试所有可能的密码组合
- 混合模式:结合字典和规则
- 增量模式:逐步增加密码长度
3. 性能优化
- 多线程支持
- GPU 加速(某些哈希类型)
- 优化的算法实现
John the Ripper 的使用方法
基本用法
bash
# 破解密码文件
john password.txt
# 使用字典文件
john --wordlist=dictionary.txt password.txt
# 显示破解结果
john --show password.txt
# 使用特定格式
john --format=md5crypt password.txt
常用选项
破解选项
bash
# 指定字典文件
john --wordlist=dictionary.txt password.txt
# 指定规则文件
john --rules=password.rules password.txt
# 指定格式
john --format=md5crypt password.txt
# 显示进度
john --status password.txt
输出选项
bash
# 显示破解结果
john --show password.txt
# 显示所有密码(包括未破解的)
john --show --users=all password.txt
# 保存会话
john --session=mysession password.txt
HarmonyOS 适配过程
项目特点
John the Ripper 使用 Autotools(autoconf、automake)作为构建系统,构建系统位于 src 目录下。项目支持禁用 OpenSSL,使用内置的加密实现。
适配挑战
- 构建系统位置 :构建系统在
src目录下 - autoconfig.h 生成 :
autoconfig.h生成问题 - OpenSSL 依赖:可以选择禁用 OpenSSL
- 交叉编译配置:需要正确配置目标平台和工具链
环境准备
1. 系统要求
- macOS(本文示例)或 Linux
- Autotools(autoconf、automake、libtool)
- HarmonyOS SDK
- Python 3(用于构建脚本)
2. 安装 Autotools
bash
# macOS (使用 Homebrew)
brew install autoconf automake libtool
# Linux (Ubuntu/Debian)
sudo apt-get install autoconf automake libtool
构建脚本详解
build_ohos.sh 关键代码
bash
export TREE_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/john.org/john_1.0.0
# 创建安装目录
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/bin
mkdir -p ${TREE_INSTALL_HNP_PATH}/usr/share/man/man1
# 进入 src 目录
cd src
# 清理之前的构建
make clean 2>/dev/null || true
rm -rf autom4te.cache config.cache config.status config.log Makefile autoconfig.h
# 如果 configure 脚本不存在,需要运行 autoreconf
if [ ! -f configure ]; then
autoreconf -i
fi
# 确保 autoconfig.h.in 存在
if [ ! -f autoconfig.h.in ]; then
autoheader
fi
# 配置构建
CPP_VAR="${CC} -E"
./configure \
--host=aarch64-linux-musl \
--prefix=${TREE_INSTALL_HNP_PATH}/usr \
CC="${CC}" \
CFLAGS="${CFLAGS}" \
CPP="${CPP_VAR}" \
CXX="${CXX}" \
CXXFLAGS="${CXXFLAGS}" \
LDFLAGS="${LDFLAGS}" \
--disable-pkg-config \
--without-openssl
# 确保 autoconfig.h 被生成
if [ -f config.status ]; then
rm -f autoconfig.h autoconfig.h.stamp
./config.status 2>&1 | grep -v "is unchanged" || true
# 如果仍然不存在,从 autoconfig.h.in 创建
if [ ! -f autoconfig.h ]; then
cp autoconfig.h.in autoconfig.h
# 替换模板变量
sed -i '' \
-e "s/@ARCH_BITS@/64/g" \
-e "s/@ARCH_LITTLE_ENDIAN@/1/g" \
autoconfig.h
# 修复 #undef 行为 #define
sed -i '' \
-e "s|^#undef ARCH_LITTLE_ENDIAN$|#define ARCH_LITTLE_ENDIAN 1|g" \
autoconfig.h
fi
fi
# 构建
make -j$(sysctl -n hw.ncpu 2>/dev/null || echo 4) VERBOSE=1
# 安装
export DESTDIR=${TREE_INSTALL_HNP_PATH}
export prefix=/usr
make install
脚本关键点解析
1. 进入 src 目录
bash
cd src
作用 :John the Ripper 的构建系统在 src 目录下,需要先进入该目录。
2. autoconfig.h.in 生成
bash
if [ ! -f autoconfig.h.in ]; then
autoheader
fi
作用 :确保 autoconfig.h.in 存在,这是生成 autoconfig.h 的模板文件。
3. autoconfig.h 生成
bash
# 从 autoconfig.h.in 创建 autoconfig.h
cp autoconfig.h.in autoconfig.h
# 替换模板变量
sed -i '' -e "s/@ARCH_BITS@/64/g" autoconfig.h
# 修复 #undef 行为 #define
sed -i '' -e "s|^#undef ARCH_LITTLE_ENDIAN$|#define ARCH_LITTLE_ENDIAN 1|g" autoconfig.h
作用 :确保 autoconfig.h 存在并包含必要的定义。
4. 禁用 OpenSSL
bash
--without-openssl
作用:禁用 OpenSSL 依赖,使用内置的加密实现。
关键问题解决
问题 1:构建系统位置错误
错误信息:
make: *** No rule to make target `clean'. Stop.
原因 :John the Ripper 的构建系统在 src 目录下,需要在 src 目录中运行构建命令。
解决方案 :先进入 src 目录,然后运行构建命令。
问题 2:autoconfig.h 生成问题
错误信息:
fatal error: 'autoconfig.h' file not found
原因 :config.status 可能没有正确生成 autoconfig.h。
解决方案:
- 从
autoconfig.h.in手动创建autoconfig.h - 替换模板变量为实际值
- 修复
#undef行为#define
问题 3:OpenSSL 依赖问题
错误信息:
error: OpenSSL not found
原因:John the Ripper 默认需要 OpenSSL 库。
解决方案 :使用 --without-openssl 选项,禁用 OpenSSL 依赖。
autoconfig.h 生成问题
问题分析
autoconfig.h 是 Autotools 生成的头文件,包含架构特定的配置定义。在交叉编译时,config.status 可能无法正确生成 autoconfig.h。
解决方案
方法 1:从 autoconfig.h.in 创建
bash
# 从 autoconfig.h.in 创建 autoconfig.h
cp autoconfig.h.in autoconfig.h
# 替换模板变量
sed -i '' \
-e "s/@ARCH_BITS@/64/g" \
-e "s/@ARCH_BITS_LOG@/6/g" \
-e "s/@ARCH_BITS_STR@/\"64\"/g" \
-e "s/@ARCH_SIZE@/8/g" \
-e "s/@ARCH_WORD@/unsigned long/g" \
-e "s/@ARCH_LITTLE_ENDIAN@/1/g" \
-e "s/@HAVE_LIBCRYPTO@/0/g" \
autoconfig.h
方法 2:修复 #undef 行
bash
# 修复 #undef 行为 #define
sed -i '' \
-e "s|^#undef ARCH_LITTLE_ENDIAN$|#define ARCH_LITTLE_ENDIAN 1|g" \
-e "s|^#undef HAVE_LIBCRYPTO$|#define HAVE_LIBCRYPTO 0|g" \
-e "s|^#undef ARCH_ALLOWS_UNALIGNED$|#define ARCH_ALLOWS_UNALIGNED 1|g" \
autoconfig.h
OpenSSL 依赖问题
问题分析
John the Ripper 默认需要 OpenSSL 库来支持某些哈希类型。在交叉编译时,很难找到或配置正确的 OpenSSL 库。
解决方案
使用 --without-openssl 选项,禁用 OpenSSL 依赖:
bash
./configure --without-openssl
影响:
- ✅ 避免了 OpenSSL 交叉编译的复杂性
- ✅ 简化了构建过程
- ❌ 某些需要 OpenSSL 的哈希类型可能不可用
HNP 包配置
hnp.json
json
{
"type":"hnp-config",
"name":"john",
"version":"1.0.0",
"install":{}
}
安装目录结构
john_1.0.0/
├── usr/
│ ├── bin/
│ │ └── john # 可执行文件
│ └── share/
│ └── man/
│ └── man1/
│ └── john.1 # 用户手册
└── hnp.json # HNP 包配置
构建结果
构建成功后,会生成以下文件:
- HNP 包 :
john.org_john_1.0.0.hnp - Tar 归档 :
ohos_john_1.0.0.tar.gz
构建输出示例
==========================================
Build completed successfully!
==========================================
HNP Package: /path/to/archive/john.org_john_1.0.0.hnp
Tar Archive: /path/to/archive/ohos_john_1.0.0.tar.gz
Installation Path: /path/to/data/service/hnp/john.org/john_1.0.0
==========================================
使用示例
在 HarmonyOS 上使用 John the Ripper
安装 HNP 包后,可以在 HarmonyOS 设备上使用 John:
bash
# 破解密码文件
john password.txt
# 使用字典文件
john --wordlist=dictionary.txt password.txt
# 显示破解结果
john --show password.txt
# 使用特定格式
john --format=md5crypt password.txt
总结
适配要点
- 构建系统位置 :构建系统在
src目录下 - autoconfig.h 处理 :确保
autoconfig.h正确生成和修复 - OpenSSL 禁用 :使用
--without-openssl选项,避免 OpenSSL 依赖 - 配置修复 :修复
autoconfig.h中的#undef行
关键决策
- 禁用 OpenSSL:简化交叉编译过程
- 手动生成 autoconfig.h:提供回退方法创建和修复 autoconfig.h
- 模板变量替换 :从
autoconfig.h.in创建autoconfig.h并替换模板变量
FAQ
Q1: 为什么构建系统在 src 目录下?
A: John the Ripper 的构建系统位于 src 目录下,这是项目的设计。需要在 src 目录中运行构建命令。
Q2: 为什么需要禁用 OpenSSL?
A: 在交叉编译时,很难找到或配置正确的 OpenSSL 库。禁用 OpenSSL 可以简化构建过程,虽然某些哈希类型可能不可用。
Q3: 如何验证构建的二进制文件?
A: 可以使用 file 命令检查:
bash
file john
应该显示类似:ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), ...
Q4: 禁用 OpenSSL 会影响功能吗?
A: 禁用 OpenSSL 后,某些需要 OpenSSL 的哈希类型可能不可用,但大多数常见的哈希类型仍然可用。
相关链接
- John the Ripper 官方网站:https://www.openwall.com/john/
- John the Ripper GitHub 仓库:https://github.com/openwall/john
- HarmonyOS 适配仓库:https://gitcode.com/nutpi/john
- Autotools 文档:https://www.gnu.org/software/automake/manual/
- HarmonyOS 开发者文档:https://developer.harmonyos.com/
- PC代码仓
- PC社区