John the Ripper 安装用使用

摘要:
最终参照这篇文章,将JRT换成1.7.3.4版本,让它跑了起来。。。http://pka.engr.ccny.cuny.edu/~jmao/node/26简而言之,共有如下步骤1.下载JRT1.7.3.4版网址:http://www.openwall.com/john/2.解压tar-zxvfjohn-1.7.4.2.tar.gzcdjohn-1.7.4.2/src3.打patch有三个文件要修改 Makefile,crypt_fmt.c,john.c.Append"-lcrypt"toline"LDFLAGS=-s",makingthelinereadsas:在Makefile中将LDFLAGS=-s改为LDFLAGS=-s-lcrypt创建crypt_fmt.c,内容如下/*publicdomainproof-of-conceptcodebySolarDesigner*/#define_XOPEN_SOURCE/*forcrypt*/#include#include#include"arch.h"#include"params.h"#include"formats.h"#defineFORMAT_LABEL"crypt"#defineFORMAT_NAME"genericcrypt"#defineALGORITHM_NAME"?

试着在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 charsaved_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(intindex)
{
    return (unsigned char)crypt_out[12] & 0xF;
}

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

static int get_hash_2(intindex)
{
    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, intindex)
{
    strcpy(saved_key, key);
}

static char *get_key(intindex)
{
    returnsaved_key;
}

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

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

static int cmp_exact(char *source, intindex)
{
    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 structfmt_main fmt_DES, fmt_BSDI, fmt_MD5, fmt_BF;
extern structfmt_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)
...

免责声明:文章转载自《John the Ripper 安装用使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇牛X的web报表设计工具Grid++ReportCentOS7安装mysql后无法启动服务,提示Unit not found下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android JNI开发高级篇有关Android JNI开发中比较强大和有用的功能就是从JNI层创建、构造Java的类或执行Java层的方法获取属性等操作。 一、类的相关操作 1. jclass FindClass(JNIEnv *env, const char *name);

有关Android JNI开发中比较强大和有用的功能就是从JNI层创建、构造Java的类或执行Java层的方法获取属性等操作。 一、类的相关操作 1.jclass FindClass(JNIEnv *env, const char *name);查找类 该函数可能做过Java开发的不会陌生,这个是JNI层的实现,需要注意的是第二个参数为const char...

DataScope v1.0 多功能串口虚拟示波器使用介绍

DataScope v1.0 特性 1、无需安装,启动即用;2、支持同时刷新多达10个通道的单精度浮点型数据;3、支持多种格式的通道数据导入、导出及回放;4、支持全屏浏览;5、支持图表数据统计、测量及缩放;6、支持蓝牙适配器;7、支持各通道独立刷新;8、支持3D轨迹显示;9、3D立方体显示;10、航空仪表;11、灵活可屏蔽的快捷键支持。 ---软件下载见原...

unsigned char 与 char

Character values of type unsigned char have a range from 0 to 0xFF hexadecimal. A signed char has range 0x80 to 0x7F. These ranges translate to 0 to 255 decimal, and –128 to +127...

sql server字符串中怎么添加换行?

换行/回车,可以使用CHAR函数处理,比如: 1 insert into tbtest (text) values ('abc' + char(13)+char(10) + 'def') 主要还是要看你MFC它支持的换行是哪种形式: char(13)+char(10)形式还是使用转义的 形式,如果是转义形式的话,可以直接使用 1 insert ...

Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

最先附上下载地址 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后对一些数据进行一些加密解密的操作。 笔者之前没接触过任何加密解密方面的知识(当然,把每个字符的ASCII值加1之流对明文进行加密的“趣事”还是干过的,当时还很乐在其中。),甚至一开始连Crypto+...

SQL to_char,to_date日期字符串转换问题

1、转换函数 与date操作关系最大的就是两个转换函数:to_date(),to_char() to_date() 作用将字符类型按一定格式转化为日期类型: 具体用法:to_date('2004-11-27','yyyy-mm-dd'),前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。 如;to_date('2004-11-27 13:34:4...