From 63b47eebc90f339007d6b110e7fd55f847e6d83d Mon Sep 17 00:00:00 2001 From: jsteube Date: Fri, 9 Sep 2016 23:17:43 +0200 Subject: [PATCH] Prepare move potfile specific functions into their own source file --- include/data.h | 4 +- include/hlfmt.h | 15 ++++++ include/interface.h | 97 ++++++++++++++++++++++++++++++++++ include/potfile.h | 36 +++++++++++++ include/types.h | 125 -------------------------------------------- src/Makefile | 10 ++-- src/data.c | 1 + src/filenames.c | 1 + src/hashcat.c | 125 ++++++++++++++++++-------------------------- src/hlfmt.c | 1 + src/hwmon.c | 1 + src/logfile.c | 1 + src/mpsp.c | 1 + src/opencl.c | 1 + src/potfile.c | 72 +++++++++++++++++++++++++ src/restore.c | 1 + src/rp_cpu.c | 1 + src/status.c | 1 + src/stdout.c | 1 + src/wordlist.c | 1 + 20 files changed, 290 insertions(+), 206 deletions(-) create mode 100644 include/potfile.h create mode 100644 src/potfile.c diff --git a/include/data.h b/include/data.h index dcc3195e7..f9b68f17c 100644 --- a/include/data.h +++ b/include/data.h @@ -178,6 +178,8 @@ typedef struct hashconfig_t *hashconfig; + potfile_ctx_t *potfile_ctx; + #if defined (HAVE_HWMON) uint gpu_temp_disable; uint gpu_temp_abort; @@ -189,8 +191,6 @@ typedef struct uint rp_gen; uint rp_gen_seed; - FILE *pot_fp; - /** * used for restore */ diff --git a/include/hlfmt.h b/include/hlfmt.h index a3c9995c8..32e5eef57 100644 --- a/include/hlfmt.h +++ b/include/hlfmt.h @@ -8,6 +8,21 @@ #include +typedef enum hlfmt_name +{ + HLFMT_HASHCAT = 0, + HLFMT_PWDUMP = 1, + HLFMT_PASSWD = 2, + HLFMT_SHADOW = 3, + HLFMT_DCC = 4, + HLFMT_DCC2 = 5, + HLFMT_NETNTLM1 = 7, + HLFMT_NETNTLM2 = 8, + HLFMT_NSLDAP = 9, + HLFMT_NSLDAPS = 10 + +} hlfmt_name_t; + char *strhlfmt (const uint hashfile_format); void hlfmt_hash (uint hashfile_format, char *line_buf, int line_len, char **hashbuf_pos, int *hashbuf_len, hashconfig_t *hashconfig); diff --git a/include/interface.h b/include/interface.h index 56d1f540f..878ba8096 100644 --- a/include/interface.h +++ b/include/interface.h @@ -40,6 +40,103 @@ struct _hashconfig typedef struct _hashconfig hashconfig_t; +/** + * option types + */ + +typedef enum salt_type +{ + SALT_TYPE_NONE = 1, + SALT_TYPE_EMBEDDED = 2, + SALT_TYPE_INTERN = 3, + SALT_TYPE_EXTERN = 4, + SALT_TYPE_VIRTUAL = 5 + +} salt_type_t; + +typedef enum opti_type +{ + OPTI_TYPE_ZERO_BYTE = (1 << 1), + OPTI_TYPE_PRECOMPUTE_INIT = (1 << 2), + OPTI_TYPE_PRECOMPUTE_MERKLE = (1 << 3), + OPTI_TYPE_PRECOMPUTE_PERMUT = (1 << 4), + OPTI_TYPE_MEET_IN_MIDDLE = (1 << 5), + OPTI_TYPE_EARLY_SKIP = (1 << 6), + OPTI_TYPE_NOT_SALTED = (1 << 7), + OPTI_TYPE_NOT_ITERATED = (1 << 8), + OPTI_TYPE_PREPENDED_SALT = (1 << 9), + OPTI_TYPE_APPENDED_SALT = (1 << 10), + OPTI_TYPE_SINGLE_HASH = (1 << 11), + OPTI_TYPE_SINGLE_SALT = (1 << 12), + OPTI_TYPE_BRUTE_FORCE = (1 << 13), + OPTI_TYPE_RAW_HASH = (1 << 14), + OPTI_TYPE_SLOW_HASH_SIMD = (1 << 15), + OPTI_TYPE_USES_BITS_8 = (1 << 16), + OPTI_TYPE_USES_BITS_16 = (1 << 17), + OPTI_TYPE_USES_BITS_32 = (1 << 18), + OPTI_TYPE_USES_BITS_64 = (1 << 19) + +} opti_type_t; + +typedef enum opts_type +{ + OPTS_TYPE_PT_UNICODE = (1 << 0), + OPTS_TYPE_PT_UPPER = (1 << 1), + OPTS_TYPE_PT_LOWER = (1 << 2), + OPTS_TYPE_PT_ADD01 = (1 << 3), + OPTS_TYPE_PT_ADD02 = (1 << 4), + OPTS_TYPE_PT_ADD80 = (1 << 5), + OPTS_TYPE_PT_ADDBITS14 = (1 << 6), + OPTS_TYPE_PT_ADDBITS15 = (1 << 7), + OPTS_TYPE_PT_GENERATE_LE = (1 << 8), + OPTS_TYPE_PT_GENERATE_BE = (1 << 9), + OPTS_TYPE_PT_NEVERCRACK = (1 << 10), // if we want all possible results + OPTS_TYPE_PT_BITSLICE = (1 << 11), + OPTS_TYPE_ST_UNICODE = (1 << 12), + OPTS_TYPE_ST_UPPER = (1 << 13), + OPTS_TYPE_ST_LOWER = (1 << 14), + OPTS_TYPE_ST_ADD01 = (1 << 15), + OPTS_TYPE_ST_ADD02 = (1 << 16), + OPTS_TYPE_ST_ADD80 = (1 << 17), + OPTS_TYPE_ST_ADDBITS14 = (1 << 18), + OPTS_TYPE_ST_ADDBITS15 = (1 << 19), + OPTS_TYPE_ST_GENERATE_LE = (1 << 20), + OPTS_TYPE_ST_GENERATE_BE = (1 << 21), + OPTS_TYPE_ST_HEX = (1 << 22), + OPTS_TYPE_ST_BASE64 = (1 << 23), + OPTS_TYPE_HASH_COPY = (1 << 24), + OPTS_TYPE_HOOK12 = (1 << 25), + OPTS_TYPE_HOOK23 = (1 << 26) + +} opts_type_t; + +typedef enum dgst_size +{ + DGST_SIZE_4_2 = (2 * sizeof (uint)), // 8 + DGST_SIZE_4_4 = (4 * sizeof (uint)), // 16 + DGST_SIZE_4_5 = (5 * sizeof (uint)), // 20 + DGST_SIZE_4_6 = (6 * sizeof (uint)), // 24 + DGST_SIZE_4_8 = (8 * sizeof (uint)), // 32 + DGST_SIZE_4_16 = (16 * sizeof (uint)), // 64 !!! + DGST_SIZE_4_32 = (32 * sizeof (uint)), // 128 !!! + DGST_SIZE_4_64 = (64 * sizeof (uint)), // 256 + DGST_SIZE_8_8 = (8 * sizeof (u64)), // 64 !!! + DGST_SIZE_8_16 = (16 * sizeof (u64)), // 128 !!! + DGST_SIZE_8_25 = (25 * sizeof (u64)) // 200 + +} dgst_size_t; + +typedef enum attack_exec +{ + ATTACK_EXEC_OUTSIDE_KERNEL = 10, + ATTACK_EXEC_INSIDE_KERNEL = 11 + +} attack_exec_t; + +/** + * algo specific + */ + typedef struct { uint iv[4]; diff --git a/include/potfile.h b/include/potfile.h new file mode 100644 index 000000000..bce7a9369 --- /dev/null +++ b/include/potfile.h @@ -0,0 +1,36 @@ +/** + * Authors.....: Jens Steube + * License.....: MIT + */ + +#ifndef _POTFILE_H +#define _POTFILE_H + +#include +#include + +typedef struct +{ + char plain_buf[HCBUFSIZ_TINY]; + int plain_len; + + hash_t hash; + +} pot_t; + +typedef struct +{ + FILE *fp; + + char *filename; + +} potfile_ctx_t; + +void potfile_init (potfile_ctx_t *potfile_ctx, const char *profile_dir, const char *potfile_path); +int potfile_read_open (potfile_ctx_t *potfile_ctx); +void potfile_read_close (potfile_ctx_t *potfile_ctx); +int potfile_write_open (potfile_ctx_t *potfile_ctx); +void potfile_write_close (potfile_ctx_t *potfile_ctx); +void potfile_destroy (potfile_ctx_t *potfile_ctx); + +#endif // _POTFILE_H diff --git a/include/types.h b/include/types.h index e9745b210..c837835e0 100644 --- a/include/types.h +++ b/include/types.h @@ -36,20 +36,7 @@ typedef enum hl_mode #define HLFMTS_CNT 11 -typedef enum hlfmt_name -{ - HLFMT_HASHCAT = 0, - HLFMT_PWDUMP = 1, - HLFMT_PASSWD = 2, - HLFMT_SHADOW = 3, - HLFMT_DCC = 4, - HLFMT_DCC2 = 5, - HLFMT_NETNTLM1 = 7, - HLFMT_NETNTLM2 = 8, - HLFMT_NSLDAP = 9, - HLFMT_NSLDAPS = 10 -} hlfmt_name_t; typedef enum attack_mode { @@ -74,13 +61,6 @@ typedef enum attack_kern } attack_kern_t; -typedef enum attack_exec -{ - ATTACK_EXEC_OUTSIDE_KERNEL = 10, - ATTACK_EXEC_INSIDE_KERNEL = 11 - -} attack_exec_t; - typedef enum combinator_mode { COMBINATOR_MODE_BASE_LEFT = 10001, @@ -115,104 +95,6 @@ typedef enum outfile_fmt } outfile_fmt_t; -/** - * salt types - */ - -typedef enum salt_type -{ - SALT_TYPE_NONE = 1, - SALT_TYPE_EMBEDDED = 2, - SALT_TYPE_INTERN = 3, - SALT_TYPE_EXTERN = 4, - SALT_TYPE_VIRTUAL = 5 - -} salt_type_t; - -/** - * optimizer options - */ - -typedef enum opti_type -{ - OPTI_TYPE_ZERO_BYTE = (1 << 1), - OPTI_TYPE_PRECOMPUTE_INIT = (1 << 2), - OPTI_TYPE_PRECOMPUTE_MERKLE = (1 << 3), - OPTI_TYPE_PRECOMPUTE_PERMUT = (1 << 4), - OPTI_TYPE_MEET_IN_MIDDLE = (1 << 5), - OPTI_TYPE_EARLY_SKIP = (1 << 6), - OPTI_TYPE_NOT_SALTED = (1 << 7), - OPTI_TYPE_NOT_ITERATED = (1 << 8), - OPTI_TYPE_PREPENDED_SALT = (1 << 9), - OPTI_TYPE_APPENDED_SALT = (1 << 10), - OPTI_TYPE_SINGLE_HASH = (1 << 11), - OPTI_TYPE_SINGLE_SALT = (1 << 12), - OPTI_TYPE_BRUTE_FORCE = (1 << 13), - OPTI_TYPE_RAW_HASH = (1 << 14), - OPTI_TYPE_SLOW_HASH_SIMD = (1 << 15), - OPTI_TYPE_USES_BITS_8 = (1 << 16), - OPTI_TYPE_USES_BITS_16 = (1 << 17), - OPTI_TYPE_USES_BITS_32 = (1 << 18), - OPTI_TYPE_USES_BITS_64 = (1 << 19) - -} opti_type_t; - -/** - * hash options - */ - -typedef enum opts_type -{ - OPTS_TYPE_PT_UNICODE = (1 << 0), - OPTS_TYPE_PT_UPPER = (1 << 1), - OPTS_TYPE_PT_LOWER = (1 << 2), - OPTS_TYPE_PT_ADD01 = (1 << 3), - OPTS_TYPE_PT_ADD02 = (1 << 4), - OPTS_TYPE_PT_ADD80 = (1 << 5), - OPTS_TYPE_PT_ADDBITS14 = (1 << 6), - OPTS_TYPE_PT_ADDBITS15 = (1 << 7), - OPTS_TYPE_PT_GENERATE_LE = (1 << 8), - OPTS_TYPE_PT_GENERATE_BE = (1 << 9), - OPTS_TYPE_PT_NEVERCRACK = (1 << 10), // if we want all possible results - OPTS_TYPE_PT_BITSLICE = (1 << 11), - OPTS_TYPE_ST_UNICODE = (1 << 12), - OPTS_TYPE_ST_UPPER = (1 << 13), - OPTS_TYPE_ST_LOWER = (1 << 14), - OPTS_TYPE_ST_ADD01 = (1 << 15), - OPTS_TYPE_ST_ADD02 = (1 << 16), - OPTS_TYPE_ST_ADD80 = (1 << 17), - OPTS_TYPE_ST_ADDBITS14 = (1 << 18), - OPTS_TYPE_ST_ADDBITS15 = (1 << 19), - OPTS_TYPE_ST_GENERATE_LE = (1 << 20), - OPTS_TYPE_ST_GENERATE_BE = (1 << 21), - OPTS_TYPE_ST_HEX = (1 << 22), - OPTS_TYPE_ST_BASE64 = (1 << 23), - OPTS_TYPE_HASH_COPY = (1 << 24), - OPTS_TYPE_HOOK12 = (1 << 25), - OPTS_TYPE_HOOK23 = (1 << 26) - -} opts_type_t; - -/** - * digests - */ - -typedef enum dgst_size -{ - DGST_SIZE_4_2 = (2 * sizeof (uint)), // 8 - DGST_SIZE_4_4 = (4 * sizeof (uint)), // 16 - DGST_SIZE_4_5 = (5 * sizeof (uint)), // 20 - DGST_SIZE_4_6 = (6 * sizeof (uint)), // 24 - DGST_SIZE_4_8 = (8 * sizeof (uint)), // 32 - DGST_SIZE_4_16 = (16 * sizeof (uint)), // 64 !!! - DGST_SIZE_4_32 = (32 * sizeof (uint)), // 128 !!! - DGST_SIZE_4_64 = (64 * sizeof (uint)), // 256 - DGST_SIZE_8_8 = (8 * sizeof (u64)), // 64 !!! - DGST_SIZE_8_16 = (16 * sizeof (u64)), // 128 !!! - DGST_SIZE_8_25 = (25 * sizeof (u64)) // 200 - -} dgst_size_t; - /** * status */ @@ -266,14 +148,7 @@ typedef struct } hash_t; -typedef struct -{ - char plain_buf[256]; - int plain_len; - hash_t hash; - -} pot_t; diff --git a/src/Makefile b/src/Makefile index 0209434a9..db8c11d39 100644 --- a/src/Makefile +++ b/src/Makefile @@ -166,7 +166,7 @@ LFLAGS_CROSS_WIN := -lpsapi ## Objects ## -NATIVE_OBJS := obj/dictstat.NATIVE.o obj/wordlist.NATIVE.o obj/stdout.NATIVE.o obj/filenames.NATIVE.o obj/hlfmt.NATIVE.o obj/status.NATIVE.o obj/restore.NATIVE.o obj/bitmap.NATIVE.o obj/opencl.NATIVE.o obj/affinity.NATIVE.o obj/filehandling.NATIVE.o obj/tuningdb.NATIVE.o obj/locking.NATIVE.o obj/folder.NATIVE.o obj/bitops.NATIVE.o obj/convert.NATIVE.o obj/cpu_aes.NATIVE.o obj/cpu_crc32.NATIVE.o obj/cpu_des.NATIVE.o obj/cpu_md5.NATIVE.o obj/cpu_sha1.NATIVE.o obj/cpu_sha256.NATIVE.o obj/data.NATIVE.o obj/ext_OpenCL.NATIVE.o obj/hwmon.NATIVE.o obj/interface.NATIVE.o obj/logfile.NATIVE.o obj/logging.NATIVE.o obj/memory.NATIVE.o obj/mpsp.NATIVE.o obj/rp_cpu.NATIVE.o obj/rp_kernel_on_cpu.NATIVE.o obj/shared.NATIVE.o obj/terminal.NATIVE.o obj/usage.NATIVE.o +NATIVE_OBJS := obj/potfile.NATIVE.o obj/dictstat.NATIVE.o obj/wordlist.NATIVE.o obj/stdout.NATIVE.o obj/filenames.NATIVE.o obj/hlfmt.NATIVE.o obj/status.NATIVE.o obj/restore.NATIVE.o obj/bitmap.NATIVE.o obj/opencl.NATIVE.o obj/affinity.NATIVE.o obj/filehandling.NATIVE.o obj/tuningdb.NATIVE.o obj/locking.NATIVE.o obj/folder.NATIVE.o obj/bitops.NATIVE.o obj/convert.NATIVE.o obj/cpu_aes.NATIVE.o obj/cpu_crc32.NATIVE.o obj/cpu_des.NATIVE.o obj/cpu_md5.NATIVE.o obj/cpu_sha1.NATIVE.o obj/cpu_sha256.NATIVE.o obj/data.NATIVE.o obj/ext_OpenCL.NATIVE.o obj/hwmon.NATIVE.o obj/interface.NATIVE.o obj/logfile.NATIVE.o obj/logging.NATIVE.o obj/memory.NATIVE.o obj/mpsp.NATIVE.o obj/rp_cpu.NATIVE.o obj/rp_kernel_on_cpu.NATIVE.o obj/shared.NATIVE.o obj/terminal.NATIVE.o obj/usage.NATIVE.o ifeq ($(UNAME),Linux) NATIVE_OBJS += obj/ext_ADL.NATIVE.o @@ -175,8 +175,8 @@ NATIVE_OBJS += obj/ext_nvml.NATIVE.o NATIVE_OBJS += obj/ext_xnvctrl.NATIVE.o endif -LINUX_32_OBJS := obj/dictstat.LINUX.32.o obj/wordlist.LINUX.32.o obj/stdout.LINUX.32.o obj/filenames.LINUX.32.o obj/hlfmt.LINUX.32.o obj/status.LINUX.32.o obj/restore.LINUX.32.o obj/bitmap.LINUX.32.o obj/opencl.LINUX.32.o obj/affinity.LINUX.32.o obj/filehandling.LINUX.32.o obj/tuningdb.LINUX.32.o obj/locking.LINUX.32.o obj/folder.LINUX.32.o obj/bitops.LINUX.32.o obj/convert.LINUX.32.o obj/cpu_aes.LINUX.32.o obj/cpu_crc32.LINUX.32.o obj/cpu_des.LINUX.32.o obj/cpu_md5.LINUX.32.o obj/cpu_sha1.LINUX.32.o obj/cpu_sha256.LINUX.32.o obj/data.LINUX.32.o obj/ext_ADL.LINUX.32.o obj/ext_nvapi.LINUX.32.o obj/ext_nvml.LINUX.32.o obj/ext_OpenCL.LINUX.32.o obj/ext_xnvctrl.LINUX.32.o obj/hwmon.LINUX.32.o obj/interface.LINUX.32.o obj/logfile.LINUX.32.o obj/logging.LINUX.32.o obj/memory.LINUX.32.o obj/mpsp.LINUX.32.o obj/rp_cpu.LINUX.32.o obj/rp_kernel_on_cpu.LINUX.32.o obj/shared.LINUX.32.o obj/terminal.LINUX.32.o obj/usage.LINUX.32.o -LINUX_64_OBJS := obj/dictstat.LINUX.64.o obj/wordlist.LINUX.64.o obj/stdout.LINUX.64.o obj/filenames.LINUX.64.o obj/hlfmt.LINUX.64.o obj/status.LINUX.64.o obj/restore.LINUX.64.o obj/bitmap.LINUX.64.o obj/opencl.LINUX.64.o obj/affinity.LINUX.64.o obj/filehandling.LINUX.64.o obj/tuningdb.LINUX.64.o obj/locking.LINUX.64.o obj/folder.LINUX.64.o obj/bitops.LINUX.64.o obj/convert.LINUX.64.o obj/cpu_aes.LINUX.64.o obj/cpu_crc32.LINUX.64.o obj/cpu_des.LINUX.64.o obj/cpu_md5.LINUX.64.o obj/cpu_sha1.LINUX.64.o obj/cpu_sha256.LINUX.64.o obj/data.LINUX.64.o obj/ext_ADL.LINUX.64.o obj/ext_nvapi.LINUX.64.o obj/ext_nvml.LINUX.64.o obj/ext_OpenCL.LINUX.64.o obj/ext_xnvctrl.LINUX.64.o obj/hwmon.LINUX.64.o obj/interface.LINUX.64.o obj/logfile.LINUX.64.o obj/logging.LINUX.64.o obj/memory.LINUX.64.o obj/mpsp.LINUX.64.o obj/rp_cpu.LINUX.64.o obj/rp_kernel_on_cpu.LINUX.64.o obj/shared.LINUX.64.o obj/terminal.LINUX.64.o obj/usage.LINUX.64.o +LINUX_32_OBJS := obj/potfile.LINUX.32.o obj/dictstat.LINUX.32.o obj/wordlist.LINUX.32.o obj/stdout.LINUX.32.o obj/filenames.LINUX.32.o obj/hlfmt.LINUX.32.o obj/status.LINUX.32.o obj/restore.LINUX.32.o obj/bitmap.LINUX.32.o obj/opencl.LINUX.32.o obj/affinity.LINUX.32.o obj/filehandling.LINUX.32.o obj/tuningdb.LINUX.32.o obj/locking.LINUX.32.o obj/folder.LINUX.32.o obj/bitops.LINUX.32.o obj/convert.LINUX.32.o obj/cpu_aes.LINUX.32.o obj/cpu_crc32.LINUX.32.o obj/cpu_des.LINUX.32.o obj/cpu_md5.LINUX.32.o obj/cpu_sha1.LINUX.32.o obj/cpu_sha256.LINUX.32.o obj/data.LINUX.32.o obj/ext_ADL.LINUX.32.o obj/ext_nvapi.LINUX.32.o obj/ext_nvml.LINUX.32.o obj/ext_OpenCL.LINUX.32.o obj/ext_xnvctrl.LINUX.32.o obj/hwmon.LINUX.32.o obj/interface.LINUX.32.o obj/logfile.LINUX.32.o obj/logging.LINUX.32.o obj/memory.LINUX.32.o obj/mpsp.LINUX.32.o obj/rp_cpu.LINUX.32.o obj/rp_kernel_on_cpu.LINUX.32.o obj/shared.LINUX.32.o obj/terminal.LINUX.32.o obj/usage.LINUX.32.o +LINUX_64_OBJS := obj/potfile.LINUX.64.o obj/dictstat.LINUX.64.o obj/wordlist.LINUX.64.o obj/stdout.LINUX.64.o obj/filenames.LINUX.64.o obj/hlfmt.LINUX.64.o obj/status.LINUX.64.o obj/restore.LINUX.64.o obj/bitmap.LINUX.64.o obj/opencl.LINUX.64.o obj/affinity.LINUX.64.o obj/filehandling.LINUX.64.o obj/tuningdb.LINUX.64.o obj/locking.LINUX.64.o obj/folder.LINUX.64.o obj/bitops.LINUX.64.o obj/convert.LINUX.64.o obj/cpu_aes.LINUX.64.o obj/cpu_crc32.LINUX.64.o obj/cpu_des.LINUX.64.o obj/cpu_md5.LINUX.64.o obj/cpu_sha1.LINUX.64.o obj/cpu_sha256.LINUX.64.o obj/data.LINUX.64.o obj/ext_ADL.LINUX.64.o obj/ext_nvapi.LINUX.64.o obj/ext_nvml.LINUX.64.o obj/ext_OpenCL.LINUX.64.o obj/ext_xnvctrl.LINUX.64.o obj/hwmon.LINUX.64.o obj/interface.LINUX.64.o obj/logfile.LINUX.64.o obj/logging.LINUX.64.o obj/memory.LINUX.64.o obj/mpsp.LINUX.64.o obj/rp_cpu.LINUX.64.o obj/rp_kernel_on_cpu.LINUX.64.o obj/shared.LINUX.64.o obj/terminal.LINUX.64.o obj/usage.LINUX.64.o # Windows CRT file globbing: @@ -186,8 +186,8 @@ CRT_GLOB_INCLUDE_FOLDER := $(dir $(lastword $(MAKEFILE_LIST))) include $(CRT_GLOB_INCLUDE_FOLDER)/win_file_globbing.mk -WIN_32_OBJS := obj/dictstat.WIN.32.o obj/wordlist.WIN.32.o obj/stdout.WIN.32.o obj/filenames.WIN.32.o obj/hlfmt.WIN.32.o obj/status.WIN.32.o obj/restore.WIN.32.o obj/bitmap.WIN.32.o obj/opencl.WIN.32.o obj/affinity.WIN.32.o obj/filehandling.WIN.32.o obj/tuningdb.WIN.32.o obj/locking.WIN.32.o obj/folder.WIN.32.o obj/bitops.WIN.32.o obj/convert.WIN.32.o obj/cpu_aes.WIN.32.o obj/cpu_crc32.WIN.32.o obj/cpu_des.WIN.32.o obj/cpu_md5.WIN.32.o obj/cpu_sha1.WIN.32.o obj/cpu_sha256.WIN.32.o obj/data.WIN.32.o obj/ext_ADL.WIN.32.o obj/ext_nvapi.WIN.32.o obj/ext_nvml.WIN.32.o obj/ext_OpenCL.WIN.32.o obj/ext_xnvctrl.WIN.32.o obj/hwmon.WIN.32.o obj/interface.WIN.32.o obj/logfile.WIN.32.o obj/logging.WIN.32.o obj/memory.WIN.32.o obj/mpsp.WIN.32.o obj/rp_cpu.WIN.32.o obj/rp_kernel_on_cpu.WIN.32.o obj/shared.WIN.32.o obj/terminal.WIN.32.o obj/usage.WIN.32.o $(CRT_GLOB_32) -WIN_64_OBJS := obj/dictstat.WIN.64.o obj/wordlist.WIN.64.o obj/stdout.WIN.64.o obj/filenames.WIN.64.o obj/hlfmt.WIN.64.o obj/status.WIN.64.o obj/restore.WIN.64.o obj/bitmap.WIN.64.o obj/opencl.WIN.64.o obj/affinity.WIN.64.o obj/filehandling.WIN.64.o obj/tuningdb.WIN.64.o obj/locking.WIN.64.o obj/folder.WIN.64.o obj/bitops.WIN.64.o obj/convert.WIN.64.o obj/cpu_aes.WIN.64.o obj/cpu_crc32.WIN.64.o obj/cpu_des.WIN.64.o obj/cpu_md5.WIN.64.o obj/cpu_sha1.WIN.64.o obj/cpu_sha256.WIN.64.o obj/data.WIN.64.o obj/ext_ADL.WIN.64.o obj/ext_nvapi.WIN.64.o obj/ext_nvml.WIN.64.o obj/ext_OpenCL.WIN.64.o obj/ext_xnvctrl.WIN.64.o obj/hwmon.WIN.64.o obj/interface.WIN.64.o obj/logfile.WIN.64.o obj/logging.WIN.64.o obj/memory.WIN.64.o obj/mpsp.WIN.64.o obj/rp_cpu.WIN.64.o obj/rp_kernel_on_cpu.WIN.64.o obj/shared.WIN.64.o obj/terminal.WIN.64.o obj/usage.WIN.64.o $(CRT_GLOB_64) +WIN_32_OBJS := obj/potfile.WIN.32.o obj/dictstat.WIN.32.o obj/wordlist.WIN.32.o obj/stdout.WIN.32.o obj/filenames.WIN.32.o obj/hlfmt.WIN.32.o obj/status.WIN.32.o obj/restore.WIN.32.o obj/bitmap.WIN.32.o obj/opencl.WIN.32.o obj/affinity.WIN.32.o obj/filehandling.WIN.32.o obj/tuningdb.WIN.32.o obj/locking.WIN.32.o obj/folder.WIN.32.o obj/bitops.WIN.32.o obj/convert.WIN.32.o obj/cpu_aes.WIN.32.o obj/cpu_crc32.WIN.32.o obj/cpu_des.WIN.32.o obj/cpu_md5.WIN.32.o obj/cpu_sha1.WIN.32.o obj/cpu_sha256.WIN.32.o obj/data.WIN.32.o obj/ext_ADL.WIN.32.o obj/ext_nvapi.WIN.32.o obj/ext_nvml.WIN.32.o obj/ext_OpenCL.WIN.32.o obj/ext_xnvctrl.WIN.32.o obj/hwmon.WIN.32.o obj/interface.WIN.32.o obj/logfile.WIN.32.o obj/logging.WIN.32.o obj/memory.WIN.32.o obj/mpsp.WIN.32.o obj/rp_cpu.WIN.32.o obj/rp_kernel_on_cpu.WIN.32.o obj/shared.WIN.32.o obj/terminal.WIN.32.o obj/usage.WIN.32.o $(CRT_GLOB_32) +WIN_64_OBJS := obj/potfile.WIN.64.o obj/dictstat.WIN.64.o obj/wordlist.WIN.64.o obj/stdout.WIN.64.o obj/filenames.WIN.64.o obj/hlfmt.WIN.64.o obj/status.WIN.64.o obj/restore.WIN.64.o obj/bitmap.WIN.64.o obj/opencl.WIN.64.o obj/affinity.WIN.64.o obj/filehandling.WIN.64.o obj/tuningdb.WIN.64.o obj/locking.WIN.64.o obj/folder.WIN.64.o obj/bitops.WIN.64.o obj/convert.WIN.64.o obj/cpu_aes.WIN.64.o obj/cpu_crc32.WIN.64.o obj/cpu_des.WIN.64.o obj/cpu_md5.WIN.64.o obj/cpu_sha1.WIN.64.o obj/cpu_sha256.WIN.64.o obj/data.WIN.64.o obj/ext_ADL.WIN.64.o obj/ext_nvapi.WIN.64.o obj/ext_nvml.WIN.64.o obj/ext_OpenCL.WIN.64.o obj/ext_xnvctrl.WIN.64.o obj/hwmon.WIN.64.o obj/interface.WIN.64.o obj/logfile.WIN.64.o obj/logging.WIN.64.o obj/memory.WIN.64.o obj/mpsp.WIN.64.o obj/rp_cpu.WIN.64.o obj/rp_kernel_on_cpu.WIN.64.o obj/shared.WIN.64.o obj/terminal.WIN.64.o obj/usage.WIN.64.o $(CRT_GLOB_64) ## ## Targets: Global diff --git a/src/data.c b/src/data.c index 98a2bb8f5..696c166a9 100644 --- a/src/data.c +++ b/src/data.c @@ -18,6 +18,7 @@ #include "rp_cpu.h" #include "restore.h" #include "opencl.h" +#include "potfile.h" #include "data.h" hc_global_data_t data; diff --git a/src/filenames.c b/src/filenames.c index 3e674cb6d..19b6f246f 100644 --- a/src/filenames.c +++ b/src/filenames.c @@ -6,6 +6,7 @@ #include "common.h" #include "types_int.h" #include "types.h" +#include "interface.h" #include "filenames.h" void generate_dictstat_filename (char *profile_dir, char *dictstat_filename) diff --git a/src/hashcat.c b/src/hashcat.c index f4c360661..acc7ee644 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -60,6 +60,7 @@ #include "hwmon.h" #include "mpsp.h" #include "restore.h" +#include "potfile.h" #include "data.h" #include "affinity.h" #include "bitmap.h" @@ -186,8 +187,6 @@ static const char OPTI_STR_USES_BITS_64[] = "Uses-64-Bit"; #define LOOPBACK_FILE "hashcat.loopback" -#define POTFILE_FILENAME "hashcat.pot" - #define MAX_CUT_TRIES 4 @@ -1177,7 +1176,6 @@ static void check_hash (hc_device_param_t *device_param, plain_t *plain) { char *outfile = data.outfile; uint quiet = data.quiet; - FILE *pot_fp = data.pot_fp; uint loopback = data.loopback; uint debug_mode = data.debug_mode; char *debug_file = data.debug_file; @@ -1411,19 +1409,21 @@ static void check_hash (hc_device_param_t *device_param, plain_t *plain) // if enabled, update also the potfile - if (pot_fp) + potfile_ctx_t *potfile_ctx = data.potfile_ctx; + + if (potfile_ctx->fp) { - lock_file (pot_fp); + //lock_file (potfile_ctx->fp); - fprintf (pot_fp, "%s:", out_buf); + fprintf (potfile_ctx->fp, "%s:", out_buf); - format_plain (pot_fp, plain_ptr, plain_len, 1); + format_plain (potfile_ctx->fp, plain_ptr, plain_len, 1); - fputc ('\n', pot_fp); + fputc ('\n', potfile_ctx->fp); - fflush (pot_fp); + fflush (potfile_ctx->fp); - unlock_file (pot_fp); + //unlock_file (potfile_ctx->fp); } // outfile @@ -6422,54 +6422,29 @@ int main (int argc, char **argv) * dictstat */ - dictstat_ctx_t dictstat_ctx; + dictstat_ctx_t *dictstat_ctx = mymalloc (sizeof (dictstat_ctx_t)); - dictstat_init (&dictstat_ctx, profile_dir); + dictstat_init (dictstat_ctx, profile_dir); if (keyspace == 0) { - dictstat_read (&dictstat_ctx); + dictstat_read (dictstat_ctx); } /** - * potfile + * outfile */ - char potfile[256] = { 0 }; - - if (potfile_path == NULL) - { - snprintf (potfile, sizeof (potfile) - 1, "%s/%s", profile_dir, POTFILE_FILENAME); - } - else - { - strncpy (potfile, potfile_path, sizeof (potfile) - 1); - } - - data.pot_fp = NULL; - FILE *out_fp = NULL; - FILE *pot_fp = NULL; if (show == 1 || left == 1) { - pot_fp = fopen (potfile, "rb"); - - if (pot_fp == NULL) - { - log_error ("ERROR: %s: %s", potfile, strerror (errno)); - - return -1; - } - if (outfile != NULL) { if ((out_fp = fopen (outfile, "ab")) == NULL) { log_error ("ERROR: %s: %s", outfile, strerror (errno)); - fclose (pot_fp); - return -1; } } @@ -6478,22 +6453,16 @@ int main (int argc, char **argv) out_fp = stdout; } } - else - { - if (potfile_disable == 0) - { - pot_fp = fopen (potfile, "ab"); - if (pot_fp == NULL) - { - log_error ("ERROR: %s: %s", potfile, strerror (errno)); + /** + * potfile + */ - return -1; - } + potfile_ctx_t *potfile_ctx = mymalloc (sizeof (potfile_ctx_t)); - data.pot_fp = pot_fp; - } - } + data.potfile_ctx = potfile_ctx; + + potfile_init (potfile_ctx, profile_dir, potfile_path); pot_t *pot = NULL; @@ -6504,9 +6473,13 @@ int main (int argc, char **argv) { SUPPRESS_OUTPUT = 1; - pot_avail = count_lines (pot_fp); + int rc = potfile_read_open (potfile_ctx); - rewind (pot_fp); + if (rc == -1) return -1; + + pot_avail = count_lines (potfile_ctx->fp); + + rewind (potfile_ctx->fp); pot = (pot_t *) mycalloc (pot_avail, sizeof (pot_t)); @@ -6516,11 +6489,11 @@ int main (int argc, char **argv) char *line_buf = (char *) mymalloc (HCBUFSIZ_LARGE); - while (!feof (pot_fp)) + while (!feof (potfile_ctx->fp)) { line_num++; - int line_len = fgetl (pot_fp, line_buf); + int line_len = fgetl (potfile_ctx->fp, line_buf); if (line_len == 0) continue; @@ -6629,9 +6602,9 @@ int main (int argc, char **argv) pot_cnt++; } - myfree (line_buf); + potfile_read_close (potfile_ctx); - fclose (pot_fp); + myfree (line_buf); SUPPRESS_OUTPUT = 0; @@ -7926,9 +7899,9 @@ int main (int argc, char **argv) !((hashconfig->hash_mode >= 13700) && (hashconfig->hash_mode <= 13799)) && (hashconfig->hash_mode != 9000)) { - FILE *fp = fopen (potfile, "rb"); + potfile_read_open (potfile_ctx); - if (fp != NULL) + if (potfile_ctx->fp != NULL) { char *line_buf = (char *) mymalloc (HCBUFSIZ_LARGE); @@ -7938,9 +7911,9 @@ int main (int argc, char **argv) char *line_buf_cpy = (char *) mymalloc (HCBUFSIZ_LARGE); - while (!feof (fp)) + while (!feof (potfile_ctx->fp)) { - char *ptr = fgets (line_buf, HCBUFSIZ_LARGE - 1, fp); + char *ptr = fgets (line_buf, HCBUFSIZ_LARGE - 1, potfile_ctx->fp); if (ptr == NULL) break; @@ -8074,7 +8047,7 @@ int main (int argc, char **argv) myfree (line_buf); - fclose (fp); + potfile_read_close (potfile_ctx); } } @@ -12471,7 +12444,7 @@ int main (int argc, char **argv) data.quiet = 1; - const u64 words1_cnt = count_words (wl_data, fp1, dictfile1, &dictstat_ctx); + const u64 words1_cnt = count_words (wl_data, fp1, dictfile1, dictstat_ctx); data.quiet = quiet; @@ -12489,7 +12462,7 @@ int main (int argc, char **argv) data.quiet = 1; - const u64 words2_cnt = count_words (wl_data, fp2, dictfile2, &dictstat_ctx); + const u64 words2_cnt = count_words (wl_data, fp2, dictfile2, dictstat_ctx); data.quiet = quiet; @@ -13155,6 +13128,8 @@ int main (int argc, char **argv) data.outfile_check_timer = outfile_check_timer; + potfile_write_open (potfile_ctx); + /** * main loop */ @@ -13585,7 +13560,7 @@ int main (int argc, char **argv) return -1; } - data.words_cnt = count_words (wl_data, fd2, dictfile, &dictstat_ctx); + data.words_cnt = count_words (wl_data, fd2, dictfile, dictstat_ctx); fclose (fd2); @@ -13616,7 +13591,7 @@ int main (int argc, char **argv) return -1; } - data.words_cnt = count_words (wl_data, fd2, dictfile, &dictstat_ctx); + data.words_cnt = count_words (wl_data, fd2, dictfile, dictstat_ctx); fclose (fd2); } @@ -13631,7 +13606,7 @@ int main (int argc, char **argv) return -1; } - data.words_cnt = count_words (wl_data, fd2, dictfile2, &dictstat_ctx); + data.words_cnt = count_words (wl_data, fd2, dictfile2, dictstat_ctx); fclose (fd2); } @@ -13672,7 +13647,7 @@ int main (int argc, char **argv) return -1; } - data.words_cnt = count_words (wl_data, fd2, dictfile, &dictstat_ctx); + data.words_cnt = count_words (wl_data, fd2, dictfile, dictstat_ctx); fclose (fd2); @@ -14017,7 +13992,7 @@ int main (int argc, char **argv) if (keyspace == 0) { - dictstat_write (&dictstat_ctx); + dictstat_write (dictstat_ctx); } /** @@ -14594,8 +14569,6 @@ int main (int argc, char **argv) // free memory - dictstat_destroy (&dictstat_ctx); - local_free (masks); for (uint pot_pos = 0; pot_pos < pot_cnt; pot_pos++) @@ -14614,6 +14587,12 @@ int main (int argc, char **argv) local_free (pot); + potfile_write_close (potfile_ctx); + + potfile_destroy (potfile_ctx); + + dictstat_destroy (dictstat_ctx); + local_free (all_kernel_rules_cnt); local_free (all_kernel_rules_buf); @@ -14655,8 +14634,6 @@ int main (int argc, char **argv) global_free (words_progress_rejected); global_free (words_progress_restored); - if (pot_fp) fclose (pot_fp); - if (data.devices_status == STATUS_QUIT) break; } diff --git a/src/hlfmt.c b/src/hlfmt.c index 9375b4648..135eaeb26 100644 --- a/src/hlfmt.c +++ b/src/hlfmt.c @@ -28,6 +28,7 @@ #include "hwmon.h" #include "mpsp.h" #include "restore.h" +#include "potfile.h" #include "data.h" #include "hlfmt.h" diff --git a/src/hwmon.c b/src/hwmon.c index 7577fd39b..6dd0f9377 100644 --- a/src/hwmon.c +++ b/src/hwmon.c @@ -23,6 +23,7 @@ #include "restore.h" #include "opencl.h" #include "thread.h" +#include "potfile.h" #include "data.h" hc_thread_mutex_t mux_hwmon; diff --git a/src/logfile.c b/src/logfile.c index 5e1349031..f77cae7ed 100644 --- a/src/logfile.c +++ b/src/logfile.c @@ -26,6 +26,7 @@ #include "mpsp.h" #include "opencl.h" #include "restore.h" +#include "potfile.h" #include "data.h" #include "logfile.h" diff --git a/src/mpsp.c b/src/mpsp.c index 83416a051..89e4a80fb 100644 --- a/src/mpsp.c +++ b/src/mpsp.c @@ -29,6 +29,7 @@ #include "rp_cpu.h" #include "opencl.h" #include "restore.h" +#include "potfile.h" #include "data.h" //#include "shared.h" diff --git a/src/opencl.c b/src/opencl.c index 8a19104b3..38f07135a 100644 --- a/src/opencl.c +++ b/src/opencl.c @@ -24,6 +24,7 @@ #include "interface.h" #include "mpsp.h" #include "restore.h" +#include "potfile.h" #include "data.h" extern hc_global_data_t data; diff --git a/src/potfile.c b/src/potfile.c new file mode 100644 index 000000000..2b0070639 --- /dev/null +++ b/src/potfile.c @@ -0,0 +1,72 @@ +/** + * Authors.....: Jens Steube + * License.....: MIT + */ + +#include "common.h" +#include "types_int.h" +#include "types.h" +#include "memory.h" +#include "logging.h" +#include "potfile.h" + + + +void potfile_init (potfile_ctx_t *potfile_ctx, const char *profile_dir, const char *potfile_path) +{ + potfile_ctx->fp = NULL; + + potfile_ctx->filename = (char *) mymalloc (HCBUFSIZ_TINY); + + if (potfile_path == NULL) + { + snprintf (potfile_ctx->filename, HCBUFSIZ_TINY - 1, "%s/hashcat.potfile", profile_dir); + } + else + { + strncpy (potfile_ctx->filename, potfile_path, HCBUFSIZ_TINY - 1); + } +} + +int potfile_read_open (potfile_ctx_t *potfile_ctx) +{ + potfile_ctx->fp = fopen (potfile_ctx->filename, "rb"); + + if (potfile_ctx->fp == NULL) + { + //log_error ("ERROR: %s: %s", potfile_ctx->filename, strerror (errno)); + + return -1; + } + + return 0; +} + +void potfile_read_close (potfile_ctx_t *potfile_ctx) +{ + fclose (potfile_ctx->fp); +} + +int potfile_write_open (potfile_ctx_t *potfile_ctx) +{ + potfile_ctx->fp = fopen (potfile_ctx->filename, "ab"); + + if (potfile_ctx->fp == NULL) + { + log_error ("ERROR: %s: %s", potfile_ctx->filename, strerror (errno)); + + return -1; + } + + return 0; +} + +void potfile_write_close (potfile_ctx_t *potfile_ctx) +{ + fclose (potfile_ctx->fp); +} + +void potfile_destroy (potfile_ctx_t *potfile_ctx) +{ + myfree (potfile_ctx->filename); +} diff --git a/src/restore.c b/src/restore.c index 49006c316..ae76d56b0 100644 --- a/src/restore.c +++ b/src/restore.c @@ -21,6 +21,7 @@ #include "mpsp.h" #include "opencl.h" #include "restore.h" +#include "potfile.h" #include "data.h" extern hc_global_data_t data; diff --git a/src/rp_cpu.c b/src/rp_cpu.c index 0f5b2e4df..ce60db1d4 100644 --- a/src/rp_cpu.c +++ b/src/rp_cpu.c @@ -28,6 +28,7 @@ #include "rp_cpu.h" #include "opencl.h" #include "restore.h" +#include "potfile.h" #include "data.h" #include "shared.h" #include "rp_cpu.h" diff --git a/src/status.c b/src/status.c index fa5abcf52..7c324ee69 100644 --- a/src/status.c +++ b/src/status.c @@ -23,6 +23,7 @@ #include "opencl.h" #include "restore.h" #include "interface.h" +#include "potfile.h" #include "data.h" //#include "shared.h" #include "status.h" diff --git a/src/stdout.c b/src/stdout.c index c6f5717fb..318267521 100644 --- a/src/stdout.c +++ b/src/stdout.c @@ -27,6 +27,7 @@ #include "interface.h" #include "mpsp.h" #include "restore.h" +#include "potfile.h" #include "data.h" #include "stdout.h" diff --git a/src/wordlist.c b/src/wordlist.c index 6f1120194..b3554b760 100644 --- a/src/wordlist.c +++ b/src/wordlist.c @@ -26,6 +26,7 @@ #include "hwmon.h" #include "mpsp.h" #include "restore.h" +#include "potfile.h" #include "data.h" #include "wordlist.h"