diff --git a/docs/changes.txt b/docs/changes.txt index a8ca396bb..86ed69454 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -39,6 +39,7 @@ - Added support to use 'John the Ripper' hash format with hash-type 18200 - Added the hash extraction scripts from the tools folder also to beta/release versions - Added user advice if a hash throws 'token length exception' +- Added tunings/ folder in order to replace hashcat.hctune. Configuration files with *.hctune suffix are automatically load on startup ## ## Bugs diff --git a/include/tuningdb.h b/include/tuningdb.h index 1f306a3f4..6ca4355f3 100644 --- a/include/tuningdb.h +++ b/include/tuningdb.h @@ -9,7 +9,7 @@ #include #include -#define TUNING_DB_FILE "hashcat.hctune" +#define TUNING_DB_SUFFIX "hctune" int sort_by_tuning_db_alias (const void *v1, const void *v2); int sort_by_tuning_db_entry (const void *v1, const void *v2); diff --git a/src/Makefile b/src/Makefile index 6d8d74af4..1ea852c2c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -505,9 +505,9 @@ endif .PHONY: install ifeq ($(SHARED),1) -install: install_docs install_shared install_library install_library_dev install_kernels install_modules install_hashcat +install: install_docs install_shared install_library install_library_dev install_tunings install_kernels install_modules install_hashcat else -install: install_docs install_shared install_kernels install_modules install_hashcat +install: install_docs install_shared install_tunings install_kernels install_modules install_hashcat endif # we need this extra target to make sure that for parallel builds (i.e. 2+ Makefile targets could possible run at the same time) @@ -560,9 +560,14 @@ install_docs: install_make_shared_root .PHONY: install_shared install_shared: install_make_shared_root $(INSTALL) -m 755 -d $(DESTDIR)$(SHARED_FOLDER) - $(INSTALL) -m 644 hashcat.hctune $(DESTDIR)$(SHARED_FOLDER)/ $(INSTALL) -m 644 hashcat.hcstat2 $(DESTDIR)$(SHARED_FOLDER)/ +.PHONY: install_tunings +install_tunings: install_shared + $(INSTALL) -m 755 -d $(DESTDIR)$(SHARED_FOLDER)/tunings + $(FIND) tunings/ -mindepth 1 -type d -execdir $(INSTALL) -m 755 -d $(DESTDIR)$(SHARED_FOLDER)/tunings/{} \; + $(FIND) tunings/ -mindepth 1 -type f -execdir $(INSTALL) -m 644 {} $(DESTDIR)$(SHARED_FOLDER)/tunings/{} \; + .PHONY: install_kernels install_kernels: install_shared $(INSTALL) -m 755 -d $(DESTDIR)$(SHARED_FOLDER)/OpenCL diff --git a/src/modules/module_08900.c b/src/modules/module_08900.c index 2584292f8..9f41b3f06 100644 --- a/src/modules/module_08900.c +++ b/src/modules/module_08900.c @@ -391,49 +391,6 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE return line_len; } -/* - -Find the right -n value for your GPU: -===================================== - -1. For example, to find the value for 8900, first create a valid hash for 8900 as follows: - -$ ./hashcat --example-hashes -m 8900 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.8900 - -2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. - -$ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.8900 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 8900 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x - -3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. - -$ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail - -4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n - -*/ - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const char *extra_tuningdb_block = - "DEVICE_TYPE_CPU * 8900 1 N A\n" - "DEVICE_TYPE_GPU * 8900 1 N A\n" - "GeForce_GTX_980 * 8900 1 29 A\n" - "GeForce_GTX_1080 * 8900 1 15 A\n" - "GeForce_RTX_2080_Ti * 8900 1 68 A\n" - "GeForce_RTX_3060_Ti * 8900 1 51 A\n" - "GeForce_RTX_3070 * 8900 1 46 A\n" - "GeForce_RTX_3090 * 8900 1 82 A\n" - "GeForce_RTX_3090_Ti * 8900 1 84 A\n" - "NVS_510 * 8900 1 12 A\n" - "ALIAS_AMD_RX480 * 8900 1 15 A\n" - "ALIAS_AMD_Vega64 * 8900 1 30 A\n" - "ALIAS_AMD_MI100 * 8900 1 79 A\n" - "ALIAS_AMD_RX6900XT * 8900 1 123 A\n" - ; - - return extra_tuningdb_block; -} - void module_init (module_ctx_t *module_ctx) { module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; @@ -457,7 +414,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_09300.c b/src/modules/module_09300.c index fd0e6e76b..4daaf30f1 100644 --- a/src/modules/module_09300.c +++ b/src/modules/module_09300.c @@ -348,47 +348,6 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE return line_len; } -/* - -Find the right -n value for your GPU: -===================================== - -1. For example, to find the value for 9300, first create a valid hash for 9300 as follows: - -$ ./hashcat --example-hashes -m 9300 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.9300 - -2. Now let it iterate through all -n values to a certain point. In this case, I'm using 1032, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. - -$ export i=8; while [ $i -ne 1032 ]; do echo $i; ./hashcat --quiet tmp.hash.9300 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 9300 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+8)); done | tee x - -3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. - -$ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail - -4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n - -*/ - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const char *extra_tuningdb_block = - "DEVICE_TYPE_CPU * 9300 1 N A\n" - "DEVICE_TYPE_GPU * 9300 1 N A\n" - "GeForce_GTX_980 * 9300 1 128 A\n" - "GeForce_GTX_1080 * 9300 1 256 A\n" - "GeForce_RTX_2080_Ti * 9300 1 528 A\n" - "GeForce_RTX_3060_Ti * 9300 1 256 A\n" - "GeForce_RTX_3070 * 9300 1 368 A\n" - "GeForce_RTX_3090 * 9300 1 984 A\n" - "ALIAS_AMD_RX480 * 9300 1 232 A\n" - "ALIAS_AMD_Vega64 * 9300 1 440 A\n" - "ALIAS_AMD_MI100 * 9300 1 1000 A\n" - "ALIAS_AMD_RX6900XT * 9300 1 720 A\n" - ; - - return extra_tuningdb_block; -} - void module_init (module_ctx_t *module_ctx) { module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; @@ -412,7 +371,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_15700.c b/src/modules/module_15700.c index 8471330aa..d30bb6716 100644 --- a/src/modules/module_15700.c +++ b/src/modules/module_15700.c @@ -454,48 +454,6 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE return line_len; } -/* - -Find the right -n value for your GPU: -===================================== - -1. For example, to find the value for 15700, first create a valid hash for 15700 as follows: - -$ ./hashcat --example-hashes -m 15700 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.15700 - -2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. - -$ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.15700 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 15700 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x - -3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. - -$ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail - -4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n - -*/ - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const char *extra_tuningdb_block = - "DEVICE_TYPE_CPU * 15700 1 N A\n" - "DEVICE_TYPE_GPU * 15700 1 1 A\n" - "GeForce_GTX_980 * 15700 1 24 A\n" - "GeForce_GTX_1080 * 15700 1 28 A\n" - "GeForce_RTX_2080_Ti * 15700 1 68 A\n" - "GeForce_RTX_3060_Ti * 15700 1 11 A\n" - "GeForce_RTX_3070 * 15700 1 22 A\n" - "GeForce_RTX_3090 * 15700 1 82 A\n" - "GeForce_RTX_3090_Ti * 22700 1 84 A\n" - "ALIAS_AMD_RX480 * 15700 1 58 A\n" - "ALIAS_AMD_Vega64 * 15700 1 53 A\n" - "ALIAS_AMD_MI100 * 15700 1 120 A\n" - "ALIAS_AMD_RX6900XT * 15700 1 56 A\n" - ; - - return extra_tuningdb_block; -} - void module_init (module_ctx_t *module_ctx) { module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; @@ -519,7 +477,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = module_esalt_size; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_22700.c b/src/modules/module_22700.c index 9cba3f2aa..3deb397c4 100644 --- a/src/modules/module_22700.c +++ b/src/modules/module_22700.c @@ -393,49 +393,6 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE return line_len; } -/* - -Find the right -n value for your GPU: -===================================== - -1. For example, to find the value for 22700, first create a valid hash for 22700 as follows: - -$ ./hashcat --example-hashes -m 22700 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.22700 - -2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. - -$ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.22700 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 22700 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x - -3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. - -$ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail - -4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n - -*/ - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const char *extra_tuningdb_block = - "DEVICE_TYPE_CPU * 22700 1 N A\n" - "DEVICE_TYPE_GPU * 22700 1 N A\n" - "GeForce_GTX_980 * 22700 1 29 A\n" - "GeForce_GTX_1080 * 22700 1 15 A\n" - "GeForce_RTX_2080_Ti * 22700 1 68 A\n" - "GeForce_RTX_3060_Ti * 22700 1 51 A\n" - "GeForce_RTX_3070 * 22700 1 46 A\n" - "GeForce_RTX_3090 * 22700 1 82 A\n" - "GeForce_RTX_3090_Ti * 22700 1 84 A\n" - "NVS_510 * 22700 1 12 A\n" - "ALIAS_AMD_RX480 * 22700 1 15 A\n" - "ALIAS_AMD_Vega64 * 22700 1 30 A\n" - "ALIAS_AMD_MI100 * 22700 1 79 A\n" - "ALIAS_AMD_RX6900XT * 22700 1 123 A\n" - ; - - return extra_tuningdb_block; -} - void module_init (module_ctx_t *module_ctx) { module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; @@ -459,7 +416,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_27700.c b/src/modules/module_27700.c index 2d398227b..4c5dfbc15 100644 --- a/src/modules/module_27700.c +++ b/src/modules/module_27700.c @@ -415,49 +415,6 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE return line_len; } -/* - -Find the right -n value for your GPU: -===================================== - -1. For example, to find the value for 27700, first create a valid hash for 27700 as follows: - -$ ./hashcat --example-hashes -m 27700 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.27700 - -2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. - -$ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.27700 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 27700 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x - -3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. - -$ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail - -4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n - -*/ - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const char *extra_tuningdb_block = - "DEVICE_TYPE_CPU * 27700 1 N A\n" - "DEVICE_TYPE_GPU * 27700 1 N A\n" - "GeForce_GTX_980 * 27700 1 29 A\n" - "GeForce_GTX_1080 * 27700 1 15 A\n" - "GeForce_RTX_2080_Ti * 27700 1 68 A\n" - "GeForce_RTX_3060_Ti * 27700 1 51 A\n" - "GeForce_RTX_3070 * 27700 1 46 A\n" - "GeForce_RTX_3090 * 27700 1 82 A\n" - "GeForce_RTX_3090_Ti * 27700 1 84 A\n" - "NVS_510 * 27700 1 12 A\n" - "ALIAS_AMD_RX480 * 27700 1 15 A\n" - "ALIAS_AMD_Vega64 * 27700 1 30 A\n" - "ALIAS_AMD_MI100 * 27700 1 79 A\n" - "ALIAS_AMD_RX6900XT * 27700 1 123 A\n" - ; - - return extra_tuningdb_block; -} - void module_init (module_ctx_t *module_ctx) { module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; @@ -481,7 +438,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_28200.c b/src/modules/module_28200.c index 6171e5a45..29f224be6 100644 --- a/src/modules/module_28200.c +++ b/src/modules/module_28200.c @@ -478,49 +478,6 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE return line_len; } -/* - -Find the right -n value for your GPU: -===================================== - -1. For example, to find the value for 28200, first create a valid hash for 28200 as follows: - -$ ./hashcat --example-hashes -m 28200 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.28200 - -2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. - -$ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.28200 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 28200 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x - -3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. - -$ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail - -4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n - -*/ - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const char *extra_tuningdb_block = - "DEVICE_TYPE_CPU * 28200 1 N A\n" - "DEVICE_TYPE_GPU * 28200 1 N A\n" - "GeForce_GTX_980 * 28200 1 29 A\n" - "GeForce_GTX_1080 * 28200 1 15 A\n" - "GeForce_RTX_2080_Ti * 28200 1 68 A\n" - "GeForce_RTX_3060_Ti * 28200 1 51 A\n" - "GeForce_RTX_3070 * 28200 1 46 A\n" - "GeForce_RTX_3090 * 28200 1 82 A\n" - "GeForce_RTX_3090_Ti * 28200 1 84 A\n" - "NVS_510 * 28200 1 12 A\n" - "ALIAS_AMD_RX480 * 28200 1 15 A\n" - "ALIAS_AMD_Vega64 * 28200 1 30 A\n" - "ALIAS_AMD_MI100 * 28200 1 79 A\n" - "ALIAS_AMD_RX6900XT * 28200 1 123 A\n" - ; - - return extra_tuningdb_block; -} - void module_init (module_ctx_t *module_ctx) { module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; @@ -544,7 +501,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = module_esalt_size; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/tuningdb.c b/src/tuningdb.c index a6b64647e..4a92db0a4 100644 --- a/src/tuningdb.c +++ b/src/tuningdb.c @@ -8,6 +8,7 @@ #include "event.h" #include "memory.h" #include "filehandling.h" +#include "folder.h" #include "shared.h" #include "tuningdb.h" @@ -64,45 +65,62 @@ int tuning_db_init (hashcat_ctx_t *hashcat_ctx) tuning_db->enabled = true; - char *tuning_db_file = NULL; + char *tuning_db_folder = NULL; - hc_asprintf (&tuning_db_file, "%s/%s", folder_config->shared_dir, TUNING_DB_FILE); + hc_asprintf (&tuning_db_folder, "%s/tunings", folder_config->shared_dir); - HCFILE fp; + char **tuning_db_files = scan_directory (tuning_db_folder); - if (hc_fopen (&fp, tuning_db_file, "rb") == false) + for (int i = 0; tuning_db_files[i] != NULL; i++) { - event_log_error (hashcat_ctx, "%s: %s", tuning_db_file, strerror (errno)); + char *tuning_db_file = tuning_db_files[i]; - return -1; - } + const size_t suflen = strlen (TUNING_DB_SUFFIX); - hcfree (tuning_db_file); + const size_t dblen = strlen (tuning_db_file); - int line_num = 0; + if (dblen < suflen) continue; // make sure to not do any out-of-boundary reads - char *buf = (char *) hcmalloc (HCBUFSIZ_LARGE); + if (memcmp (tuning_db_file + dblen - suflen, TUNING_DB_SUFFIX, suflen) != 0) continue; - while (!hc_feof (&fp)) - { - char *line_buf = hc_fgets (buf, HCBUFSIZ_LARGE - 1, &fp); + HCFILE fp; - if (line_buf == NULL) break; + if (hc_fopen (&fp, tuning_db_file, "rb") == false) + { + event_log_error (hashcat_ctx, "%s: %s", tuning_db_file, strerror (errno)); - line_num++; + return -1; + } - const size_t line_len = in_superchop (line_buf); + hcfree (tuning_db_file); - if (line_len == 0) continue; + int line_num = 0; - if (line_buf[0] == '#') continue; + char *buf = (char *) hcmalloc (HCBUFSIZ_LARGE); - tuning_db_process_line (hashcat_ctx, line_buf, line_num); - } + while (!hc_feof (&fp)) + { + char *line_buf = hc_fgets (buf, HCBUFSIZ_LARGE - 1, &fp); - hcfree (buf); + if (line_buf == NULL) break; + + line_num++; + + const size_t line_len = in_superchop (line_buf); + + if (line_len == 0) continue; + + if (line_buf[0] == '#') continue; + + tuning_db_process_line (hashcat_ctx, line_buf, line_num); + } + + hcfree (buf); + + hc_fclose (&fp); + } - hc_fclose (&fp); + hcfree (tuning_db_files); // todo: print loaded 'cnt' message diff --git a/tools/package_bin.sh b/tools/package_bin.sh index c79ce421f..143c9010a 100755 --- a/tools/package_bin.sh +++ b/tools/package_bin.sh @@ -17,7 +17,6 @@ mkdir -p $OUT/tools cp $IN/hashcat.exe $OUT/ cp $IN/hashcat.bin $OUT/ -cp $IN/hashcat.hctune $OUT/ cp $IN/hashcat.hcstat2 $OUT/ cp -r $IN/docs $OUT/ @@ -27,11 +26,13 @@ cp -r $IN/masks $OUT/ cp -r $IN/modules $OUT/ cp -r $IN/rules $OUT/ cp -r $IN/extra $OUT/ +cp -r $IN/tunings $OUT/ cp $IN/example.dict $OUT/ cp $IN/example[0123456789]*.hash $OUT/ cp $IN/example[0123456789]*.cmd $OUT/ cp -r $IN/OpenCL $OUT/ -cp $IN/tools/*hashcat.p[ly] $OUT/tools/ +cp $IN/tools/*hashcat.pl $OUT/tools/ +cp $IN/tools/*hashcat.py $OUT/tools/ # since for the binary distribution we still use .bin, we need to rewrite the commands # within the example*.sh files @@ -50,6 +51,7 @@ dos2unix $OUT/docs/* dos2unix $OUT/docs/license_libs/* dos2unix $OUT/example* dos2unix $OUT/tools/* +dos2unix $OUT/tunings/* unix2dos $OUT/layouts/*.hckmap unix2dos $OUT/masks/*.hcmask @@ -59,8 +61,8 @@ unix2dos $OUT/docs/* unix2dos $OUT/docs/license_libs/* unix2dos $OUT/example*.cmd unix2dos $OUT/OpenCL/* -unix2dos $OUT/hashcat.hctune unix2dos $OUT/tools/* +unix2dos $OUT/tunings/* chmod 755 $OUT chmod 755 $OUT/rules @@ -83,10 +85,12 @@ chmod 755 $OUT/extra/tab_completion/*.sh chmod 755 $OUT/extra/tab_completion/install chmod 755 $OUT/OpenCL chmod 644 $OUT/OpenCL/* +chmod 755 $OUT/tunings +chmod 644 $OUT/tunings/* chmod 644 $OUT/*.exe chmod 755 $OUT/*.bin -chmod 644 $OUT/hashcat.hctune chmod 644 $OUT/hashcat.hcstat2 -chmod 755 $OUT/tools/*hashcat.p[ly] +chmod 755 $OUT/tools/*hashcat.pl +chmod 755 $OUT/tools/*hashcat.py time 7z a -t7z -m0=lzma2:d31 -mx=9 -mmt=8 -ms=on $OUT.7z $OUT diff --git a/hashcat.hctune b/tunings/Alias.hctune similarity index 61% rename from hashcat.hctune rename to tunings/Alias.hctune index 47197cf09..383b1a416 100644 --- a/hashcat.hctune +++ b/tunings/Alias.hctune @@ -1,53 +1,4 @@ -# This file is used to override autotune settings -# This file is used to preset the Vector-Width, the Kernel-Accept and the Kernel-Loops Value per Device, Attack-Mode and Hash-Type -# -# - A valid line consists of the following fields (in that order): -# - Device-Name -# - Attack-Mode -# - Hash-Type -# - Vector-Width -# - Kernel-Accel -# - Kernel-Loops -# - The first three columns define the filter, the other three is what is assigned when that filter matches -# - If no filter matches, autotune is used -# - Columns are separated with one or many spaces or tabs -# - A line can not start with a space or a tab -# - Comment lines are allowed, use a # as first character -# - Invalid lines are ignored -# - The Device-Name is the OpenCL Device-Name. It's shown on hashcat startup. -# - If the device contains spaces, replace all spaces with _ character. -# - The Device-Name can be assigned an alias. This is useful if many devices share the same chip -# - If you assign an alias, make sure to not use the devices name directly -# - There's also a hard-wired Device-Name which matches all device types called: -# - DEVICE_TYPE_CPU -# - DEVICE_TYPE_GPU -# - DEVICE_TYPE_ACCELERATOR -# - The use of wildcards is allowed, some rules: -# - Wildcards can only replace an entire Device-Name, not parts just of it. eg: not Geforce_* -# - The policy is local > global, means the closer you configure something, the more likely it is selected -# - The policy testing order is from left to right -# - Attack modes can be: -# - 0 = Dictionary-Attack -# - 1 = Combinator-Attack, will also be used for attack-mode 6 and 7 since they share the same kernel -# - 3 = Mask-Attack -# - The Kernel-Accel is a multiplier to OpenCL's concept of a workitem, not the workitem count -# - The Kernel-Loops has a functionality depending on the hash-type: -# - Slow Hash: Number of iterations calculated per workitem -# - Fast Hash: Number of mutations calculated per workitem -# - None of both should be confused with the OpenCL concept of a "thread", this one is maintained automatically -# - The Vector-Width can have only the values 1, 2, 4, 8 or 'N', where 'N' stands for native, which is an OpenCl-queried data value -# - The Kernel-Accel is limited to 1024 -# - The Kernel-Loops is limited to 1024 -# - The Kernel-Accel can have 'A', where 'A' stands for autotune -# - The Kernel-Accel can have 'M', where 'M' stands for maximum possible -# - The Kernel-Loops can have 'A', where 'A' stands for autotune -# - The Kernel-Loops can have 'M', where 'M' stands for maximum possible - -############# -## ALIASES ## -############# - #Device Alias #Name Name @@ -305,114 +256,3 @@ gfx908:sramecc+:xnack- ALIAS_AMD_MI100 Device_73bf ALIAS_AMD_RX6900XT gfx1030 ALIAS_AMD_RX6900XT Radeon_RX_6900_XT ALIAS_AMD_RX6900XT - -############# -## ENTRIES ## -############# - -DEVICE_TYPE_CPU * 6100 1 A A -DEVICE_TYPE_CPU * 6231 1 A A -DEVICE_TYPE_CPU * 6232 1 A A -DEVICE_TYPE_CPU * 6233 1 A A -DEVICE_TYPE_CPU * 13731 1 A A -DEVICE_TYPE_CPU * 13732 1 A A -DEVICE_TYPE_CPU * 13733 1 A A - -#Device Attack Hash Vector Kernel Kernel -#Name Mode Type Width Accel Loops - -ALIAS_nv_real_simd 3 0 2 A A -ALIAS_nv_real_simd 3 10 2 A A -ALIAS_nv_real_simd 3 11 2 A A -ALIAS_nv_real_simd 3 12 2 A A -ALIAS_nv_real_simd 3 20 2 A A -ALIAS_nv_real_simd 3 21 2 A A -ALIAS_nv_real_simd 3 22 2 A A -ALIAS_nv_real_simd 3 23 2 A A -ALIAS_nv_real_simd 3 200 2 A A -ALIAS_nv_real_simd 3 400 2 A A -ALIAS_nv_real_simd 3 900 4 A A -ALIAS_nv_real_simd 3 1000 4 A A -ALIAS_nv_real_simd 3 1100 4 A A -ALIAS_nv_real_simd 3 2400 2 A A -ALIAS_nv_real_simd 3 2410 2 A A -ALIAS_nv_real_simd 3 2600 4 A A -ALIAS_nv_real_simd 3 2611 4 A A -ALIAS_nv_real_simd 3 2612 4 A A -ALIAS_nv_real_simd 3 2711 4 A A -ALIAS_nv_real_simd 3 2811 4 A A -ALIAS_nv_real_simd 3 3711 2 A A -ALIAS_nv_real_simd 3 5100 2 A A -ALIAS_nv_real_simd 3 5300 2 A A -ALIAS_nv_real_simd 3 5500 4 A A -ALIAS_nv_real_simd 3 5600 2 A A -ALIAS_nv_real_simd 3 8700 4 A A -ALIAS_nv_real_simd 3 9900 2 A A -ALIAS_nv_real_simd 3 11000 4 A A -ALIAS_nv_real_simd 3 11100 2 A A -ALIAS_nv_real_simd 3 11900 2 A A -ALIAS_nv_real_simd 3 13300 4 A A -ALIAS_nv_real_simd 3 18700 8 A A - -ALIAS_nv_sm50_or_higher 3 0 8 A A -ALIAS_nv_sm50_or_higher 3 10 8 A A -ALIAS_nv_sm50_or_higher 3 11 8 A A -ALIAS_nv_sm50_or_higher 3 12 8 A A -ALIAS_nv_sm50_or_higher 3 20 4 A A -ALIAS_nv_sm50_or_higher 3 21 4 A A -ALIAS_nv_sm50_or_higher 3 22 4 A A -ALIAS_nv_sm50_or_higher 3 23 4 A A -ALIAS_nv_sm50_or_higher 3 30 4 A A -ALIAS_nv_sm50_or_higher 3 40 4 A A -ALIAS_nv_sm50_or_higher 3 200 8 A A -ALIAS_nv_sm50_or_higher 3 900 8 A A -ALIAS_nv_sm50_or_higher 3 1000 8 A A -ALIAS_nv_sm50_or_higher 3 1100 4 A A -ALIAS_nv_sm50_or_higher 3 2400 8 A A -ALIAS_nv_sm50_or_higher 3 2410 4 A A -ALIAS_nv_sm50_or_higher 3 3800 4 A A -ALIAS_nv_sm50_or_higher 3 4800 8 A A -ALIAS_nv_sm50_or_higher 3 5500 2 A A -ALIAS_nv_sm50_or_higher 3 9900 4 A A -ALIAS_nv_sm50_or_higher 3 16400 8 A A -ALIAS_nv_sm50_or_higher 3 18700 8 A A - -## -## The following cards were manually tuned, as example -## - -GeForce_GTX_TITAN 3 0 4 A A -GeForce_GTX_TITAN 3 11 4 A A -GeForce_GTX_TITAN 3 12 4 A A -GeForce_GTX_TITAN 3 21 1 A A -GeForce_GTX_TITAN 3 22 1 A A -GeForce_GTX_TITAN 3 23 1 A A -GeForce_GTX_TITAN 3 30 4 A A -GeForce_GTX_TITAN 3 200 2 A A -GeForce_GTX_TITAN 3 900 4 A A -GeForce_GTX_TITAN 3 1000 4 A A -GeForce_GTX_TITAN 3 1100 4 A A -GeForce_GTX_TITAN 3 2400 4 A A -GeForce_GTX_TITAN 3 2410 2 A A -GeForce_GTX_TITAN 3 5500 1 A A -GeForce_GTX_TITAN 3 9900 2 A A - -## -## BCRYPT -## - -DEVICE_TYPE_CPU * 3200 1 N A -DEVICE_TYPE_CPU * 25600 1 N A -DEVICE_TYPE_CPU * 25800 1 N A - -## -## SCRYPT: Tunings for SCRYPT based hash-modes can be found inside the plugin source -## See function module_extra_tuningdb_block() -## - -## -## CryptoAPI -## - -DEVICE_TYPE_CPU * 14500 1 A A -DEVICE_TYPE_GPU * 14500 1 A A diff --git a/tunings/Device_GeForce_GTX_TITAN.hctune b/tunings/Device_GeForce_GTX_TITAN.hctune new file mode 100644 index 000000000..e5cf9d9c4 --- /dev/null +++ b/tunings/Device_GeForce_GTX_TITAN.hctune @@ -0,0 +1,22 @@ +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +## +## The following cards were manually tuned, as example +## + +GeForce_GTX_TITAN 3 0 4 A A +GeForce_GTX_TITAN 3 11 4 A A +GeForce_GTX_TITAN 3 12 4 A A +GeForce_GTX_TITAN 3 21 1 A A +GeForce_GTX_TITAN 3 22 1 A A +GeForce_GTX_TITAN 3 23 1 A A +GeForce_GTX_TITAN 3 30 4 A A +GeForce_GTX_TITAN 3 200 2 A A +GeForce_GTX_TITAN 3 900 4 A A +GeForce_GTX_TITAN 3 1000 4 A A +GeForce_GTX_TITAN 3 1100 4 A A +GeForce_GTX_TITAN 3 2400 4 A A +GeForce_GTX_TITAN 3 2410 2 A A +GeForce_GTX_TITAN 3 5500 1 A A +GeForce_GTX_TITAN 3 9900 2 A A diff --git a/tunings/Module_08900.hctune b/tunings/Module_08900.hctune new file mode 100644 index 000000000..aa31adbb6 --- /dev/null +++ b/tunings/Module_08900.hctune @@ -0,0 +1,36 @@ +# +# Find the right -n value for your GPU: +# ===================================== +# +# 1. For example, to find the value for 8900, first create a valid hash for 8900 as follows: +# +# $ ./hashcat --example-hashes -m 8900 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.8900 +# +# 2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. +# +# $ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.8900 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 8900 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x +# +# 3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. +# +# $ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail +# +# 4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n + +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +DEVICE_TYPE_CPU * 8900 1 N A +DEVICE_TYPE_GPU * 8900 1 N A + +GeForce_GTX_980 * 8900 1 29 A +GeForce_GTX_1080 * 8900 1 15 A +GeForce_RTX_2080_Ti * 8900 1 68 A +GeForce_RTX_3060_Ti * 8900 1 51 A +GeForce_RTX_3070 * 8900 1 46 A +GeForce_RTX_3090 * 8900 1 82 A +GeForce_RTX_3090_Ti * 8900 1 84 A +NVS_510 * 8900 1 12 A +ALIAS_AMD_RX480 * 8900 1 15 A +ALIAS_AMD_Vega64 * 8900 1 30 A +ALIAS_AMD_MI100 * 8900 1 79 A +ALIAS_AMD_RX6900XT * 8900 1 123 A diff --git a/tunings/Module_09300.hctune b/tunings/Module_09300.hctune new file mode 100644 index 000000000..a2907079e --- /dev/null +++ b/tunings/Module_09300.hctune @@ -0,0 +1,34 @@ +# +# Find the right -n value for your GPU: +# ===================================== +# +# 1. For example, to find the value for 9300, first create a valid hash for 9300 as follows: +# +# $ ./hashcat --example-hashes -m 9300 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.9300 +# +# 2. Now let it iterate through all -n values to a certain point. In this case, I'm using 1032, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. +# +# $ export i=8; while [ $i -ne 1032 ]; do echo $i; ./hashcat --quiet tmp.hash.9300 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 9300 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+8)); done | tee x +# +# 3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. +# +# $ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail +# +# 4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n + +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +DEVICE_TYPE_CPU * 9300 1 N A +DEVICE_TYPE_GPU * 9300 1 N A + +GeForce_GTX_980 * 9300 1 128 A +GeForce_GTX_1080 * 9300 1 256 A +GeForce_RTX_2080_Ti * 9300 1 528 A +GeForce_RTX_3060_Ti * 9300 1 256 A +GeForce_RTX_3070 * 9300 1 368 A +GeForce_RTX_3090 * 9300 1 984 A +ALIAS_AMD_RX480 * 9300 1 232 A +ALIAS_AMD_Vega64 * 9300 1 440 A +ALIAS_AMD_MI100 * 9300 1 1000 A +ALIAS_AMD_RX6900XT * 9300 1 720 A diff --git a/tunings/Module_15700.hctune b/tunings/Module_15700.hctune new file mode 100644 index 000000000..61080728a --- /dev/null +++ b/tunings/Module_15700.hctune @@ -0,0 +1,35 @@ +# +# Find the right -n value for your GPU: +# ===================================== +# +# 1. For example, to find the value for 15700, first create a valid hash for 15700 as follows: +# +# $ ./hashcat --example-hashes -m 15700 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.15700 +# +# 2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. +# +# $ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.15700 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 15700 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x +# +# 3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. +# +# $ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail +# +# 4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n + +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +DEVICE_TYPE_CPU * 15700 1 N A +DEVICE_TYPE_GPU * 15700 1 1 A + +GeForce_GTX_980 * 15700 1 24 A +GeForce_GTX_1080 * 15700 1 28 A +GeForce_RTX_2080_Ti * 15700 1 68 A +GeForce_RTX_3060_Ti * 15700 1 11 A +GeForce_RTX_3070 * 15700 1 22 A +GeForce_RTX_3090 * 15700 1 82 A +GeForce_RTX_3090_Ti * 15700 1 84 A +ALIAS_AMD_RX480 * 15700 1 58 A +ALIAS_AMD_Vega64 * 15700 1 53 A +ALIAS_AMD_MI100 * 15700 1 120 A +ALIAS_AMD_RX6900XT * 15700 1 56 A diff --git a/tunings/Module_22700.hctune b/tunings/Module_22700.hctune new file mode 100644 index 000000000..916c143a6 --- /dev/null +++ b/tunings/Module_22700.hctune @@ -0,0 +1,36 @@ +# +# Find the right -n value for your GPU: +# ===================================== +# +# 1. For example, to find the value for 22700, first create a valid hash for 22700 as follows: +# +# $ ./hashcat --example-hashes -m 22700 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.22700 +# +# 2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. +# +# $ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.22700 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 22700 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x +# +# 3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. +# +# $ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail +# +# 4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n + +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +DEVICE_TYPE_CPU * 22700 1 N A +DEVICE_TYPE_GPU * 22700 1 N A + +GeForce_GTX_980 * 22700 1 29 A +GeForce_GTX_1080 * 22700 1 15 A +GeForce_RTX_2080_Ti * 22700 1 68 A +GeForce_RTX_3060_Ti * 22700 1 51 A +GeForce_RTX_3070 * 22700 1 46 A +GeForce_RTX_3090 * 22700 1 82 A +GeForce_RTX_3090_Ti * 22700 1 84 A +NVS_510 * 22700 1 12 A +ALIAS_AMD_RX480 * 22700 1 15 A +ALIAS_AMD_Vega64 * 22700 1 30 A +ALIAS_AMD_MI100 * 22700 1 79 A +ALIAS_AMD_RX6900XT * 22700 1 123 A diff --git a/tunings/Module_27700.hctune b/tunings/Module_27700.hctune new file mode 100644 index 000000000..7b664ac50 --- /dev/null +++ b/tunings/Module_27700.hctune @@ -0,0 +1,36 @@ +# +# Find the right -n value for your GPU: +# ===================================== +# +# 1. For example, to find the value for 27700, first create a valid hash for 27700 as follows: +# +# $ ./hashcat --example-hashes -m 27700 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.27700 +# +# 2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. +# +# $ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.27700 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 27700 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x +# +# 3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. +# +# $ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail +# +# 4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n + +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +DEVICE_TYPE_CPU * 27700 1 N A +DEVICE_TYPE_GPU * 27700 1 N A + +GeForce_GTX_980 * 27700 1 29 A +GeForce_GTX_1080 * 27700 1 15 A +GeForce_RTX_2080_Ti * 27700 1 68 A +GeForce_RTX_3060_Ti * 27700 1 51 A +GeForce_RTX_3070 * 27700 1 46 A +GeForce_RTX_3090 * 27700 1 82 A +GeForce_RTX_3090_Ti * 27700 1 84 A +NVS_510 * 27700 1 12 A +ALIAS_AMD_RX480 * 27700 1 15 A +ALIAS_AMD_Vega64 * 27700 1 30 A +ALIAS_AMD_MI100 * 27700 1 79 A +ALIAS_AMD_RX6900XT * 27700 1 123 A diff --git a/tunings/Module_28200.hctune b/tunings/Module_28200.hctune new file mode 100644 index 000000000..c6bfda528 --- /dev/null +++ b/tunings/Module_28200.hctune @@ -0,0 +1,36 @@ +# +# Find the right -n value for your GPU: +# ===================================== +# +# 1. For example, to find the value for 28200, first create a valid hash for 28200 as follows: +# +# $ ./hashcat --example-hashes -m 28200 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.28200 +# +# 2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. +# +# $ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.28200 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 28200 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x +# +# 3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. +# +# $ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail +# +# 4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n + +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +DEVICE_TYPE_CPU * 28200 1 N A +DEVICE_TYPE_GPU * 28200 1 N A + +GeForce_GTX_980 * 28200 1 29 A +GeForce_GTX_1080 * 28200 1 15 A +GeForce_RTX_2080_Ti * 28200 1 68 A +GeForce_RTX_3060_Ti * 28200 1 51 A +GeForce_RTX_3070 * 28200 1 46 A +GeForce_RTX_3090 * 28200 1 82 A +GeForce_RTX_3090_Ti * 28200 1 84 A +NVS_510 * 28200 1 12 A +ALIAS_AMD_RX480 * 28200 1 15 A +ALIAS_AMD_Vega64 * 28200 1 30 A +ALIAS_AMD_MI100 * 28200 1 79 A +ALIAS_AMD_RX6900XT * 28200 1 123 A diff --git a/tunings/Modules_default.hctune b/tunings/Modules_default.hctune new file mode 100644 index 000000000..2639feb46 --- /dev/null +++ b/tunings/Modules_default.hctune @@ -0,0 +1,89 @@ + +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +DEVICE_TYPE_CPU * 6100 1 A A +DEVICE_TYPE_CPU * 6231 1 A A +DEVICE_TYPE_CPU * 6232 1 A A +DEVICE_TYPE_CPU * 6233 1 A A +DEVICE_TYPE_CPU * 13731 1 A A +DEVICE_TYPE_CPU * 13732 1 A A +DEVICE_TYPE_CPU * 13733 1 A A + +#Device Attack Hash Vector Kernel Kernel +#Name Mode Type Width Accel Loops + +ALIAS_nv_real_simd 3 0 2 A A +ALIAS_nv_real_simd 3 10 2 A A +ALIAS_nv_real_simd 3 11 2 A A +ALIAS_nv_real_simd 3 12 2 A A +ALIAS_nv_real_simd 3 20 2 A A +ALIAS_nv_real_simd 3 21 2 A A +ALIAS_nv_real_simd 3 22 2 A A +ALIAS_nv_real_simd 3 23 2 A A +ALIAS_nv_real_simd 3 200 2 A A +ALIAS_nv_real_simd 3 400 2 A A +ALIAS_nv_real_simd 3 900 4 A A +ALIAS_nv_real_simd 3 1000 4 A A +ALIAS_nv_real_simd 3 1100 4 A A +ALIAS_nv_real_simd 3 2400 2 A A +ALIAS_nv_real_simd 3 2410 2 A A +ALIAS_nv_real_simd 3 2600 4 A A +ALIAS_nv_real_simd 3 2611 4 A A +ALIAS_nv_real_simd 3 2612 4 A A +ALIAS_nv_real_simd 3 2711 4 A A +ALIAS_nv_real_simd 3 2811 4 A A +ALIAS_nv_real_simd 3 3711 2 A A +ALIAS_nv_real_simd 3 5100 2 A A +ALIAS_nv_real_simd 3 5300 2 A A +ALIAS_nv_real_simd 3 5500 4 A A +ALIAS_nv_real_simd 3 5600 2 A A +ALIAS_nv_real_simd 3 8700 4 A A +ALIAS_nv_real_simd 3 9900 2 A A +ALIAS_nv_real_simd 3 11000 4 A A +ALIAS_nv_real_simd 3 11100 2 A A +ALIAS_nv_real_simd 3 11900 2 A A +ALIAS_nv_real_simd 3 13300 4 A A +ALIAS_nv_real_simd 3 18700 8 A A + +ALIAS_nv_sm50_or_higher 3 0 8 A A +ALIAS_nv_sm50_or_higher 3 10 8 A A +ALIAS_nv_sm50_or_higher 3 11 8 A A +ALIAS_nv_sm50_or_higher 3 12 8 A A +ALIAS_nv_sm50_or_higher 3 20 4 A A +ALIAS_nv_sm50_or_higher 3 21 4 A A +ALIAS_nv_sm50_or_higher 3 22 4 A A +ALIAS_nv_sm50_or_higher 3 23 4 A A +ALIAS_nv_sm50_or_higher 3 30 4 A A +ALIAS_nv_sm50_or_higher 3 40 4 A A +ALIAS_nv_sm50_or_higher 3 200 8 A A +ALIAS_nv_sm50_or_higher 3 900 8 A A +ALIAS_nv_sm50_or_higher 3 1000 8 A A +ALIAS_nv_sm50_or_higher 3 1100 4 A A +ALIAS_nv_sm50_or_higher 3 2400 8 A A +ALIAS_nv_sm50_or_higher 3 2410 4 A A +ALIAS_nv_sm50_or_higher 3 3800 4 A A +ALIAS_nv_sm50_or_higher 3 4800 8 A A +ALIAS_nv_sm50_or_higher 3 5500 2 A A +ALIAS_nv_sm50_or_higher 3 9900 4 A A +ALIAS_nv_sm50_or_higher 3 16400 8 A A +ALIAS_nv_sm50_or_higher 3 18700 8 A A + +## +## BCRYPT +## + +DEVICE_TYPE_CPU * 3200 1 N A +DEVICE_TYPE_CPU * 25600 1 N A +DEVICE_TYPE_CPU * 25800 1 N A + +## +## SCRYPT: Tunings for SCRYPT based hash-modes can be found in separate files in the tunings/ folder +## + +## +## CryptoAPI +## + +DEVICE_TYPE_CPU * 14500 1 A A +DEVICE_TYPE_GPU * 14500 1 A A diff --git a/tunings/README.md b/tunings/README.md new file mode 100644 index 000000000..e917b0b20 --- /dev/null +++ b/tunings/README.md @@ -0,0 +1,48 @@ +The files in this folder are used to override autotune settings + +You can override configuration settings for Vector-Width, Kernel-Accel and/or Kernel-Loops values +You can filter by Device-Name, Device-Name alias, Attack-Mode and/or Hash-Type + +Each file in this folder with the filename suffix .hctune will be automatically loaded by hashcat on startup with random order + +- A valid line consists of the following fields (in that order): + - Device-Name + - Attack-Mode + - Hash-Type + - Vector-Width + - Kernel-Accel + - Kernel-Loops +- The first three columns define the filter, the other three is what is assigned when that filter matches +- If no filter matches, autotune is used +- Columns are separated with one or many spaces or tabs +- A line can not start with a space or a tab +- Comment lines are allowed, use a # as first character +- Invalid lines are ignored +- The Device-Name is the OpenCL Device-Name. It's shown on hashcat startup. + - If the device contains spaces, replace all spaces with _ character. +- The Device-Name can be assigned an alias. This is useful if many devices share the same chip + - If you assign an alias, make sure to not use the devices name directly +- There's also a hard-wired Device-Name which matches all device types called: + - DEVICE_TYPE_CPU + - DEVICE_TYPE_GPU + - DEVICE_TYPE_ACCELERATOR +- The use of wildcards is allowed, some rules: + - Wildcards can only replace an entire Device-Name, not parts just of it. eg: not Geforce_* + - The policy is local > global, means the closer you configure something, the more likely it is selected + - The policy testing order is from left to right +- Attack modes can be: + - 0 = Dictionary-Attack + - 1 = Combinator-Attack, will also be used for attack-mode 6 and 7 since they share the same kernel + - 3 = Mask-Attack +- The Kernel-Accel is a multiplier to OpenCL's concept of a workitem, not the workitem count +- The Kernel-Loops has a functionality depending on the hash-type: + - Slow Hash: Number of iterations calculated per workitem + - Fast Hash: Number of mutations calculated per workitem +- None of both should be confused with the OpenCL concept of a "thread", this one is maintained automatically +- The Vector-Width can have only the values 1, 2, 4, 8 or 'N', where 'N' stands for native, which is an OpenCl-queried data value +- The Kernel-Accel is limited to 1024 +- The Kernel-Loops is limited to 1024 +- The Kernel-Accel can have 'A', where 'A' stands for autotune +- The Kernel-Accel can have 'M', where 'M' stands for maximum possible +- The Kernel-Loops can have 'A', where 'A' stands for autotune +- The Kernel-Loops can have 'M', where 'M' stands for maximum possible