1
0
mirror of https://github.com/hashcat/hashcat.git synced 2025-07-08 07:38:17 +00:00
Commit Graph

229 Commits

Author SHA1 Message Date
Jens Steube
974934dcdf Trying out a tweak to autotune behavior related to -u loop tuning.
Since loop values increase by doubling in autotune, a slow hash-mode
with, for example, 1000 iterations can end up with a suboptimal -u count.
Currently, autotuning starts at 1 and doubles (2, 4, 8, ..., 512, 1024).
If the maximum is 1000, autotune stops at 512, resulting in two kernel
calls: one with 512 iterations and another with 488.

The tweak attempts to find the smallest factor that, when repeatedly
doubled, reaches the target exactly.  For 1000, this would be 125
and for 1024, it would be 1.

However, this logic doesn’t align well with how hashcat handles slow
hash iterations. For instance, PBKDF2-based plugins typically set the
iteration count to N-1, since the first iteration is handled by the
`_init` kernel. So, a plugin might set 1023 instead of 1024, and in such
cases, the logic would incorrectly assume 1023 is the minimum factor
which leads to suboptimal tuning.

To work around this, the factor-finder is executed twice: once with
the original iteration count and once with `iteration count + 1`.
The configuration that results in a lower starting point is used.

Other stuff:

- Fixed a critical bug in the autotuner

This bug was introduced a few days ago. The autotuner has the ability
to overtune the maximum allowed thread count under certain conditions.
For example, in unoptimized -a 0 cracking mode when using rules.
Several parts of the hashcat core require strict adherence to this limit,
especially when shared memory is involved.
To resolve this while retaining overtuning for compatible modes,
a new attribute `device_param->overtune_unfriendly` was introduced.
When set to true, it prevents the autotuner from modifying
`kernel_threads_max` and `kernel_accel_max`.
Four sections in `backend.c` have been updated to set this flag,
though additional areas may also require it.

- Moved the code that aligns `kernel_accel` to a multiple of the compute
  unit count into the overtune section.

- Fixed a bug in the HIP dynloader. It now reports actual error strings,
  provided the API returns them.
2025-06-27 21:52:57 +02:00
Jens Steube
62a5a85dd6 Added 'next_power_of_two()' and moved both 'next_power_of_two()' and 'previous_power_of_two()' to 'shared.c'
Improved autotuner tweak logic and added boundary checks for accel and threads
Fixed available host memory detection on Windows
Fixed compilation error in MSYS2 native shell
Introduced an 8 GiB host memory usage limit per GPU, even if more is available
Replaced fixed-size host memory detection per GPU with a dynamic kernel-accel based method (similar to GPU memory detection)
Disabled hash-mode autodetection in the python bridge
Removed default invocation of 'rocm-smi' in 'benchmark_deep.pl' to avoid skewed initial results
Reduced default runtime in 'benchmark_deep.pl' scripts due to improved benchmark accuracy in hashcat in general
2025-06-25 11:21:51 +02:00
Jens Steube
69a585fa4a Autotune refactoring II: dynamic threads-per-block
- Integrated occupancy hints from vendor APIs (CUDA, HIP) to set a
  dynamic threads-per-block limit per kernel instead of using static
  values.
- Added `find_tuning_function()` to identify the relevant kernel.
- Autotuner now runs in three stages: threads -> loops -> accel. The
  first two stages now stop increasing when the tested kernel runtime
  gets too close to the target runtime (96ms for `-w 3`), leaving
  headroom for the next stage to adjust in a finer sense.
- Accel tuning now uses a capped floating-point multiplier instead of
  powers of two.
- Removed workarounds for missing thread autotuning in plugins.
- Removed the hardcoded 4GiB host memory limit for accel. Added a
  cross-platform `get_free_memory()` to check actual free RAM during GPU
  initialization, preventing underutilization of high-end GPUs like the
  4090. If needed, users can still cap memory usage with `-T` or `-n`.
- Updated enums for ROCm 6.4.x and CUDA 12.9.
- Added code to detect kernel register spilling. That's relevant so we
  can keep free enough global memory on the runtime for the runtime to
  handle spills efficiently.
