John the Ripper 在 HarmonyOS 上的构建与适配


项目简介

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 的使用方法

基本用法

# 破解密码文件
john password.txt

# 使用字典文件
john --wordlist=dictionary.txt password.txt

# 显示破解结果
john --show password.txt

# 使用特定格式
john --format=md5crypt password.txt

常用选项

破解选项
# 指定字典文件
john --wordlist=dictionary.txt password.txt

# 指定规则文件
john --rules=password.rules password.txt

# 指定格式
john --format=md5crypt password.txt

# 显示进度
john --status password.txt
输出选项
# 显示破解结果
john --show password.txt

# 显示所有密码(包括未破解的)
john --show --users=all password.txt

# 保存会话
john --session=mysession password.txt

HarmonyOS 适配过程

项目特点

John the Ripper 使用 Autotools(autoconf、automake)作为构建系统,构建系统位于 src 目录下。项目支持禁用 OpenSSL,使用内置的加密实现。

适配挑战

  1. 构建系统位置:构建系统在 src 目录下
  2. autoconfig.h 生成autoconfig.h 生成问题
  3. OpenSSL 依赖:可以选择禁用 OpenSSL
  4. 交叉编译配置:需要正确配置目标平台和工具链

环境准备

1. 系统要求

  • macOS(本文示例)或 Linux
  • Autotools(autoconf、automake、libtool)
  • HarmonyOS SDK
  • Python 3(用于构建脚本)

2. 安装 Autotools

# macOS (使用 Homebrew)
brew install autoconf automake libtool

# Linux (Ubuntu/Debian)
sudo apt-get install autoconf automake libtool

构建脚本详解

build_ohos.sh 关键代码

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 目录
cd src

作用:John the Ripper 的构建系统在 src 目录下,需要先进入该目录。

2. autoconfig.h.in 生成
if [ ! -f autoconfig.h.in ]; then
    autoheader
fi

作用:确保 autoconfig.h.in 存在,这是生成 autoconfig.h 的模板文件。

3. autoconfig.h 生成
# 从 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
--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

解决方案

  1. autoconfig.h.in 手动创建 autoconfig.h
  2. 替换模板变量为实际值
  3. 修复 #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 创建
# 从 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 行
# 修复 #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 依赖:

./configure --without-openssl

影响

  • ✅ 避免了 OpenSSL 交叉编译的复杂性
  • ✅ 简化了构建过程
  • ❌ 某些需要 OpenSSL 的哈希类型可能不可用

HNP 包配置

hnp.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 包配置

构建结果

构建成功后,会生成以下文件:

  1. HNP 包john.org_john_1.0.0.hnp
  2. 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:

# 破解密码文件
john password.txt

# 使用字典文件
john --wordlist=dictionary.txt password.txt

# 显示破解结果
john --show password.txt

# 使用特定格式
john --format=md5crypt password.txt

总结

适配要点

  1. 构建系统位置:构建系统在 src 目录下
  2. autoconfig.h 处理:确保 autoconfig.h 正确生成和修复
  3. OpenSSL 禁用:使用 --without-openssl 选项,避免 OpenSSL 依赖
  4. 配置修复:修复 autoconfig.h 中的 #undef

关键决策

  1. 禁用 OpenSSL:简化交叉编译过程
  2. 手动生成 autoconfig.h:提供回退方法创建和修复 autoconfig.h
  3. 模板变量替换:从 autoconfig.h.in 创建 autoconfig.h 并替换模板变量

FAQ

Q1: 为什么构建系统在 src 目录下?

A: John the Ripper 的构建系统位于 src 目录下,这是项目的设计。需要在 src 目录中运行构建命令。

Q2: 为什么需要禁用 OpenSSL?

A: 在交叉编译时,很难找到或配置正确的 OpenSSL 库。禁用 OpenSSL 可以简化构建过程,虽然某些哈希类型可能不可用。

Q3: 如何验证构建的二进制文件?

A: 可以使用 file 命令检查:

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社区
### John the Ripper 密码破解工具使用方法 #### 工具概述 John the Ripper 是一款开源的密码破解工具,在安全审计和渗透测试中被广泛应用,主要用于对已哈希过的密码进行破解。该工具支持多种加密算法,如 DES、MD5 和 SHA 系列等,并能处理来自不同操作系统的密码哈希文件[^2]。 #### 支持的操作系统安装方式 此工具适用于多个平台,包括 Linux 和 Windows。对于 Kali Linux 用户而言,John the Ripper 默认已被预装,极大地方便了安全研究人员调用这款强大的工具来进行研究工作。如果需要更新或重新安装,则可以通过官方文档获取最新版本并按照说明完成部署过程。 #### 主要功能特性 - **多样的攻击模式**:提供字典攻击、暴力穷举以及组合这两种策略的优点而形成的混合型攻击等方式; - **广泛的兼容性**:不仅限于特定类型的散列函数,还涵盖了其他常见的编码形式; - **高效的性能表现**:经过优化设计以提高解密速度,尤其是在面对复杂度较高的情况下也能保持良好的效率[^1]。 #### 基本命令行用法示例 以下是几个常用的命令行选项及其解释: ```bash john --format=FORMAT hashfile # 指定目标散列格式(例如 raw-MD5) john --wordlist=path/to/wordlist.txt hashfile # 使用指定单词表执行字典攻击 john --incremental=all hashfile # 启动增量模式下的全面字符集遍历尝试 ``` 这些基本指令可以帮助初次接触 John the Ripper 的用户快速上手,当然更深入的功能还需要查阅手册页(`man john`) 或访问官方网站了解更多细节[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扑克中的黑桃A

感谢您的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值