John the Ripper 安装用使用

2023-05-16

试着在ubuntu下安装了John the Ripper最新版本1.7.9,非常不给面子,不成功,

总是报"No password hashes loaded"的错误。

 

最终参照这篇文章,将JRT换成1.7.3.4 版本,让它跑了起来。。。

http://pka.engr.ccny.cuny.edu/~jmao/node/26

 

简而言之,共有如下步骤

1. 下载JRT 1.7.3.4版

      (目前最新版为1.7.9,但1.7.9在ubuntu 10.04上没有跑成功)

  网址:  http://www.openwall.com/john/

2.  解压 


tar -zxvf john-1.7.4.2.tar.gz
cd john-1.7.4.2/src  

3. 打patch

   (这是核心的一步,不打patch,仍然会报No password hash loaded错误)

    有三个文件要修改 Makefile, crypt_fmt.c , john.c.

 Append "-lcrypt" to line "LDFLAGS = -s", making the line reads as:

 在Makefile中将LDFLAGS = -s改为  


LDFLAGS = -s -lcrypt  

  创建crypt_fmt.c,内容如下


/* public domain proof-of-concept code by Solar Designer */

#define _XOPEN_SOURCE /* for crypt(3) */
#include <string.h>
#include <unistd.h>

#include "arch.h"
#include "params.h"
#include "formats.h"

#define FORMAT_LABEL            "crypt"
#define FORMAT_NAME            "generic crypt(3)"
#define ALGORITHM_NAME            "?/" ARCH_BITS_STR

#define BENCHMARK_COMMENT        ""
#define BENCHMARK_LENGTH        0

#define PLAINTEXT_LENGTH        72

#define BINARY_SIZE            128
#define SALT_SIZE            BINARY_SIZE

#define MIN_KEYS_PER_CRYPT        1
#define MAX_KEYS_PER_CRYPT        1

static struct fmt_tests tests[] = {
    {"CCNf8Sbh3HDfQ", "U*U*U*U*"},
    {"CCX.K.MFy4Ois", "U*U***U"},
    {"CC4rMpbg9AMZ.", "U*U***U*"},
    {"XXxzOu6maQKqQ", "*U*U*U*U"},
    {"SDbsugeBiC58A", ""},
    {NULL}
};

static char saved_key[PLAINTEXT_LENGTH + 1];
static char saved_salt[SALT_SIZE];
static char *crypt_out;

static int valid(char *ciphertext)
{
#if 1
    int l = strlen(ciphertext);
    return l >= 13 && l < BINARY_SIZE;
#else
/* Poor load time, but more effective at rejecting bad/unsupported hashes */
    char *r = crypt("", ciphertext);
    int l = strlen(r);
    return
        !strncmp(r, ciphertext, 2) &&
        l == strlen(ciphertext) &&
        l >= 13 && l < BINARY_SIZE;
#endif
}

static void *binary(char *ciphertext)
{
    static char out[BINARY_SIZE];
    strncpy(out, ciphertext, sizeof(out)); /* NUL padding is required */
    return out;
}

static void *salt(char *ciphertext)
{
    static char out[SALT_SIZE];
    int cut = sizeof(out);

#if 1
/* This piece is optional, but matching salts are not detected without it */
    switch (strlen(ciphertext)) {
    case 13:
    case 24:
        cut = 2;
        break;

    case 20:
        if (ciphertext[0] == '_') cut = 9;
        break;

    case 34:
        if (!strncmp(ciphertext, "$1$", 3)) {
            char *p = strchr(ciphertext + 3, '$');
            if (p) cut = p - ciphertext;
        }
        break;

    case 59:
        if (!strncmp(ciphertext, "$2$", 3)) cut = 28;
        break;

    case 60:
        if (!strncmp(ciphertext, "$2a$", 4)) cut = 29;
        break;
    }
#endif

    /* NUL padding is required */
    memset(out, 0, sizeof(out));
    memcpy(out, ciphertext, cut);

    return out;
}

static int binary_hash_0(void *binary)
{
    return ((unsigned char *)binary)[12] & 0xF;
}

static int binary_hash_1(void *binary)
{
    return ((unsigned char *)binary)[12] & 0xFF;
}

static int binary_hash_2(void *binary)
{
    return
        (((unsigned char *)binary)[12] & 0xFF) |
        ((int)(((unsigned char *)binary)[11] & 0xF) << 8);
}

static int get_hash_0(int index)
{
    return (unsigned char)crypt_out[12] & 0xF;
}

static int get_hash_1(int index)
{
    return (unsigned char)crypt_out[12] & 0xFF;
}