2025-06-24 20:19:42 +02:00
Jens Steube
b7c8fcf27c Removed shared-memory based optimization for SCRYPT on HIP, because the shared-memory buffer is incompatible with TMTO, which is limiting SCRYPT-R to a maximum of 8. This change also simplifies the code, allowing removal of large sections of duplicated code. Removed the section in scrypt_module_extra_tuningdb_block() that increased TMTO when there was insufficient shared memory, as this is no longer applicable.
Refactored inc_hash_scrypt.cl almost completely and improved macro names in inc_hash_scrypt.h. Adapted all existing SCRYPT-based plugins to the new standard. If you have custom SCRYPT based plugins use hash-mode 8900 as reference.
Fixed some compiler warnings in inc_platform.cl.
Cleaned up code paths in inc_vendor.h for finding values for HC_ATTR_SEQ and DECLSPEC.
Removed option --device-as-default-execution-space from nvrtc for hiprtc compatibility. As a result, added __device__ back to DECLSPEC.
Removed option --restrict from nvrtc compile options since we actually alias some buffers.
Added --gpu-max-threads-per-block to hiprtc options.
Added -D MAX_THREADS_PER_BLOCK to OpenCL options (currently unused).
Removed all OPTS_TYPE_MP_MULTI_DISABLE entries for SNMPv3-based plugins.
These plugins consume large amounts of memory and for this reason,limited kernel_accel max to 256. This may still be high, but hashcat will automatically tune down kernel_accel if insufficient memory is detected.
Removed command `rocm-smi --resetprofile --resetclocks --resetfans` from benchmark_deep.pl, since some AMD GPUs become artificially slow for a while after running these commands.
Replaced load_source() with file_to_buffer() from shared.c, which does the exact same operations.
Moved suppress_stderr() and restore_stderr() to shared.c and reused them in both Python bridges and opencl_test_instruction(), where the same type of code existed.
2025-06-21 07:09:20 +02:00
Jens Steube
c033873e4b Update hipDeviceAttribute_t for ROCm 6.x
Add hipDeviceProp_t and bindings for hipGetDeviceProperties(), hipGetDeviceProperties is required to retrieve gcnArchName[].
Add gcnArchName[] to select the correct --gpu-architecture value for a specific device when using hiprtc.
Include sm_major and sm_minor for CUDA and gcnArchName for HIP in the kernel filename hash.
Update nvrtc_options[] and hiprtc_options[] to avoid unused variables, eliminating the use of --restrict as a placeholder and preventing nvrtc from aborting.
Add check_file_suffix() and remove_file_suffix() helper functions.
2025-06-18 18:29:47 +02:00
Gabriele Gristina
1096d961a1
Backend: Updated filename chksum format to prevent invalid cache on Apple Silicon when switching arch 2025-06-10 23:19:12 +02:00
Jens Steube
ac2ed9f402 - Remove old iconv patches (replaced by cmake)
- Replace Queues in hcmp/hcsp and make code more pythonic
- Synchronize python thread in hcmp count with detected cores
- Move setting PYTHON_GIL to shared.c
- Fix allocating and freeing aligned memory
- Update BUILD guides for WSL and macOS
- Fix python plugin documentation for macOS
2025-06-05 06:56:38 +02:00
jsteube
2029be782e Refactor extract_dynamic_x() to extract_dynamicx_hash() and add code 2023-11-09 15:04:32 +00:00
jsteube
2d3ebf1d4e Add global dynamic-x hash mode extraction function 2023-11-08 14:43:45 +00:00
Rosen Penev
a55d4aa3c9 fix prototypes and old declarations
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2023-08-20 21:13:12 -07:00
jsteube
6ee2658104 Prefix more macros to avoid collisions in other existing libraries 2023-01-30 14:41:12 +00:00
jsteube
17b2e9062b Prevent Hashcat from hanging by checking during startup that the output file is a named pipe 2023-01-19 15:54:26 +00:00
jsteube
f1ff925b6e Prepare rename macros in header files from _MACRO to MACRO 2023-01-17 19:25:40 +00:00
jsteube
7668ec5865 Prepare file_to_buffer() for later use 2022-08-07 20:36:08 +00:00
Gabriele Gristina
861e644057 OpenCL Backend: added workaround to make optimized kernels work on Apple Silicon 2021-12-24 17:30:49 +01:00
Jens Steube
5015bc0d2e Module Parser: Renamed struct token_t to hc_token_t to avoid naming conflict with token_t on MacOS 2021-12-20 13:19:40 +01:00
Jens Steube
254e33c473 File handling: Do not abort on seeing a BOM in input files, just warn and ignore the BOM 2021-06-29 20:42:22 +02:00
Jens Steube
ff37264c36 Use special type for hashlist sorting in brain_compute_session() 2020-05-12 08:54:26 +02:00
Jens Steube
f9e4dc0db1 Remove sort_by_string(), no longer needed 2020-05-11 12:00:26 +02:00
Jens Steube
d5cd0a0030 Fix invalid brain session id calculation and move sorting functions to shared.c 2020-05-11 11:52:36 +02:00
Jens Steube
9957422191 Add tokenizer option TOKEN_ATTR_SEPARATOR_FARTHEST as an option to deal with hash formats where separator character could be part of the salt data itself and at the same time does not allow escape character logic to be applied. This can only work if it is guaranteed by the design of the hash format that the separator character does not occur after the position of the separator character. 2020-02-19 10:35:44 +01:00
Jens Steube
d71afd6d7a Prepare new --hook-threads feature 2019-11-02 10:29:34 +01:00
Gabriele Gristina
d0ec5c7b77 move hc_* file functions from shared.c/.h to filehandling.c/.h 2019-07-13 00:20:41 +02:00
Gabriele Gristina
3161aec3da fix the comments :) 2019-07-01 17:27:08 +02:00
Gabriele Gristina
5679ca3344 Rewrite hc_fopen to better handling file descriptor locking/unlocking functions, saving kernels binary from plain to gzip format 2019-07-01 01:30:24 +02:00
Gabriele Gristina
e86cbf426a add workaround for zlib with cygwin build (v2) 2019-06-29 14:46:33 +02:00
Gabriele Gristina
481c752456 No more compress functions, update example.dict.gz, remove some comments 2019-06-27 20:18:47 +02:00
Gabriele Gristina
398c89c75c switch almost all FILE ops, potfile is the only missing 2019-06-26 19:06:46 +02:00
Gabriele Gristina
b2529af172 remove original commented code 2019-06-22 15:00:50 +02:00
Gabriele Gristina
6cb4abd526 Add zlib support v2 2019-06-21 21:56:38 +02:00
Jens Steube
62d5d2dfbb OpenCL Runtime: Workaround ROCm OpenCL driver problem trying to write temporary file into readonly folder by setting TMPDIR environment variable 2019-06-17 17:35:23 +02:00
jsteube
3c9d26b161 Add some conditions to make scan-build happy 2019-04-05 13:46:29 +02:00
jsteube
e5322c8bee Fix --remove handling in -m 16800 and -m 16801 with new outfile format 2019-04-02 18:39:42 +02:00
jsteube
0096f1a56b Add generic_salt_encode so we have both function types 2019-02-14 10:52:24 +01:00
jsteube
6f4b72bcd3 Rename parse_and_store_generic_salt to generic_salt_decode 2019-02-14 09:53:29 +01:00
jsteube
75f7172cca Prepare remove of hash_type variable 2019-02-12 15:30:42 +01:00
jsteube
bc22bfee2e Some cleanup 2019-01-12 15:05:33 +01:00
jsteube
fcfd07ceb2 Move parse_and_store_generic_salt to shared.c 2019-01-10 20:51:38 +01:00
jsteube
4028bae578 Use dynloader.c instead of dlopen() directly 2018-12-19 16:09:28 +01:00
jsteube
7e1e1d34f8 Use real dlopen() to load the module 2018-12-19 13:43:45 +01:00
Jens Steube
55add7c60e The goal of this branch to develop a plugin like interface for hashcat kernels.
The modification of existing core source files to add new hashcat kernels conflicts with the idea of having private hashcat kernel repositories especially when backporting latest hashcat core changes and new features.
The final outcome of this should be a plugin format that does not require modifications on the core soruce files.
Also convert all existing hash-modes to hashcat modules.
We'll start with dynamic loading the modules at runtime rather than linking them at compile time.
This will require some extra code for different OS types but should beneficial on a long term.
This commit add some first ideas of how such modules could look like, however there's no dynamic loading interface yet.
Next steps will be removing all hash-mode depending special code from source files and move them to the modules.
Finally merge with master.
2018-12-06 14:02:10 +01:00
Jens Steube
4a9171ca5d Fix use of select() on stdin on windows
Fixes #1705
2018-10-18 11:20:01 +02:00
jsteube
5f797147fb Link ws2_32 in order to make use of select() 2018-09-01 14:09:24 +02:00
jsteube
fd71da8ade Add timeout to fgets() for later use 2018-09-01 13:19:29 +02:00
jsteube
bdec457951 TrueCrypt/VeraCrypt cracking: Do an entropy check on the TC/VC header on start 2018-07-31 16:18:45 +02:00
jsteube
cd0923f1b8 General file handling: Abort if a byte order mark (BOM) was detected in a wordlist, hashlist, maskfile or rulefile 2018-07-30 13:23:48 +02:00
jsteube
cc8fa3ee80 Remove TOKEN_ATTR_TERMINATE_STRING from input_tokenizer() and replace with equalivalent code where it's needed 2018-07-24 13:55:23 +02:00
Jens Steube
1af8e29a4b Add round_up_multiple_32() and round_up_multiple_64() 2018-02-13 13:20:29 +01:00
Jens Steube
d656e9c3a4 OpenCL Kernels: Use the kernel local buffer size as additional reference in order to limit the thread-count 2018-02-11 10:56:08 +01:00
jsteube
05a01d3843 fix some datatypes 2018-02-08 19:13:29 +01:00