mirror of
https://github.com/hashcat/hashcat.git
synced 2025-07-06 23:02:35 +00:00

This change affects three key areas, each improving autotuning: - Autotune refactoring itself The main autotune algorithm had become too complex to maintain and has now been rewritten from scratch. The engine is now closer to the old v6.0.0 version, using a much more straightforward approach. Additionally, the backend is now informed when the autotune engine runs its operations and runs an extra invisible kernel invocation. This significantly improves runtime accuracy because the same caching mechanisms which kick in normal cracking sessions now also apply during autotuning. This leads to more consistent and reliable automatic workload tuning. - Benchmarking and '--speed-only' accuracy bugs fixed Benchmark runtimes had become too short, especially since the default benchmark mask changed from '?b?b?b?b?b?b?b' to '?a?a?a?a?a?a?a?a'. For very fast hashes like NTLM, benchmarks often stopped immediately when base words needed to be regenerated, producing highly inaccurate results. This issue also misled users tuning '-n' values, as manually oversubscribing kernels could mask the problem, creating the impression that increasing '-n' had a larger impact on performance than it truly does. While '-n' still has an effect, it’s not as significant. With this fix, users achieve the same speed without needing to tune '-n' manually. The bug was fixed by enforcing a minimum benchmark runtime of 4 seconds, regardless of kernel runtime or kernel type. This ensures more stable and realistic benchmark results, but typically increasing the benchmark duration by up to 4 seconds. - Kernel-Threads set to 32 and plugin configuration cleanup Some plugin configurations existed solely to work around the old benchmarking bug and can now be removed. For example, 'OPTS_TYPE_MAXIMUM_THREADS' is no longer required and has been removed from all plugins, although the parameter itself remains to avoid breaking custom plugins. Because increasing threads beyond 32 no longer offers meaningful performance gains, the default is now capped at 32 (unless overridden with '-T'). This simplifies GPU memory management. Currently, work-item counts are indirectly limited by buffer sizes (e.g., 'pws_buf[]'), which must not exceed 4 GiB (a hard-coded limit). This buffer size depends on the product of 'kernel-accel', 'kernel-threads', and the device’s compute units. By reducing the default threads from 1024 to 32, there is now more space available for base words.
101 lines
8.1 KiB
C
101 lines
8.1 KiB
C
/**
|
|
* Author......: See docs/credits.txt
|
|
* License.....: MIT
|
|
*/
|
|
|
|
#ifndef HC_BACKEND_H
|
|
#define HC_BACKEND_H
|
|
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
|
|
static const char CL_VENDOR_AMD1[] = "Advanced Micro Devices, Inc.";
|
|
static const char CL_VENDOR_AMD2[] = "AuthenticAMD";
|
|
static const char CL_VENDOR_AMD_USE_INTEL[] = "GenuineIntel";
|
|
static const char CL_VENDOR_APPLE[] = "Apple";
|
|
static const char CL_VENDOR_APPLE_USE_AMD[] = "AMD";
|
|
static const char CL_VENDOR_APPLE_USE_NV[] = "NVIDIA";
|
|
static const char CL_VENDOR_APPLE_USE_INTEL[] = "Intel";
|
|
static const char CL_VENDOR_APPLE_USE_INTEL2[] = "Intel Inc.";
|
|
static const char CL_VENDOR_INTEL_BEIGNET[] = "Intel";
|
|
static const char CL_VENDOR_INTEL_SDK[] = "Intel(R) Corporation";
|
|
static const char CL_VENDOR_MESA[] = "Mesa";
|
|
static const char CL_VENDOR_NV[] = "NVIDIA Corporation";
|
|
static const char CL_VENDOR_POCL[] = "The pocl project";
|
|
static const char CL_VENDOR_MICROSOFT[] = "Microsoft";
|
|
|
|
int backend_ctx_init (hashcat_ctx_t *hashcat_ctx);
|
|
void backend_ctx_destroy (hashcat_ctx_t *hashcat_ctx);
|
|
|
|
int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime);
|
|
void backend_ctx_devices_destroy (hashcat_ctx_t *hashcat_ctx);
|
|
void backend_ctx_devices_sync_tuning (hashcat_ctx_t *hashcat_ctx);
|
|
void backend_ctx_devices_update_power (hashcat_ctx_t *hashcat_ctx);
|
|
void backend_ctx_devices_kernel_loops (hashcat_ctx_t *hashcat_ctx);
|
|
|
|
int backend_session_begin (hashcat_ctx_t *hashcat_ctx);
|
|
void backend_session_destroy (hashcat_ctx_t *hashcat_ctx);
|
|
void backend_session_reset (hashcat_ctx_t *hashcat_ctx);
|
|
int backend_session_update_combinator (hashcat_ctx_t *hashcat_ctx);
|
|
int backend_session_update_mp (hashcat_ctx_t *hashcat_ctx);
|
|
int backend_session_update_mp_rl (hashcat_ctx_t *hashcat_ctx, const u32 css_cnt_l, const u32 css_cnt_r);
|
|
|
|
void generate_source_kernel_filename (const bool slow_candidates, const u32 attack_exec, const u32 attack_kern, const u32 kern_type, const u32 opti_type, char *shared_dir, char *source_file);
|
|
void generate_cached_kernel_filename (const bool slow_candidates, const u32 attack_exec, const u32 attack_kern, const u32 kern_type, const u32 opti_type, char *cache_dir, const char *device_name_chksum, char *cached_file, bool is_metal);
|
|
void generate_source_kernel_shared_filename (char *shared_dir, char *source_file);
|
|
void generate_cached_kernel_shared_filename (char *cache_dir, const char *device_name_chksum, char *cached_file, bool is_metal);
|
|
void generate_source_kernel_mp_filename (const u32 opti_type, const u64 opts_type, char *shared_dir, char *source_file);
|
|
void generate_cached_kernel_mp_filename (const u32 opti_type, const u64 opts_type, char *cache_dir, const char *device_name_chksum, char *cached_file, bool is_metal);
|
|
void generate_source_kernel_amp_filename (const u32 attack_kern, char *shared_dir, char *source_file);
|
|
void generate_cached_kernel_amp_filename (const u32 attack_kern, char *cache_dir, const char *device_name_chksum, char *cached_file, bool is_metal);
|
|
|
|
bool read_kernel_binary (hashcat_ctx_t *hashcat_ctx, const char *kernel_file, size_t *kernel_lengths, char **kernel_sources);
|
|
|
|
int gidd_to_pw_t (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u64 gidd, pw_t *pw);
|
|
|
|
int copy_pws_idx (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, u64 gidd, const u64 cnt, pw_idx_t *dest);
|
|
int copy_pws_comp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, u32 off, u32 cnt, u32 *dest);
|
|
|
|
int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 highest_pw_len, const u64 pws_pos, const u64 pws_cnt, const u32 fast_iteration, const u32 salt_pos, const bool is_autotune);
|
|
|
|
int run_cuda_kernel_atinit (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, CUdeviceptr buf, const u64 num);
|
|
int run_cuda_kernel_utf8toutf16le (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, CUdeviceptr buf, const u64 num);
|
|
int run_cuda_kernel_memset (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, CUdeviceptr buf, const u64 offset, const u8 value, const u64 size);
|
|
int run_cuda_kernel_memset32 (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, CUdeviceptr buf, const u64 offset, const u32 value, const u64 size);
|
|
int run_cuda_kernel_bzero (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, CUdeviceptr buf, const u64 size);
|
|
|
|
int run_hip_kernel_atinit (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, hipDeviceptr_t buf, const u64 num);
|
|
int run_hip_kernel_utf8toutf16le (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, hipDeviceptr_t buf, const u64 num);
|
|
int run_hip_kernel_memset (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, hipDeviceptr_t buf, const u64 offset, const u8 value, const u64 size);
|
|
int run_hip_kernel_memset32 (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, hipDeviceptr_t buf, const u64 offset, const u32 value, const u64 size);
|
|
int run_hip_kernel_bzero (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, hipDeviceptr_t buf, const u64 size);
|
|
|
|
#if defined (__APPLE__)
|
|
int run_metal_kernel_atinit (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, mtl_mem buf, const u64 num);
|
|
int run_metal_kernel_utf8toutf16le (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, mtl_mem buf, const u64 num);
|
|
int run_metal_kernel_memset (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, mtl_mem buf, const u64 offset, const u8 value, const u64 size);
|
|
int run_metal_kernel_memset32 (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, mtl_mem buf, const u64 offset, const u32 value, const u64 size);
|
|
int run_metal_kernel_bzero (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, mtl_mem buf, const u64 size);
|
|
#endif
|
|
|
|
int run_opencl_kernel_atinit (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_mem buf, const u64 num);
|
|
int run_opencl_kernel_utf8toutf16le (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_mem buf, const u64 num);
|
|
int run_opencl_kernel_memset (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_mem buf, const u64 offset, const u8 value, const u64 size);
|
|
int run_opencl_kernel_memset32 (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_mem buf, const u64 offset, const u32 value, const u64 size);
|
|
int run_opencl_kernel_bzero (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_mem buf, const u64 size);
|
|
|
|
int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 kern_run, const u64 pws_pos, const u64 num, const u32 event_update, const u32 iteration, const bool is_autotune);
|
|
int run_kernel_mp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 kern_run, const u64 num);
|
|
int run_kernel_tm (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param);
|
|
int run_kernel_amp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u64 num);
|
|
int run_kernel_decompress (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u64 num);
|
|
int run_copy (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u64 pws_cnt);
|
|
int run_cracker (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u64 pws_pos, const u64 pws_cnt);
|
|
|
|
HC_API_CALL
|
|
void *hook12_thread (void *p);
|
|
HC_API_CALL
|
|
void *hook23_thread (void *p);
|
|
|
|
#endif // HC_BACKEND_H
|