static int get_hash_2(int index)
{
    return
        ((unsigned char)crypt_out[12] & 0xFF) |
        ((int)((unsigned char)crypt_out[11] & 0xF) << 8);
}

static int salt_hash(void *salt)
{
    int pos = strlen((char *)salt) - 2;

    return
        (((unsigned char *)salt)[pos] & 0xFF) |
        ((int)(((unsigned char *)salt)[pos + 1] & 3) << 8);
}

static void set_salt(void *salt)
{
    strcpy(saved_salt, salt);
}

static void set_key(char *key, int index)
{
    strcpy(saved_key, key);
}

static char *get_key(int index)
{
    return saved_key;
}

static void crypt_all(int count)
{
    crypt_out = crypt(saved_key, saved_salt);
}

static int cmp_all(void *binary, int count)
{
    return !strcmp((char *)binary, crypt_out);
}

static int cmp_exact(char *source, int index)
{
    return 1;
}

struct fmt_main fmt_crypt = {
    {
        FORMAT_LABEL,
        FORMAT_NAME,
        ALGORITHM_NAME,
        BENCHMARK_COMMENT,
        BENCHMARK_LENGTH,
        PLAINTEXT_LENGTH,
        BINARY_SIZE,
        SALT_SIZE,
        MIN_KEYS_PER_CRYPT,
        MAX_KEYS_PER_CRYPT,
        FMT_CASE | FMT_8_BIT,
        tests
    }, {
        fmt_default_init,
        valid,
        fmt_default_split,
        binary,
        salt,
        {
            binary_hash_0,
            binary_hash_1,
            binary_hash_2
        },
        salt_hash,
        set_salt,
        set_key,
        get_key,
        fmt_default_clear_keys,
        crypt_all,
        {
            get_hash_0,
            get_hash_1,
            get_hash_2
        },
        cmp_all,
        cmp_all,
        cmp_exact
    }
};  

John.c中要加两行,红色部分


extern struct fmt_main fmt_DES, fmt_BSDI, fmt_MD5, fmt_BF;
extern struct fmt_main fmt_AFS, fmt_LM;
extern struct fmt_main fmt_crypt;  

       john_register_one(&fmt_DES);
        john_register_one(&fmt_BSDI);
        john_register_one(&fmt_MD5);
        john_register_one(&fmt_BF);
        john_register_one(&fmt_AFS);
        john_register_one(&fmt_LM);
       john_register_one(&fmt_crypt);  

修改Makefile中JOHN_OBJS_MINIMAL的依赖


 JOHN_OBJS_MINIMAL = \
    DES_fmt.o DES_std.o DES_bs.o \
    BSDI_fmt.o \
    MD5_fmt.o MD5_std.o \
    BF_fmt.o BF_std.o \
    AFS_fmt.o \
    LM_fmt.o \
    batch.o bench.o charset.o common.o compiler.o config.o cracker.o \
    crc32.o external.o formats.o getopt.o idle.o inc.o john.o list.o \
    loader.o logger.o math.o memory.o misc.o options.o params.o path.o \
    recovery.o rpp.o rules.o signals.o single.o status.o tty.o wordlist.o \
    unshadow.o \
    unafs.o \
    unique.o \
    crypt_fmt.o  


4. 执行指令


make clean generic  

5. 执行John


sudo unshadow /etc/passwd /etc/shadow> shadowfile
./john shadowfile  

执行结果


vigar@vigar-laptop:~/software/john-1.7.3.4/run$ ./john shadowfile 
Loaded 6 password hashes with 6 different salts (generic crypt(3) [?/32])
test             (test)
aaa              (aaa)
...

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

John the Ripper 安装用使用 的相关文章

