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

基本用法

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,使用内置的加密实现。

适配挑战

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

环境准备

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

解决方案

  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 创建
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 包配置

构建结果

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

  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:

bash 复制代码
# 破解密码文件
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 命令检查:

bash 复制代码
file john

应该显示类似:ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), ...

Q4: 禁用 OpenSSL 会影响功能吗?

A: 禁用 OpenSSL 后,某些需要 OpenSSL 的哈希类型可能不可用,但大多数常见的哈希类型仍然可用。


相关链接

相关推荐
不爱吃糖的程序媛2 小时前
鸿蒙PC Electron 打印服务实现详解
华为·electron·harmonyos
开源头条5 小时前
2025开源鸿蒙开发者激励计划正式启动,为生态繁荣注入持久动力
华为·开源·harmonyos
GEO_NEWS6 小时前
解析华为Flex:ai的开源棋局
人工智能·华为·开源
奔跑的露西ly8 小时前
【HarmonyOS NEXT】自定义样式复用
华为·harmonyos
lqj_本人8 小时前
HarmonyOS + Cordova:打包发布与环境差异常见问题指南
华为·harmonyos
不羁的木木8 小时前
【开源鸿蒙跨平台开发学习笔记】Day03:React Native 开发 HarmonyOS-GitCode口袋工具开发-1
笔记·学习·harmonyos
lqj_本人8 小时前
鸿蒙Cordova开发踩坑记录:震动反馈的“时差“
华为·harmonyos
m0_6855350810 小时前
华为光学工程师笔试真题(含答案与深度解析)
华为·光学·光学设计·光学工程·镜头设计
lqj_本人10 小时前
鸿蒙原生与Qt混合开发:性能优化与资源管理
qt·harmonyos