随机推荐

  • 74系列的型号

    74系列TTL数字逻辑集成电路系国际上通用的标准电路 其品种共分为六大类即 74xx 标准 74LSxx 低功耗肖特基 74Sxx 肖特基 74ALSxx 先进低功耗肖特基 74ASxx 先进肖特基 74Fxx 高速 只要序列号相同 xff
  • 【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件

    最近研究了一下DICOM和BMP文件转换的问题 xff0c 也是很头大 度娘了很久 xff0c 也在CSDN等论坛看到一些断断续续的文件 xff0c 最主要的是代码只是片断 xff0c 不是完整的实现 头大了 首先 xff0c 了解一下BM
  • Atomix getting start 浓浓的机翻

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 概观 Atomix 2 1是用于构建容错分布式系统的全功能框架 Atomix将ZooKeeper的一致性与Hazelcast的可用性和性能相结合 xff0c 使用一组定制通
  • Formik与antd-mobile的移动端的表单实践(下)

    大家好 xff0c 工作闲暇之余又来续写一下Formik这个库的文章了 xff0c 这次文章主要内容为如下 xff1a 更多表单组件的封装示例 单选 多选按钮选择器时间选择器文本输入框提交按钮Formik的表单验证Formik的表单提交处理
  • nginx与tomcat组合使用时获取客户端真实IP

    为什么80 的码农都做不了架构师 xff1f gt gt gt Nginx 43 Tomcat做反向代理在Tomcat中无法获取用户的真实IP解决步骤 xff1a 1 在Nginx配置文件中配置传递到Tomcat的IP变量名 xff1a 一
  • 记一次创建云硬盘失败的解决过程

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 背景 登录dashboard xff0c 点击创建云硬盘失败 xff0c 而且是点击完就直接报error错误 二 解决经过 思路一 xff1a 新上传的image镜像
  • linux samba 配置

    1 所需要软件包 samba common软件包中提供了samba服务器和客户中都必须使用的公共文件 samba软件包中包括了samba服务器程序的所有文件 samba client软件包中提供了Samabe客户机器的所有文件 system
  • tightvnc 远程开机_如何在Linux中安装和访问TightVNC远程桌面?

    tightvnc 远程开机 TightVNC is a very handy remote desktop application which is based on VNC protocol TightVNC is mostly used
  • linux grub命令行,引导工具GRUB详解

    导读 引导程序是驻留在硬盘第一个扇区 MBR 主引导记录 的程序 GRUB是一个功能强大的多系统引导程序 xff0c 专门处理Linux与其它操作系统共存的问题 下面就由我介绍一下grub conf文件里的具体内容及其含义 使用一下命令可以
  • Formik官方应用案例解析(三)使用react-select

    react select简介 React Select是github上一个极其火的控件库 xff0c 星数达到13004 xff0c 它是React开发中几乎是你必需打交道的一个内容 React Select的基本功能实现的是一个表单中的常
  • Juniper MPLS Static LSP

    MPLS Static LSP 1 配置接口去接收和处理MPLS帧 user 64 R1 set interface ge 1 0 0 unit 0 family inet family mpls 2 指定哪个接口运行MPLS user 6
  • 201803考试批次2C 程序设计语言,重庆大学201803批次2可视化程序设计(VB)D卷答案...

    201803考试批次2可视化程序设计 VB D卷 5 O0 R K G l可视化程序设计 VB l K 3 Z t 一 单项选择题 共 10 题 0 20 分 c c N G1 F4 D6 39 64 1 下列程序段的执行结果为 Dim x
  • VNC注册码

    5D7L8 ZQXSA 2L5D4 4UFB4 PWDLA 转载于 https blog 51cto com ciscolinux 1320541
  • matlab中矩阵可视化,matlab-如何可视化显示颜色和值的矩阵?

    您可以使用内置功能 39 X Y Z TickLabelRotation 39 和 39 X Y Z TickLabelRotation 39 并调整图形对象的许多参数 xff0c 轻松地自己创建此类绘图 这是一个例子 xff1a mat
  • Formik与antd-mobile的表单实践(上)

    概览 本文主要用于记录该次使用Formik时用到的相关接口 xff0c 而侧重点不在antd mobile xff0c 对antd mobile会贴出对应组件API 文章需要基础知识点 xff1a React基本知识ES6基本知识 文章实践
  • AT&T CORD架构解读

    这一两年 xff0c 我们时常听到CORD项目 xff08 Central Office Re Architected as a Data Center xff09 AT amp T希望通过CORD项目将运营商网络中的传统端局 xff08
  • 发送端口25,465,587端口疑问解答

    25端口 xff08 SMTP xff09 xff1a 25端口为SMTP xff08 Simple Mail Transfer Protocol xff0c 简单邮件传输协议 xff09 服务所开放的 xff0c 是用于发送邮件 如今绝大
  • brctl 命令详解

    安装网桥管理工具包 xff1a bridge utile 96 96 96 yum install bridge utils y 96 96 96 96 96 96 使用brctl命令创建网桥br1 96 96 96 brctl addbr
  • 缓存缓存CSS的策略

    浏览器缓存CSS将带来主要的性能提升 您确保服务器设置为发送标头 xff0c 这些标头告诉浏览器在给定的时间内挂接到CSS文件 最好的做法是 xff0c 即使不是大多数站点 xff0c 许多站点已经在这样做 与浏览器缓存紧密结合的是缓存清除
  • John the Ripper 安装用使用

    试着在ubuntu下安装了John the Ripper最新版本 xff11 7 9 xff0c 非常不给面子 xff0c 不成功 xff0c 总是报 34 No password hashes loaded 34 的错误 最终参照这篇文章