mirror of
https://github.com/hashcat/hashcat.git
synced 2024-12-01 04:18:19 +00:00
commit
3a3e188607
@ -1187,7 +1187,7 @@ DECLSPEC void mul_mod128 (PRIVATE_AS u32 *x, PRIVATE_AS const u32 *y, PRIVATE_AS
|
|||||||
t[62] += t[61] < p[125];
|
t[62] += t[61] < p[125];
|
||||||
t[63] += t[62] < p[126];
|
t[63] += t[62] < p[126];
|
||||||
|
|
||||||
// VERY IMPORTANT: if we have an overflow at the highest u32, we need to do the substraction
|
// VERY IMPORTANT: if we have an overflow at the highest u32, we need to do the subtraction
|
||||||
|
|
||||||
const u32 c = t[63] < p[127]; // carry / overflow
|
const u32 c = t[63] < p[127]; // carry / overflow
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
*
|
*
|
||||||
* There are four variables where major differences occur:
|
* There are four variables where major differences occur:
|
||||||
*
|
*
|
||||||
* - P2: Adress space of kernel_rules_t struct.
|
* - P2: Address space of kernel_rules_t struct.
|
||||||
* If the kernel uses rules_buf, it will be stored in CONSTANT_AS.
|
* If the kernel uses rules_buf, it will be stored in CONSTANT_AS.
|
||||||
* If it does not, cheaper GLOBAL_AS space is used.
|
* If it does not, cheaper GLOBAL_AS space is used.
|
||||||
*
|
*
|
||||||
|
@ -2024,7 +2024,7 @@ DECLSPEC void point_mul (PRIVATE_AS u32 *r, PRIVATE_AS const u32 *k, SECP256K1_T
|
|||||||
* @param r out: x and y coordinates.
|
* @param r out: x and y coordinates.
|
||||||
* @param x in: x coordinate which should be converted, a pointer to an u32 array with a size of 8.
|
* @param x in: x coordinate which should be converted, a pointer to an u32 array with a size of 8.
|
||||||
* @param first_byte in: The parity of the y coordinate, a u32.
|
* @param first_byte in: The parity of the y coordinate, a u32.
|
||||||
* @return Returns 0 if successfull, returns 1 if x is greater than the basepoint.
|
* @return Returns 0 if successful, returns 1 if x is greater than the basepoint.
|
||||||
*/
|
*/
|
||||||
DECLSPEC u32 transform_public (PRIVATE_AS secp256k1_t *r, PRIVATE_AS const u32 *x, const u32 first_byte)
|
DECLSPEC u32 transform_public (PRIVATE_AS secp256k1_t *r, PRIVATE_AS const u32 *x, const u32 first_byte)
|
||||||
{
|
{
|
||||||
@ -2084,7 +2084,7 @@ DECLSPEC u32 transform_public (PRIVATE_AS secp256k1_t *r, PRIVATE_AS const u32 *
|
|||||||
* Parse a x coordinate with leading parity to secp256k1_t.
|
* Parse a x coordinate with leading parity to secp256k1_t.
|
||||||
* @param r out: x and y coordinates.
|
* @param r out: x and y coordinates.
|
||||||
* @param k in: x coordinate which should be converted with leading parity, a pointer to an u32 array with a size of 9.
|
* @param k in: x coordinate which should be converted with leading parity, a pointer to an u32 array with a size of 9.
|
||||||
* @return Returns 0 if successfull, returns 1 if x is greater than the basepoint or the parity has an unexpected value.
|
* @return Returns 0 if successful, returns 1 if x is greater than the basepoint or the parity has an unexpected value.
|
||||||
*/
|
*/
|
||||||
DECLSPEC u32 parse_public (PRIVATE_AS secp256k1_t *r, PRIVATE_AS const u32 *k)
|
DECLSPEC u32 parse_public (PRIVATE_AS secp256k1_t *r, PRIVATE_AS const u32 *k)
|
||||||
{
|
{
|
||||||
|
@ -339,7 +339,7 @@ DECLSPEC void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from compuation
|
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from computation
|
||||||
// makes sense if there are not thread ID's (for instance on CPU)
|
// makes sense if there are not thread ID's (for instance on CPU)
|
||||||
|
|
||||||
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key)
|
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key)
|
||||||
|
@ -436,7 +436,7 @@ KERNEL_FQ void m08800_comp (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t
|
|||||||
|
|
||||||
u32 r[16];
|
u32 r[16];
|
||||||
|
|
||||||
// not needed because of cbc mode -- implementation flaw !!. first 16 byte are not interessting
|
// not needed because of cbc mode -- implementation flaw !!. first 16 bytes are not interesting
|
||||||
|
|
||||||
r[0] = 0;
|
r[0] = 0;
|
||||||
r[1] = 0;
|
r[1] = 0;
|
||||||
|
@ -340,7 +340,7 @@ DECLSPEC void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from compuation
|
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from computation
|
||||||
// makes sense if there are not thread ID's (for instance on CPU)
|
// makes sense if there are not thread ID's (for instance on CPU)
|
||||||
|
|
||||||
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key)
|
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key)
|
||||||
|
@ -323,7 +323,7 @@ DECLSPEC u32 do_round (LOCAL_AS u32 *sc, PRIVATE_AS const u32 *pw, const u32 pw_
|
|||||||
|
|
||||||
make_sc (sc, pw, pw_len, ctx->dgst32, ctx->dgst_len);
|
make_sc (sc, pw, pw_len, ctx->dgst32, ctx->dgst_len);
|
||||||
|
|
||||||
// make sure pwbl_len is calculcated before it gets changed
|
// make sure pwbl_len is calculated before it gets changed
|
||||||
|
|
||||||
const u32 pwbl_len = pw_len + ctx->dgst_len;
|
const u32 pwbl_len = pw_len + ctx->dgst_len;
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ typedef struct dpapimk
|
|||||||
u32 SID_offset;
|
u32 SID_offset;
|
||||||
|
|
||||||
/* here only for possible
|
/* here only for possible
|
||||||
forward compatibiliy
|
forward compatibility
|
||||||
*/
|
*/
|
||||||
// u8 cipher_algo[16];
|
// u8 cipher_algo[16];
|
||||||
// u8 hash_algo[16];
|
// u8 hash_algo[16];
|
||||||
|
@ -41,7 +41,7 @@ typedef struct dpapimk
|
|||||||
u32 SID_offset;
|
u32 SID_offset;
|
||||||
|
|
||||||
/* here only for possible
|
/* here only for possible
|
||||||
forward compatibiliy
|
forward compatibility
|
||||||
*/
|
*/
|
||||||
// u8 cipher_algo[16];
|
// u8 cipher_algo[16];
|
||||||
// u8 hash_algo[16];
|
// u8 hash_algo[16];
|
||||||
|
@ -40,7 +40,7 @@ typedef struct dpapimk
|
|||||||
u32 SID_offset;
|
u32 SID_offset;
|
||||||
|
|
||||||
/* here only for possible
|
/* here only for possible
|
||||||
forward compatibiliy
|
forward compatibility
|
||||||
*/
|
*/
|
||||||
// u8 cipher_algo[16];
|
// u8 cipher_algo[16];
|
||||||
// u8 hash_algo[16];
|
// u8 hash_algo[16];
|
||||||
|
@ -48,7 +48,7 @@ typedef struct dpapimk
|
|||||||
u32 SID_offset;
|
u32 SID_offset;
|
||||||
|
|
||||||
/* here only for possible
|
/* here only for possible
|
||||||
forward compatibiliy
|
forward compatibility
|
||||||
*/
|
*/
|
||||||
// u8 cipher_algo[16];
|
// u8 cipher_algo[16];
|
||||||
// u8 hash_algo[16];
|
// u8 hash_algo[16];
|
||||||
|
@ -350,7 +350,7 @@ DECLSPEC void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from compuation
|
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from computation
|
||||||
// makes sense if there are not thread ID's (for instance on CPU)
|
// makes sense if there are not thread ID's (for instance on CPU)
|
||||||
|
|
||||||
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key)
|
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key)
|
||||||
|
@ -371,7 +371,7 @@ KERNEL_FQ void m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// decrypt buffer is not usefull here, skip
|
// decrypt buffer is not useful here, skip
|
||||||
u32 dec[14] = { 0 };
|
u32 dec[14] = { 0 };
|
||||||
|
|
||||||
AES_GCM_GCTR (key, J0, enc, enc_len, dec, s_te0, s_te1, s_te2, s_te3, s_te4);
|
AES_GCM_GCTR (key, J0, enc, enc_len, dec, s_te0, s_te1, s_te2, s_te3, s_te4);
|
||||||
|
@ -352,7 +352,7 @@ DECLSPEC void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from compuation
|
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from computation
|
||||||
// makes sense if there are not thread ID's (for instance on CPU)
|
// makes sense if there are not thread ID's (for instance on CPU)
|
||||||
|
|
||||||
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key)
|
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key)
|
||||||
|
@ -348,7 +348,7 @@ DECLSPEC void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val, const u6
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from compuation
|
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from computation
|
||||||
// makes sense if there are not thread ID's (for instance on CPU)
|
// makes sense if there are not thread ID's (for instance on CPU)
|
||||||
|
|
||||||
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key, MAYBE_UNUSED const u64 lid)
|
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key, MAYBE_UNUSED const u64 lid)
|
||||||
|
@ -381,7 +381,7 @@ KERNEL_FQ void m26610_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
const int pt_len = 28; // not using 32 byte but 28 because our UTF8 allows up to 4 byte per character and since we decrypt 32 byte
|
const int pt_len = 28; // not using 32 byte but 28 because our UTF8 allows up to 4 byte per character and since we decrypt 32 byte
|
||||||
// only we can't garantee it is not in the middle of a UTF8 byte stream at that point
|
// only we can't guarantee it is not in the middle of a UTF8 byte stream at that point
|
||||||
|
|
||||||
if (hc_enc_scan (pt, pt_len))
|
if (hc_enc_scan (pt, pt_len))
|
||||||
{
|
{
|
||||||
|
@ -348,7 +348,7 @@ DECLSPEC void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val, const u6
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from compuation
|
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from computation
|
||||||
// makes sense if there are not thread ID's (for instance on CPU)
|
// makes sense if there are not thread ID's (for instance on CPU)
|
||||||
|
|
||||||
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key, MAYBE_UNUSED const u64 lid)
|
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key, MAYBE_UNUSED const u64 lid)
|
||||||
|
@ -349,7 +349,7 @@ DECLSPEC void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val, const u6
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from compuation
|
// access pattern: linear access with S offset already set to right offset based on thread ID saving it from computation
|
||||||
// makes sense if there are not thread ID's (for instance on CPU)
|
// makes sense if there are not thread ID's (for instance on CPU)
|
||||||
|
|
||||||
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key, MAYBE_UNUSED const u64 lid)
|
DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key, MAYBE_UNUSED const u64 lid)
|
||||||
|
@ -429,7 +429,7 @@ KERNEL_FQ void m31800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepasswo
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
const int pt_len = 28; // not using 32 byte but 28 because our UTF8 allows up to 4 byte per character and since we decrypt 32 byte
|
const int pt_len = 28; // not using 32 byte but 28 because our UTF8 allows up to 4 byte per character and since we decrypt 32 byte
|
||||||
// only we can't garantee it is not in the middle of a UTF8 byte stream at that point
|
// only we can't guarantee it is not in the middle of a UTF8 byte stream at that point
|
||||||
|
|
||||||
if (hc_enc_scan (pt, pt_len))
|
if (hc_enc_scan (pt, pt_len))
|
||||||
{
|
{
|
||||||
|
@ -228,7 +228,7 @@
|
|||||||
- Hardware Monitor: Add support for GPU device utilization readings using iokit on Apple Silicon (OpenCL and Metal)
|
- Hardware Monitor: Add support for GPU device utilization readings using iokit on Apple Silicon (OpenCL and Metal)
|
||||||
- Hash Info: show more information (Updated Hash-Format. Added Autodetect, Self-Test, Potfile and Plaintext encoding)
|
- Hash Info: show more information (Updated Hash-Format. Added Autodetect, Self-Test, Potfile and Plaintext encoding)
|
||||||
- HIP Backend: moved functions to ext_hip.c/ext_hiprtc.c and includes to ext_hip.h/ext_hiprtc.h
|
- HIP Backend: moved functions to ext_hip.c/ext_hiprtc.c and includes to ext_hip.h/ext_hiprtc.h
|
||||||
- HIP Backend: removed unused functions from hiprtc to workaroung missing function symbols on windows dll
|
- HIP Backend: removed unused functions from hiprtc to workaround missing function symbols on windows dll
|
||||||
- Kernels: Refactored standard kernel declaration to use a structure holding u32/u64 attributes to reduce the number of attributes
|
- Kernels: Refactored standard kernel declaration to use a structure holding u32/u64 attributes to reduce the number of attributes
|
||||||
- Kernels: Refactored standard kernel includes, KERN_ATTR macros and RC4 cipher functions, in order to support Apple Metal runtime
|
- Kernels: Refactored standard kernel includes, KERN_ATTR macros and RC4 cipher functions, in order to support Apple Metal runtime
|
||||||
- Kernels: Set the default Address Space Qualifier for any pointer, in order to support Apple Metal runtime
|
- Kernels: Set the default Address Space Qualifier for any pointer, in order to support Apple Metal runtime
|
||||||
@ -254,7 +254,7 @@
|
|||||||
- Rules: Add support to include source wordlist in debugging format
|
- Rules: Add support to include source wordlist in debugging format
|
||||||
- Rules: Update hand-written rulesets to covers years up to 2029
|
- Rules: Update hand-written rulesets to covers years up to 2029
|
||||||
- Status code: updated negative status code (added kernel create failure and resync)
|
- Status code: updated negative status code (added kernel create failure and resync)
|
||||||
- Status code: updated negative status code, usefull in Unit tests engine (test.sh)
|
- Status code: updated negative status code, useful in Unit tests engine (test.sh)
|
||||||
- Terminal: Increased size of hash name column in `--help` and `--identify` options
|
- Terminal: Increased size of hash name column in `--help` and `--identify` options
|
||||||
- Terminal: Limit output length of example hash in --example-hash mode to 200. Use --mach to see full example hash
|
- Terminal: Limit output length of example hash in --example-hash mode to 200. Use --mach to see full example hash
|
||||||
- Terminal: show empty OpenCL platforms only in backend information mode
|
- Terminal: show empty OpenCL platforms only in backend information mode
|
||||||
@ -666,7 +666,7 @@
|
|||||||
- Building: Fixed build warnings on macOS for unrar sources
|
- Building: Fixed build warnings on macOS for unrar sources
|
||||||
- Building: Fixed test for DARWIN_VERSION in Makefile
|
- Building: Fixed test for DARWIN_VERSION in Makefile
|
||||||
- Commandline Options: Removed option --example-hashes, now an alias of --hash-info
|
- Commandline Options: Removed option --example-hashes, now an alias of --hash-info
|
||||||
- Compute API: Skipping devices instead of stop if error occured in initialization
|
- Compute API: Skipping devices instead of stop if error occurred in initialization
|
||||||
- Documentation: Added 3rd party licenses to docs/license_libs
|
- Documentation: Added 3rd party licenses to docs/license_libs
|
||||||
- Hash-Mode 8900 (Scrypt): Changed default benchmark scrypt parameters from 1k:1:1 to 16k:8:1 (default)
|
- Hash-Mode 8900 (Scrypt): Changed default benchmark scrypt parameters from 1k:1:1 to 16k:8:1 (default)
|
||||||
- Hash-Mode 11600 (7-Zip): Improved memory handling (alloc and free) for the hook function
|
- Hash-Mode 11600 (7-Zip): Improved memory handling (alloc and free) for the hook function
|
||||||
@ -732,7 +732,7 @@
|
|||||||
- Hcchr Files: Renamed some .charset files into .hcchr files
|
- Hcchr Files: Renamed some .charset files into .hcchr files
|
||||||
- Hash-Mode 21200 (md5(sha1($salt).md5($pass))): Improved speed by using pre-computed SHA1
|
- Hash-Mode 21200 (md5(sha1($salt).md5($pass))): Improved speed by using pre-computed SHA1
|
||||||
- OpenCL Devices: Utilize PCI domain to improve alias device detection
|
- OpenCL Devices: Utilize PCI domain to improve alias device detection
|
||||||
- OpenCL Kernels: Added datatypes to literals of enum costants
|
- OpenCL Kernels: Added datatypes to literals of enum constants
|
||||||
- OpenCL Kernels: Added pure kernels for hash-mode 600 (BLAKE2b-512)
|
- OpenCL Kernels: Added pure kernels for hash-mode 600 (BLAKE2b-512)
|
||||||
- OpenCL Runtime: Add some unstable warnings for some SHA512 based algorithms on AMD GPU on macOS
|
- OpenCL Runtime: Add some unstable warnings for some SHA512 based algorithms on AMD GPU on macOS
|
||||||
- OpenCL Runtime: Reinterpret return code CL_DEVICE_NOT_FOUND from clGetDeviceIDs() as non-fatal
|
- OpenCL Runtime: Reinterpret return code CL_DEVICE_NOT_FOUND from clGetDeviceIDs() as non-fatal
|
||||||
@ -865,7 +865,7 @@
|
|||||||
|
|
||||||
- Bitcoin Wallet: Be more user friendly by allowing a larger data range for ckey and public_key
|
- Bitcoin Wallet: Be more user friendly by allowing a larger data range for ckey and public_key
|
||||||
- Brain: Added new parameter --brain-server-timer to specify seconds between scheduled backups
|
- Brain: Added new parameter --brain-server-timer to specify seconds between scheduled backups
|
||||||
- Building: Fix for library compilation failure due to multiple defenition of sbob_xx64()
|
- Building: Fix for library compilation failure due to multiple definition of sbob_xx64()
|
||||||
- Cracking bcrypt and Password Safe v2: Use feedback from the compute API backend to dynamically calculate optimal thread count
|
- Cracking bcrypt and Password Safe v2: Use feedback from the compute API backend to dynamically calculate optimal thread count
|
||||||
- Dictstat: On Windows, the st_ino attribute in the stat struct is not set, which can lead to invalid cache hits. Added the filename to the database entry.
|
- Dictstat: On Windows, the st_ino attribute in the stat struct is not set, which can lead to invalid cache hits. Added the filename to the database entry.
|
||||||
- Documents: Added README on how to build hashcat on Cygwin, MSYS2 and WSL
|
- Documents: Added README on how to build hashcat on Cygwin, MSYS2 and WSL
|
||||||
@ -903,7 +903,7 @@
|
|||||||
## Technical
|
## Technical
|
||||||
##
|
##
|
||||||
|
|
||||||
- Backend Interface: Added new options --backend-ignore-cuda and --backend-ingore-opencl to prevent CUDA and/or OpenCL API from being used
|
- Backend Interface: Added new options --backend-ignore-cuda and --backend-ignore-opencl to prevent CUDA and/or OpenCL API from being used
|
||||||
- Binary Distribution: Removed 32-bit binary executables
|
- Binary Distribution: Removed 32-bit binary executables
|
||||||
- Building: On macOS, switch from ar to /usr/bin/ar to improve building compatibility
|
- Building: On macOS, switch from ar to /usr/bin/ar to improve building compatibility
|
||||||
- Building: Skipping Travis/Appveyor build for non-code changes
|
- Building: Skipping Travis/Appveyor build for non-code changes
|
||||||
@ -1261,7 +1261,7 @@
|
|||||||
- Added option --optimized-kernel-enable to use faster kernels but limit the maximum supported password- and salt-length
|
- Added option --optimized-kernel-enable to use faster kernels but limit the maximum supported password- and salt-length
|
||||||
- Added self-test functionality to detect broken OpenCL runtimes on startup
|
- Added self-test functionality to detect broken OpenCL runtimes on startup
|
||||||
- Added option --self-test-disable to disable self-test functionality on startup
|
- Added option --self-test-disable to disable self-test functionality on startup
|
||||||
- Added option --wordlist-autohex-disable to disable the automatical conversion of $HEX[] words from the word list
|
- Added option --wordlist-autohex-disable to disable the automatic conversion of $HEX[] words from the word list
|
||||||
- Added option --example-hashes to show an example hash for each hash-mode
|
- Added option --example-hashes to show an example hash for each hash-mode
|
||||||
- Removed option --weak-hash-check (zero-length password check) to increase startup time, it also causes many Trap 6 error on macOS
|
- Removed option --weak-hash-check (zero-length password check) to increase startup time, it also causes many Trap 6 error on macOS
|
||||||
|
|
||||||
@ -1278,7 +1278,7 @@
|
|||||||
|
|
||||||
- Fixed a buffer overflow in mangle_dupechar_last function
|
- Fixed a buffer overflow in mangle_dupechar_last function
|
||||||
- Fixed a calculation error in get_power() leading to errors of type "BUG pw_add()!!"
|
- Fixed a calculation error in get_power() leading to errors of type "BUG pw_add()!!"
|
||||||
- Fixed a memory problem that occured when the OpenCL folder was not found and e.g. the shared and session folder were the same
|
- Fixed a memory problem that occurred when the OpenCL folder was not found and e.g. the shared and session folder were the same
|
||||||
- Fixed a missing barrier() call in the RACF OpenCL kernel
|
- Fixed a missing barrier() call in the RACF OpenCL kernel
|
||||||
- Fixed a missing salt length value in benchmark mode for SIP
|
- Fixed a missing salt length value in benchmark mode for SIP
|
||||||
- Fixed an integer overflow in hash buffer size calculation
|
- Fixed an integer overflow in hash buffer size calculation
|
||||||
@ -1463,7 +1463,7 @@
|
|||||||
- Added support for filtering hccapx message pairs using --hccapx-message-pair
|
- Added support for filtering hccapx message pairs using --hccapx-message-pair
|
||||||
- Added support for parsing 7-Zip hashes with LZMA/LZMA2 compression indicator set to a non-zero value
|
- Added support for parsing 7-Zip hashes with LZMA/LZMA2 compression indicator set to a non-zero value
|
||||||
- Added support for decompressing LZMA1/LZMA2 data for -m 11600 = 7-Zip to validate the CRC
|
- Added support for decompressing LZMA1/LZMA2 data for -m 11600 = 7-Zip to validate the CRC
|
||||||
- Added support for automatic merge of LM halfes in case --show and --left is used
|
- Added support for automatic merge of LM halves in case --show and --left is used
|
||||||
- Added support for showing all user names with --show and --left if --username was specified
|
- Added support for showing all user names with --show and --left if --username was specified
|
||||||
- Added support for GPU temperature management on cygwin build
|
- Added support for GPU temperature management on cygwin build
|
||||||
|
|
||||||
@ -1538,7 +1538,7 @@
|
|||||||
- Hardware Management: Bring back kernel exec timeout detection for NVidia on user request
|
- Hardware Management: Bring back kernel exec timeout detection for NVidia on user request
|
||||||
- Hardware Monitor: Fixed several memory leaks in case hash-file writing (caused by --remove) failed
|
- Hardware Monitor: Fixed several memory leaks in case hash-file writing (caused by --remove) failed
|
||||||
- Hardware Monitor: Fixed several memory leaks in case no hardware monitor sensor is found
|
- Hardware Monitor: Fixed several memory leaks in case no hardware monitor sensor is found
|
||||||
- Hardware Monitor: In case NVML initialization failed, do not try to initialiaze NVAPI or XNVCTRL because they both depend on NVML
|
- Hardware Monitor: In case NVML initialization failed, do not try to initialize NVAPI or XNVCTRL because they both depend on NVML
|
||||||
- Hash Parsing: Added additional bound checks for the SIP digest authentication (MD5) parser (-m 11400)
|
- Hash Parsing: Added additional bound checks for the SIP digest authentication (MD5) parser (-m 11400)
|
||||||
- Hash Parsing: Make sure that all files are correctly closed whenever a hash file parsing error occurs
|
- Hash Parsing: Make sure that all files are correctly closed whenever a hash file parsing error occurs
|
||||||
- Helper: Added functions to check existence, type, read- and write-permissions and rewrite sources to use them instead of stat()
|
- Helper: Added functions to check existence, type, read- and write-permissions and rewrite sources to use them instead of stat()
|
||||||
@ -1575,7 +1575,7 @@
|
|||||||
## Features
|
## Features
|
||||||
##
|
##
|
||||||
|
|
||||||
- Files: Use $HEX[...] in case the password includes the separater character, increases potfile reading performance
|
- Files: Use $HEX[...] in case the password includes the separator character, increases potfile reading performance
|
||||||
- Files: If the user specifies a folder to scan for wordlists instead of directly a wordlist, then ignore the hidden files
|
- Files: If the user specifies a folder to scan for wordlists instead of directly a wordlist, then ignore the hidden files
|
||||||
- Loopback: Include passwords for removed hashes present in the potfile to next loopback iteration
|
- Loopback: Include passwords for removed hashes present in the potfile to next loopback iteration
|
||||||
- New option --progress-only: Quickly provides ideal progress step size and time to process on the user hashes and selected options, then quit
|
- New option --progress-only: Quickly provides ideal progress step size and time to process on the user hashes and selected options, then quit
|
||||||
@ -1682,9 +1682,9 @@ The CLI (hashcat.bin or hashcat.exe) works as before but from a technical perspe
|
|||||||
## Bugs
|
## Bugs
|
||||||
##
|
##
|
||||||
|
|
||||||
- Custom charset from file parsing code did not return an error if an error occured
|
- Custom charset from file parsing code did not return an error if an error occurred
|
||||||
- Fix some clSetKernelArg() size error that caused slow modes to not work anymore in -a 1 mode
|
- Fix some clSetKernelArg() size error that caused slow modes to not work anymore in -a 1 mode
|
||||||
- Hash-mode 11600 = (7-Zip): Depending on input hash a clEnqueueReadBuffer(): CL_INVALID_VALUE error occured
|
- Hash-mode 11600 = (7-Zip): Depending on input hash a clEnqueueReadBuffer(): CL_INVALID_VALUE error occurred
|
||||||
- Hash-mode 22 = Juniper Netscreen/SSG (ScreenOS): Fix salt length for -m 22 in benchmark mode
|
- Hash-mode 22 = Juniper Netscreen/SSG (ScreenOS): Fix salt length for -m 22 in benchmark mode
|
||||||
- Hash-Mode 5500 = NetNTLMv1 + ESS: Fix loading of NetNTLMv1 + SSP hash
|
- Hash-Mode 5500 = NetNTLMv1 + ESS: Fix loading of NetNTLMv1 + SSP hash
|
||||||
- Hash-mode 6000 = RipeMD160: Fix typo in array index number
|
- Hash-mode 6000 = RipeMD160: Fix typo in array index number
|
||||||
@ -1757,12 +1757,12 @@ The CLI (hashcat.bin or hashcat.exe) works as before but from a technical perspe
|
|||||||
- Error handling (startup): Added some missing returncode checks to get_exec_path()
|
- Error handling (startup): Added some missing returncode checks to get_exec_path()
|
||||||
- Fanspeed: Check both fanpolicy and fanspeed returncode and disable retain support if any of them fail
|
- Fanspeed: Check both fanpolicy and fanspeed returncode and disable retain support if any of them fail
|
||||||
- Fanspeed: Minimum fanspeed for retain support increased to 33%, same as NV uses as default on windows
|
- Fanspeed: Minimum fanspeed for retain support increased to 33%, same as NV uses as default on windows
|
||||||
- Fanspeed: Reset PID controler settings to what they were initially
|
- Fanspeed: Reset PID controller settings to what they were initially
|
||||||
- Fanspeed: Set fan speed to default on quit
|
- Fanspeed: Set fan speed to default on quit
|
||||||
- File handling: Do a single write test (for files to be written later) directly on startup
|
- File handling: Do a single write test (for files to be written later) directly on startup
|
||||||
- File locking: Use same locking mechanism in potfile as in outfile
|
- File locking: Use same locking mechanism in potfile as in outfile
|
||||||
- Hardware management: Fixed calling conventions for ADL, NvAPI and NVML on windows
|
- Hardware management: Fixed calling conventions for ADL, NvAPI and NVML on windows
|
||||||
- Hardware management: Improved checking for successfull load of the NVML API
|
- Hardware management: Improved checking for successful load of the NVML API
|
||||||
- Hardware management: In case fanspeed can not be set, disable --gpu-temp-retain automatically
|
- Hardware management: In case fanspeed can not be set, disable --gpu-temp-retain automatically
|
||||||
- Hardware management: In case of initialization error show it only once to the user on startup
|
- Hardware management: In case of initialization error show it only once to the user on startup
|
||||||
- Hardware management: Refactored all code to return returncode (0 or -1) instead of data for more easy error handling
|
- Hardware management: Refactored all code to return returncode (0 or -1) instead of data for more easy error handling
|
||||||
@ -1866,7 +1866,7 @@ The CLI (hashcat.bin or hashcat.exe) works as before but from a technical perspe
|
|||||||
|
|
||||||
* changes v2.01 -> v3.00:
|
* changes v2.01 -> v3.00:
|
||||||
|
|
||||||
This release markes the fusion of "hashcat" and "oclHashcat" into "hashcat".
|
This release marks the fusion of "hashcat" and "oclHashcat" into "hashcat".
|
||||||
It combines all features of all hashcat projects in one project.
|
It combines all features of all hashcat projects in one project.
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -1951,7 +1951,7 @@ It combines all features of all hashcat projects in one project.
|
|||||||
- Fixed a bug in line counter: conditional jump or move depends on an uninitialised value
|
- Fixed a bug in line counter: conditional jump or move depends on an uninitialised value
|
||||||
- Fixed a bug in rule-engine for NVidia devices: code for left- and right-shift were switched
|
- Fixed a bug in rule-engine for NVidia devices: code for left- and right-shift were switched
|
||||||
- Fixed a bug in dive.rule: rules were not updated after the function 'x' was renamed to 'O'
|
- Fixed a bug in dive.rule: rules were not updated after the function 'x' was renamed to 'O'
|
||||||
- Fixed a bug in memory allocation "OpenCL -4 error": used unitialized value in a special situation
|
- Fixed a bug in memory allocation "OpenCL -4 error": used uninitialized value in a special situation
|
||||||
- Fixed a bug in memory handling: heap buffer overflow
|
- Fixed a bug in memory handling: heap buffer overflow
|
||||||
- Fixed a bug in memory handling: out of bounds access
|
- Fixed a bug in memory handling: out of bounds access
|
||||||
- Fixed a bug in implementation of DCC2: forced default iteration count for hashes to 10240
|
- Fixed a bug in implementation of DCC2: forced default iteration count for hashes to 10240
|
||||||
|
@ -203,7 +203,7 @@ Each password candidate creates a hash of 8 bytes that has to be transferred, lo
|
|||||||
|
|
||||||
So let's assume a candidate list size of 8,000,000,000. That doesn't sound like too much - especially if you want to work with rules and masks. It should be clear that using the hashcat brain against a raw MD5 is not very efficient. But now things become interesting, because of some unexpected effects that kick in.
|
So let's assume a candidate list size of 8,000,000,000. That doesn't sound like too much - especially if you want to work with rules and masks. It should be clear that using the hashcat brain against a raw MD5 is not very efficient. But now things become interesting, because of some unexpected effects that kick in.
|
||||||
|
|
||||||
Imagine you have a salted MD5 list, let's say VBULL which is a fast hash (not a slow hash) - and you have many of them. In thise case, each of the salts starts to work for us.
|
Imagine you have a salted MD5 list, let's say VBULL which is a fast hash (not a slow hash) - and you have many of them. In this case, each of the salts starts to work for us.
|
||||||
|
|
||||||
Yes, you read that right - the more salts, the better!!
|
Yes, you read that right - the more salts, the better!!
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The C++ standard denies redefinition of keywords,
|
/* The C++ standard denies redefinition of keywords,
|
||||||
but this is nededed for VS compiler which doesn't have inline keyword but has __inline
|
but this is needed for VS compiler which doesn't have inline keyword but has __inline
|
||||||
*/
|
*/
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
#if defined (_MSC_VER)
|
#if defined (_MSC_VER)
|
||||||
|
@ -212,11 +212,11 @@ typedef struct ADLThermalControllerInfo
|
|||||||
{
|
{
|
||||||
/// Must be set to the size of the structure
|
/// Must be set to the size of the structure
|
||||||
int iSize;
|
int iSize;
|
||||||
/// Possible valies: \ref ADL_DL_THERMAL_DOMAIN_OTHER or \ref ADL_DL_THERMAL_DOMAIN_GPU.
|
/// Possible values: \ref ADL_DL_THERMAL_DOMAIN_OTHER or \ref ADL_DL_THERMAL_DOMAIN_GPU.
|
||||||
int iThermalDomain;
|
int iThermalDomain;
|
||||||
/// GPU 0, 1, etc.
|
/// GPU 0, 1, etc.
|
||||||
int iDomainIndex;
|
int iDomainIndex;
|
||||||
/// Possible valies: \ref ADL_DL_THERMAL_FLAG_INTERRUPT or \ref ADL_DL_THERMAL_FLAG_FANCONTROL
|
/// Possible values: \ref ADL_DL_THERMAL_FLAG_INTERRUPT or \ref ADL_DL_THERMAL_FLAG_FANCONTROL
|
||||||
int iFlags;
|
int iFlags;
|
||||||
} ADLThermalControllerInfo;
|
} ADLThermalControllerInfo;
|
||||||
|
|
||||||
@ -269,7 +269,7 @@ typedef struct ADLFanSpeedValue
|
|||||||
{
|
{
|
||||||
/// Must be set to the size of the structure
|
/// Must be set to the size of the structure
|
||||||
int iSize;
|
int iSize;
|
||||||
/// Possible valies: \ref ADL_DL_FANCTRL_SPEED_TYPE_PERCENT or \ref ADL_DL_FANCTRL_SPEED_TYPE_RPM
|
/// Possible values: \ref ADL_DL_FANCTRL_SPEED_TYPE_PERCENT or \ref ADL_DL_FANCTRL_SPEED_TYPE_RPM
|
||||||
int iSpeedType;
|
int iSpeedType;
|
||||||
/// Fan speed value
|
/// Fan speed value
|
||||||
int iFanSpeed;
|
int iFanSpeed;
|
||||||
|
@ -675,10 +675,10 @@ typedef enum CUjit_option_enum
|
|||||||
CU_JIT_FAST_COMPILE,
|
CU_JIT_FAST_COMPILE,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array of device symbol names that will be relocated to the corresponing
|
* Array of device symbol names that will be relocated to the corresponding
|
||||||
* host addresses stored in ::CU_JIT_GLOBAL_SYMBOL_ADDRESSES.\n
|
* host addresses stored in ::CU_JIT_GLOBAL_SYMBOL_ADDRESSES.\n
|
||||||
* Must contain ::CU_JIT_GLOBAL_SYMBOL_COUNT entries.\n
|
* Must contain ::CU_JIT_GLOBAL_SYMBOL_COUNT entries.\n
|
||||||
* When loding a device module, driver will relocate all encountered
|
* When loading a device module, driver will relocate all encountered
|
||||||
* unresolved symbols to the host addresses.\n
|
* unresolved symbols to the host addresses.\n
|
||||||
* It is only allowed to register symbols that correspond to unresolved
|
* It is only allowed to register symbols that correspond to unresolved
|
||||||
* global variables.\n
|
* global variables.\n
|
||||||
|
@ -152,7 +152,7 @@ typedef enum __HIP_NODISCARD hipError_t {
|
|||||||
///< hipStreamEndCapture in a different thread.
|
///< hipStreamEndCapture in a different thread.
|
||||||
hipErrorGraphExecUpdateFailure = 910, ///< This error indicates that the graph update
|
hipErrorGraphExecUpdateFailure = 910, ///< This error indicates that the graph update
|
||||||
///< not performed because it included changes which
|
///< not performed because it included changes which
|
||||||
///< violated constraintsspecific to instantiated graph
|
///< violated constraints specific to instantiated graph
|
||||||
///< update.
|
///< update.
|
||||||
hipErrorUnknown = 999, //< Unknown error.
|
hipErrorUnknown = 999, //< Unknown error.
|
||||||
// HSA Runtime Error Codes start here.
|
// HSA Runtime Error Codes start here.
|
||||||
@ -216,7 +216,7 @@ typedef enum hipDeviceAttribute_t {
|
|||||||
///< Use cudaDeviceGetTexture1DLinearMaxWidth() instead on Cuda.
|
///< Use cudaDeviceGetTexture1DLinearMaxWidth() instead on Cuda.
|
||||||
hipDeviceAttributeMaxTexture1DMipmap, ///< Cuda only. Maximum size of 1D mipmapped texture.
|
hipDeviceAttributeMaxTexture1DMipmap, ///< Cuda only. Maximum size of 1D mipmapped texture.
|
||||||
hipDeviceAttributeMaxTexture2DWidth, ///< Maximum dimension width of 2D texture.
|
hipDeviceAttributeMaxTexture2DWidth, ///< Maximum dimension width of 2D texture.
|
||||||
hipDeviceAttributeMaxTexture2DHeight, ///< Maximum dimension hight of 2D texture.
|
hipDeviceAttributeMaxTexture2DHeight, ///< Maximum dimension height of 2D texture.
|
||||||
hipDeviceAttributeMaxTexture2DGather, ///< Cuda only. Maximum dimensions of 2D texture if gather operations performed.
|
hipDeviceAttributeMaxTexture2DGather, ///< Cuda only. Maximum dimensions of 2D texture if gather operations performed.
|
||||||
hipDeviceAttributeMaxTexture2DLayered, ///< Cuda only. Maximum dimensions of 2D layered texture.
|
hipDeviceAttributeMaxTexture2DLayered, ///< Cuda only. Maximum dimensions of 2D layered texture.
|
||||||
hipDeviceAttributeMaxTexture2DLinear, ///< Cuda only. Maximum dimensions (width, height, pitch) of 2D textures bound to pitched memory.
|
hipDeviceAttributeMaxTexture2DLinear, ///< Cuda only. Maximum dimensions (width, height, pitch) of 2D textures bound to pitched memory.
|
||||||
@ -258,7 +258,7 @@ typedef enum hipDeviceAttribute_t {
|
|||||||
hipDeviceAttributeTextureAlignment, ///< Alignment requirement for textures
|
hipDeviceAttributeTextureAlignment, ///< Alignment requirement for textures
|
||||||
hipDeviceAttributeTexturePitchAlignment, ///< Pitch alignment requirement for 2D texture references bound to pitched memory;
|
hipDeviceAttributeTexturePitchAlignment, ///< Pitch alignment requirement for 2D texture references bound to pitched memory;
|
||||||
hipDeviceAttributeTotalConstantMemory, ///< Constant memory size in bytes.
|
hipDeviceAttributeTotalConstantMemory, ///< Constant memory size in bytes.
|
||||||
hipDeviceAttributeTotalGlobalMem, ///< Global memory available on devicice.
|
hipDeviceAttributeTotalGlobalMem, ///< Global memory available on device.
|
||||||
hipDeviceAttributeUnifiedAddressing, ///< Cuda only. An unified address space shared with the host.
|
hipDeviceAttributeUnifiedAddressing, ///< Cuda only. An unified address space shared with the host.
|
||||||
hipDeviceAttributeUuid, ///< Cuda only. Unique ID in 16 byte.
|
hipDeviceAttributeUuid, ///< Cuda only. Unique ID in 16 byte.
|
||||||
hipDeviceAttributeWarpSize, ///< Warp size in threads.
|
hipDeviceAttributeWarpSize, ///< Warp size in threads.
|
||||||
@ -315,7 +315,7 @@ typedef enum hipDeviceAttribute_t {
|
|||||||
/** Disable event's capability to record timing information. May improve performance.*/
|
/** Disable event's capability to record timing information. May improve performance.*/
|
||||||
#define hipEventDisableTiming 0x2
|
#define hipEventDisableTiming 0x2
|
||||||
|
|
||||||
/** Event can support IPC. Warnig: It is not supported in HIP.*/
|
/** Event can support IPC. Warning: It is not supported in HIP.*/
|
||||||
#define hipEventInterprocess 0x4
|
#define hipEventInterprocess 0x4
|
||||||
|
|
||||||
/** Use a device-scope release when recording this event. This flag is useful to obtain more
|
/** Use a device-scope release when recording this event. This flag is useful to obtain more
|
||||||
|
@ -20,7 +20,7 @@ void sort_r(void *base, size_t nel, size_t width,
|
|||||||
int (*compar)(const void *_a, const void *_b, void *_arg),
|
int (*compar)(const void *_a, const void *_b, void *_arg),
|
||||||
void *arg);
|
void *arg);
|
||||||
|
|
||||||
Slightly modified to work with hashcat to no falsly detect _SORT_R_LINUX with mingw
|
Slightly modified to work with hashcat to no falsely detect _SORT_R_LINUX with mingw
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param
|
|||||||
|
|
||||||
// for the threads we take as initial value what we receive from the runtime
|
// for the threads we take as initial value what we receive from the runtime
|
||||||
// but is only to start with something, we will fine tune this value as soon as we have our workload specified
|
// but is only to start with something, we will fine tune this value as soon as we have our workload specified
|
||||||
// this thread limiting is also performed insinde run_kernel() so we need to redo it here, too
|
// this thread limiting is also performed inside run_kernel() so we need to redo it here, too
|
||||||
|
|
||||||
u32 kernel_wgs = 0;
|
u32 kernel_wgs = 0;
|
||||||
u32 kernel_wgs_multiple = 0;
|
u32 kernel_wgs_multiple = 0;
|
||||||
@ -191,7 +191,7 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param
|
|||||||
#if defined (DEBUG)
|
#if defined (DEBUG)
|
||||||
|
|
||||||
// don't do any autotune in debug mode in this case
|
// don't do any autotune in debug mode in this case
|
||||||
// we're propably during kernel development
|
// we're probably during kernel development
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -432,7 +432,7 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param
|
|||||||
// v6.2.4 new section: find thread count
|
// v6.2.4 new section: find thread count
|
||||||
// This is not as effective as it could be because of inaccurate kernel return timers
|
// This is not as effective as it could be because of inaccurate kernel return timers
|
||||||
// But is better than fixed values
|
// But is better than fixed values
|
||||||
// Timers in this section are critical, so we rerun meassurements 3 times
|
// Timers in this section are critical, so we rerun measurements 3 times
|
||||||
|
|
||||||
if (kernel_threads_max > kernel_threads_min)
|
if (kernel_threads_max > kernel_threads_min)
|
||||||
{
|
{
|
||||||
|
@ -1055,8 +1055,8 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param,
|
|||||||
// - hooks can have a large influence depending on the OS.
|
// - hooks can have a large influence depending on the OS.
|
||||||
// spawning threads and memory allocations take a lot of time on windows (compared to linux).
|
// spawning threads and memory allocations take a lot of time on windows (compared to linux).
|
||||||
// - the kernel execution can take shortcuts based on intermediate values
|
// - the kernel execution can take shortcuts based on intermediate values
|
||||||
// while these intermediate valus depend on input values.
|
// while these intermediate values depend on input values.
|
||||||
// - if we meassure runtimes of different kernels to find out about their weightning
|
// - if we measure runtimes of different kernels to find out about their weightning
|
||||||
// we need to call them with real input values otherwise we miss the shortcuts inside the kernel.
|
// we need to call them with real input values otherwise we miss the shortcuts inside the kernel.
|
||||||
// - the problem is that these real input values could crack the hash which makes the chaos perfect.
|
// - the problem is that these real input values could crack the hash which makes the chaos perfect.
|
||||||
//
|
//
|
||||||
@ -1589,7 +1589,7 @@ static void rebuild_pws_compressed_append (hc_device_param_t *device_param, cons
|
|||||||
const u32 dst_pw_len4_cnt = dst_pw_len4 / 4;
|
const u32 dst_pw_len4_cnt = dst_pw_len4 / 4;
|
||||||
|
|
||||||
pw_idx_dst->cnt = dst_pw_len4_cnt;
|
pw_idx_dst->cnt = dst_pw_len4_cnt;
|
||||||
pw_idx_dst->len = src_len; // this is intenionally! src_len can not be dst_len, we dont want the kernel to think 0x80 is part of the password
|
pw_idx_dst->len = src_len; // this is intentionally! src_len can not be dst_len, we dont want the kernel to think 0x80 is part of the password
|
||||||
|
|
||||||
u8 *dst = (u8 *) (tmp_pws_comp + pw_idx_dst->off);
|
u8 *dst = (u8 *) (tmp_pws_comp + pw_idx_dst->off);
|
||||||
|
|
||||||
@ -3512,7 +3512,7 @@ int run_cracker (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, co
|
|||||||
if (iconv_ctx == (iconv_t) -1) return -1;
|
if (iconv_ctx == (iconv_t) -1) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// find higest password length, this is for optimization stuff
|
// find highest password length, this is for optimization stuff
|
||||||
|
|
||||||
u32 highest_pw_len = 0;
|
u32 highest_pw_len = 0;
|
||||||
|
|
||||||
|
@ -2311,7 +2311,7 @@ void *brain_server_handle_client (void *p)
|
|||||||
|
|
||||||
hc_thread_mutex_unlock (brain_server_dbs->mux_dbs);
|
hc_thread_mutex_unlock (brain_server_dbs->mux_dbs);
|
||||||
|
|
||||||
// higest position of that attack
|
// highest position of that attack
|
||||||
|
|
||||||
u64 highest = brain_server_highest_attack (brain_server_db_attack);
|
u64 highest = brain_server_highest_attack (brain_server_db_attack);
|
||||||
|
|
||||||
|
@ -2545,7 +2545,7 @@ int hashes_init_zerohash (hashcat_ctx_t *hashcat_ctx)
|
|||||||
hash_t *hashes_buf = hashes->hashes_buf;
|
hash_t *hashes_buf = hashes->hashes_buf;
|
||||||
u32 hashes_cnt = hashes->hashes_cnt;
|
u32 hashes_cnt = hashes->hashes_cnt;
|
||||||
|
|
||||||
// no solution for these special hash types (for instane because they use hashfile in output etc)
|
// no solution for these special hash types (for instance because they use hashfile in output etc)
|
||||||
|
|
||||||
hash_t hash_buf;
|
hash_t hash_buf;
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for missing pointer assignements
|
// check for missing pointer assignments
|
||||||
|
|
||||||
#define CHECK_DEFINED(func) \
|
#define CHECK_DEFINED(func) \
|
||||||
if ((func) == NULL) \
|
if ((func) == NULL) \
|
||||||
@ -818,7 +818,7 @@ u32 default_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED co
|
|||||||
|
|
||||||
u32 default_salt_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
u32 default_salt_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||||
{
|
{
|
||||||
// salt_min : this limit is only interessting for generic hash types that support a salt
|
// salt_min : this limit is only interesting for generic hash types that support a salt
|
||||||
|
|
||||||
u32 salt_min = SALT_MIN;
|
u32 salt_min = SALT_MIN;
|
||||||
|
|
||||||
@ -837,7 +837,7 @@ u32 default_salt_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED
|
|||||||
{
|
{
|
||||||
const bool optimized_kernel = (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL);
|
const bool optimized_kernel = (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL);
|
||||||
|
|
||||||
// salt_max : this limit is only interessting for generic hash types that support a salt
|
// salt_max : this limit is only interesting for generic hash types that support a salt
|
||||||
|
|
||||||
u32 salt_max = SALT_MAX;
|
u32 salt_max = SALT_MAX;
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ void hcfree (void *ptr)
|
|||||||
void *hcmalloc_aligned (const size_t sz, const int align)
|
void *hcmalloc_aligned (const size_t sz, const int align)
|
||||||
{
|
{
|
||||||
// store the original allocated address so we can later use it to free the memory
|
// store the original allocated address so we can later use it to free the memory
|
||||||
// this is convinient to use because we don't need to store two memory addresses
|
// this is convenient to use because we don't need to store two memory addresses
|
||||||
|
|
||||||
const int align1 = align - 1;
|
const int align1 = align - 1;
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
digest[3] = hex_to_u32 (hash_pos + 24);
|
digest[3] = hex_to_u32 (hash_pos + 24);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* reuse challange data as salt_buf, its the buffer that is most likely unique
|
* reuse challenge data as salt_buf, its the buffer that is most likely unique
|
||||||
*/
|
*/
|
||||||
|
|
||||||
salt->salt_buf[0] = 0;
|
salt->salt_buf[0] = 0;
|
||||||
|
@ -52,7 +52,7 @@ typedef struct dpapimk
|
|||||||
u32 SID_offset;
|
u32 SID_offset;
|
||||||
|
|
||||||
/* here only for possible
|
/* here only for possible
|
||||||
forward compatibiliy
|
forward compatibility
|
||||||
*/
|
*/
|
||||||
// u8 cipher_algo[16];
|
// u8 cipher_algo[16];
|
||||||
// u8 hash_algo[16];
|
// u8 hash_algo[16];
|
||||||
|
@ -55,7 +55,7 @@ typedef struct dpapimk
|
|||||||
u32 SID_offset;
|
u32 SID_offset;
|
||||||
|
|
||||||
/* here only for possible
|
/* here only for possible
|
||||||
forward compatibiliy
|
forward compatibility
|
||||||
*/
|
*/
|
||||||
// u8 cipher_algo[16];
|
// u8 cipher_algo[16];
|
||||||
// u8 hash_algo[16];
|
// u8 hash_algo[16];
|
||||||
|
@ -53,7 +53,7 @@ typedef struct dpapimk
|
|||||||
u32 SID_offset;
|
u32 SID_offset;
|
||||||
|
|
||||||
/* here only for possible
|
/* here only for possible
|
||||||
forward compatibiliy
|
forward compatibility
|
||||||
*/
|
*/
|
||||||
// u8 cipher_algo[16];
|
// u8 cipher_algo[16];
|
||||||
// u8 hash_algo[16];
|
// u8 hash_algo[16];
|
||||||
|
@ -56,7 +56,7 @@ typedef struct dpapimk
|
|||||||
u32 SID_offset;
|
u32 SID_offset;
|
||||||
|
|
||||||
/* here only for possible
|
/* here only for possible
|
||||||
forward compatibiliy
|
forward compatibility
|
||||||
*/
|
*/
|
||||||
// u8 cipher_algo[16];
|
// u8 cipher_algo[16];
|
||||||
// u8 hash_algo[16];
|
// u8 hash_algo[16];
|
||||||
|
@ -115,7 +115,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
iter = hc_strtoul ((const char *) token.buf[1] + 2, NULL, 10);
|
iter = hc_strtoul ((const char *) token.buf[1] + 2, NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// iter++; the additinal round is added in the init kernel
|
// iter++; the additional round is added in the init kernel
|
||||||
|
|
||||||
salt->salt_iter = iter;
|
salt->salt_iter = iter;
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
iter = hc_strtoul ((const char *) token.buf[1] + 2, NULL, 10);
|
iter = hc_strtoul ((const char *) token.buf[1] + 2, NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// iter++; the additinal round is added in the init kernel
|
// iter++; the additional round is added in the init kernel
|
||||||
|
|
||||||
salt->salt_iter = iter;
|
salt->salt_iter = iter;
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
iter = hc_strtoul ((const char *) token.buf[1] + 2, NULL, 10);
|
iter = hc_strtoul ((const char *) token.buf[1] + 2, NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
// iter++; the additinal round is added in the init kernel
|
// iter++; the additional round is added in the init kernel
|
||||||
|
|
||||||
salt->salt_iter = iter;
|
salt->salt_iter = iter;
|
||||||
|
|
||||||
|
@ -117,14 +117,14 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
||||||
| TOKEN_ATTR_VERIFY_DIGIT;
|
| TOKEN_ATTR_VERIFY_DIGIT;
|
||||||
|
|
||||||
// salt in alternate base64 repretentation
|
// salt in alternate base64 representation
|
||||||
token.sep[3] = '$';
|
token.sep[3] = '$';
|
||||||
token.len_min[3] = SALT_MIN;
|
token.len_min[3] = SALT_MIN;
|
||||||
token.len_max[3] = SALT_MAX;
|
token.len_max[3] = SALT_MAX;
|
||||||
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
||||||
| TOKEN_ATTR_VERIFY_BASE64B;
|
| TOKEN_ATTR_VERIFY_BASE64B;
|
||||||
|
|
||||||
// payload in alternate base64 representanion
|
// payload in alternate base64 representation
|
||||||
token.sep[4] = '$';
|
token.sep[4] = '$';
|
||||||
token.len[4] = HASH_LEN_B64;
|
token.len[4] = HASH_LEN_B64;
|
||||||
token.attr[4] = TOKEN_ATTR_FIXED_LENGTH
|
token.attr[4] = TOKEN_ATTR_FIXED_LENGTH
|
||||||
|
@ -116,14 +116,14 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
||||||
| TOKEN_ATTR_VERIFY_DIGIT;
|
| TOKEN_ATTR_VERIFY_DIGIT;
|
||||||
|
|
||||||
// salt in alternate base64 repretentation
|
// salt in alternate base64 representation
|
||||||
token.sep[3] = '$';
|
token.sep[3] = '$';
|
||||||
token.len_min[3] = SALT_MIN;
|
token.len_min[3] = SALT_MIN;
|
||||||
token.len_max[3] = SALT_MAX;
|
token.len_max[3] = SALT_MAX;
|
||||||
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
||||||
| TOKEN_ATTR_VERIFY_BASE64B;
|
| TOKEN_ATTR_VERIFY_BASE64B;
|
||||||
|
|
||||||
// payload in alternate base64 representanion
|
// payload in alternate base64 representation
|
||||||
token.sep[4] = '$';
|
token.sep[4] = '$';
|
||||||
token.len[4] = HASH_LEN_B64;
|
token.len[4] = HASH_LEN_B64;
|
||||||
token.attr[4] = TOKEN_ATTR_FIXED_LENGTH
|
token.attr[4] = TOKEN_ATTR_FIXED_LENGTH
|
||||||
|
@ -116,14 +116,14 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
|
||||||
| TOKEN_ATTR_VERIFY_DIGIT;
|
| TOKEN_ATTR_VERIFY_DIGIT;
|
||||||
|
|
||||||
// salt in alternate base64 repretentation
|
// salt in alternate base64 representation
|
||||||
token.sep[3] = '$';
|
token.sep[3] = '$';
|
||||||
token.len_min[3] = SALT_MIN;
|
token.len_min[3] = SALT_MIN;
|
||||||
token.len_max[3] = SALT_MAX;
|
token.len_max[3] = SALT_MAX;
|
||||||
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
|
||||||
| TOKEN_ATTR_VERIFY_BASE64B;
|
| TOKEN_ATTR_VERIFY_BASE64B;
|
||||||
|
|
||||||
// payload in alternate base64 representanion
|
// payload in alternate base64 representation
|
||||||
token.sep[4] = '$';
|
token.sep[4] = '$';
|
||||||
token.len[4] = HASH_LEN_B64;
|
token.len[4] = HASH_LEN_B64;
|
||||||
token.attr[4] = TOKEN_ATTR_FIXED_LENGTH
|
token.attr[4] = TOKEN_ATTR_FIXED_LENGTH
|
||||||
|
@ -212,7 +212,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
digest[3] = hex_to_u32 (hash_pos + 24);
|
digest[3] = hex_to_u32 (hash_pos + 24);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* reuse challange data as salt_buf, its the buffer that is most likely unique
|
* reuse challenge data as salt_buf, its the buffer that is most likely unique
|
||||||
*/
|
*/
|
||||||
|
|
||||||
salt->salt_buf[0] = 0;
|
salt->salt_buf[0] = 0;
|
||||||
|
@ -277,7 +277,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
winhello->mk_buf_pc[6] = 0;
|
winhello->mk_buf_pc[6] = 0;
|
||||||
winhello->mk_buf_pc[7] = 0;
|
winhello->mk_buf_pc[7] = 0;
|
||||||
|
|
||||||
// yes we can precompute the first block of both sha512 here, because length is 128 + hmac lenght + magic length, but
|
// yes we can precompute the first block of both sha512 here, because length is 128 + hmac length + magic length, but
|
||||||
// speed improvement is negligible, but readability would drop a lot
|
// speed improvement is negligible, but readability would drop a lot
|
||||||
|
|
||||||
return (PARSER_OK);
|
return (PARSER_OK);
|
||||||
|
@ -55,7 +55,7 @@ typedef struct scrtv2
|
|||||||
|
|
||||||
} scrtv2_t;
|
} scrtv2_t;
|
||||||
|
|
||||||
static const char *CONFIGPASSPHRASEV2_SIGNATURE = "S:\"Config Passphrase\"=02:"; //The whole line is part of the format to prevent confusion with other similiar tokens also prefixed with 02: in the config files
|
static const char *CONFIGPASSPHRASEV2_SIGNATURE = "S:\"Config Passphrase\"=02:"; //The whole line is part of the format to prevent confusion with other similar tokens also prefixed with 02: in the config files
|
||||||
|
|
||||||
u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
|
||||||
{
|
{
|
||||||
|
@ -101,7 +101,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Haschat
|
* Hashcat
|
||||||
* format 1: $krb5asrep$18$user$realm$checksum$edata2
|
* format 1: $krb5asrep$18$user$realm$checksum$edata2
|
||||||
*
|
*
|
||||||
* JtR
|
* JtR
|
||||||
|
@ -101,7 +101,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE
|
|||||||
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
| TOKEN_ATTR_VERIFY_SIGNATURE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Haschat
|
* Hashcat
|
||||||
* format 1: $krb5asrep$18$user$realm$checksum$edata2
|
* format 1: $krb5asrep$18$user$realm$checksum$edata2
|
||||||
*
|
*
|
||||||
* JtR
|
* JtR
|
||||||
|
@ -397,7 +397,7 @@ int potfile_remove_parse (hashcat_ctx_t *hashcat_ctx)
|
|||||||
hash_t *hashes_buf = hashes->hashes_buf;
|
hash_t *hashes_buf = hashes->hashes_buf;
|
||||||
u32 hashes_cnt = hashes->hashes_cnt;
|
u32 hashes_cnt = hashes->hashes_cnt;
|
||||||
|
|
||||||
// no solution for these special hash types (for instane because they use hashfile in output etc)
|
// no solution for these special hash types (for instance because they use hashfile in output etc)
|
||||||
|
|
||||||
hash_t hash_buf;
|
hash_t hash_buf;
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] =
|
|||||||
" --backend-ignore-hip | | Do not try to open HIP interface on startup |",
|
" --backend-ignore-hip | | Do not try to open HIP interface on startup |",
|
||||||
" --backend-ignore-metal | | Do not try to open Metal interface on startup |",
|
" --backend-ignore-metal | | Do not try to open Metal interface on startup |",
|
||||||
" --backend-ignore-opencl | | Do not try to open OpenCL interface on startup |",
|
" --backend-ignore-opencl | | Do not try to open OpenCL interface on startup |",
|
||||||
" -I, --backend-info | | Show system/evironment/backend API info | -I or -II",
|
" -I, --backend-info | | Show system/environment/backend API info | -I or -II",
|
||||||
" -d, --backend-devices | Str | Backend devices to use, separated with commas | -d 1",
|
" -d, --backend-devices | Str | Backend devices to use, separated with commas | -d 1",
|
||||||
" -Y, --backend-devices-virtual | Num | Spawn X virtual instances for each real device | -Y 8",
|
" -Y, --backend-devices-virtual | Num | Spawn X virtual instances for each real device | -Y 8",
|
||||||
" -D, --opencl-device-types | Str | OpenCL device-types to use, separated with commas | -D 1",
|
" -D, --opencl-device-types | Str | OpenCL device-types to use, separated with commas | -D 1",
|
||||||
|
@ -72,7 +72,7 @@ if ($version ne "\x02")
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
read_bytes ($file_handle, 1); # reservered/skip (normally should be just \x00)
|
read_bytes ($file_handle, 1); # reserved/skip (normally should be just \x00)
|
||||||
|
|
||||||
|
|
||||||
# Loop over the extensions until we got extension size 0
|
# Loop over the extensions until we got extension size 0
|
||||||
|
@ -379,7 +379,7 @@ chdir ($hashcat_path);
|
|||||||
|
|
||||||
for my $hash_type (@hash_types)
|
for my $hash_type (@hash_types)
|
||||||
{
|
{
|
||||||
# banchmark always in optimized mode with single hash and mask!
|
# benchmark always in optimized mode with single hash and mask!
|
||||||
|
|
||||||
my $mask = $default_mask;
|
my $mask = $default_mask;
|
||||||
|
|
||||||
@ -521,7 +521,7 @@ sub get_module
|
|||||||
{
|
{
|
||||||
if (($hash_type == 22000) || ($hash_type == 22001))
|
if (($hash_type == 22000) || ($hash_type == 22001))
|
||||||
{
|
{
|
||||||
## problem while in -m 2500 backward compatiblity mode
|
## problem while in -m 2500 backward compatibility mode
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -218,7 +218,7 @@ function init()
|
|||||||
echo "They will be fetched from ${luks_tests_url}"
|
echo "They will be fetched from ${luks_tests_url}"
|
||||||
echo "Note: this needs to be done only once and could take a little bit to download/extract."
|
echo "Note: this needs to be done only once and could take a little bit to download/extract."
|
||||||
echo "These luks test files are not shipped directly with hashcat because the file sizes are"
|
echo "These luks test files are not shipped directly with hashcat because the file sizes are"
|
||||||
echo "particularily large and therefore a bandwidth burner for users who do not run these tests."
|
echo "particularly large and therefore a bandwidth burner for users who do not run these tests."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# download:
|
# download:
|
||||||
|
@ -13,12 +13,12 @@ During `verify` tests the `module_verify_hash` function must parse the hash:pass
|
|||||||
|
|
||||||
**Important**: You have to call `pack_if_HEX_notation` as soon as you have parsed the password, or your tests will fail on passwords in the `$HEX[...]` format.
|
**Important**: You have to call `pack_if_HEX_notation` as soon as you have parsed the password, or your tests will fail on passwords in the `$HEX[...]` format.
|
||||||
|
|
||||||
If the algorithm has ambiguous hashes (e.g. partial case-insensetivity), the test module can provide an optional function `module_preprocess_hashlist`. It recieves a reference to the hashlist array and can unify the hashes in a way that guarantees the match with the output of `module_verify_hash`.
|
If the algorithm has ambiguous hashes (e.g. partial case-insensitivity), the test module can provide an optional function `module_preprocess_hashlist`. It receives a reference to the hashlist array and can unify the hashes in a way that guarantees the match with the output of `module_verify_hash`.
|
||||||
|
|
||||||
#### Examples ####
|
#### Examples ####
|
||||||
|
|
||||||
* For the most basic test modules, see [m00000.pm](m00000.pm) and [m00100.pm](m00100.pm)
|
* For the most basic test modules, see [m00000.pm](m00000.pm) and [m00100.pm](m00100.pm)
|
||||||
* For the basic salted hash tests, see [m00110.pm](m00110.pm) and [m00120.pm](m00120.pm)
|
* For the basic salted hash tests, see [m00110.pm](m00110.pm) and [m00120.pm](m00120.pm)
|
||||||
* For some sligthly more complex modules with PBKDF2 and encryption, see [m18400.pm](m18400.pm) and [m18600.pm](m18600.pm)
|
* For some slightly more complex modules with PBKDF2 and encryption, see [m18400.pm](m18400.pm) and [m18600.pm](m18600.pm)
|
||||||
* For a test module with hashlist preprocessing and a custom salt generation algorithm, see [m05600.pm](m05600.pm)
|
* For a test module with hashlist preprocessing and a custom salt generation algorithm, see [m05600.pm](m05600.pm)
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ use warnings;
|
|||||||
use Net::DNS::RR::NSEC3;
|
use Net::DNS::RR::NSEC3;
|
||||||
use Net::DNS::SEC;
|
use Net::DNS::SEC;
|
||||||
|
|
||||||
# we need to restict the pure password length for the test module to 63 bytes,
|
# we need to restrict the pure password length for the test module to 63 bytes,
|
||||||
# because we can't have any string (including the pass) of over 63 bytes without "."
|
# because we can't have any string (including the pass) of over 63 bytes without "."
|
||||||
|
|
||||||
# sub module_constraints { [[1, 256], [-1, -1], [1, 55], [-1, -1], [-1, -1]] }
|
# sub module_constraints { [[1, 256], [-1, -1], [1, 55], [-1, -1], [-1, -1]] }
|
||||||
|
@ -29,7 +29,7 @@ sub module_generate_hash
|
|||||||
my $word_buf_base64 = encode_base64 ($word, "");
|
my $word_buf_base64 = encode_base64 ($word, "");
|
||||||
my $salt_buf_base64 = encode_base64 ($salt, "");
|
my $salt_buf_base64 = encode_base64 ($salt, "");
|
||||||
|
|
||||||
# sanitize lenghs
|
# sanitize lengths
|
||||||
|
|
||||||
$out_len = int ($out_len);
|
$out_len = int ($out_len);
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ sub module_generate_hash
|
|||||||
|
|
||||||
my $dec_bin = $aes->decrypt ($data_bin);
|
my $dec_bin = $aes->decrypt ($data_bin);
|
||||||
|
|
||||||
## This is a ridiculous check of successfull decryption
|
## This is a ridiculous check of successful decryption
|
||||||
## There are no useable asn1 parsers for perl available
|
## There are no useable asn1 parsers for perl available
|
||||||
## We have to rely on a combination of padding check and pattern matching
|
## We have to rely on a combination of padding check and pattern matching
|
||||||
## The (minimum) 16 bit should be good enough for a unit test
|
## The (minimum) 16 bit should be good enough for a unit test
|
||||||
|
@ -56,7 +56,7 @@ sub module_generate_hash
|
|||||||
|
|
||||||
my $dec_bin = $aes->decrypt ($data_bin);
|
my $dec_bin = $aes->decrypt ($data_bin);
|
||||||
|
|
||||||
## This is a ridiculous check of successfull decryption
|
## This is a ridiculous check of successful decryption
|
||||||
## There are no useable asn1 parsers for perl available
|
## There are no useable asn1 parsers for perl available
|
||||||
## We have to rely on a combination of padding check and pattern matching
|
## We have to rely on a combination of padding check and pattern matching
|
||||||
## The (minimum) 16 bit should be good enough for a unit test
|
## The (minimum) 16 bit should be good enough for a unit test
|
||||||
|
@ -56,7 +56,7 @@ sub module_generate_hash
|
|||||||
|
|
||||||
my $dec_bin = $aes->decrypt ($data_bin);
|
my $dec_bin = $aes->decrypt ($data_bin);
|
||||||
|
|
||||||
## This is a ridiculous check of successfull decryption
|
## This is a ridiculous check of successful decryption
|
||||||
## There are no useable asn1 parsers for perl available
|
## There are no useable asn1 parsers for perl available
|
||||||
## We have to rely on a combination of padding check and pattern matching
|
## We have to rely on a combination of padding check and pattern matching
|
||||||
## The (minimum) 16 bit should be good enough for a unit test
|
## The (minimum) 16 bit should be good enough for a unit test
|
||||||
|
@ -58,7 +58,7 @@ sub module_generate_hash
|
|||||||
|
|
||||||
my $dec_bin = $aes->decrypt ($data_bin);
|
my $dec_bin = $aes->decrypt ($data_bin);
|
||||||
|
|
||||||
## This is a ridiculous check of successfull decryption
|
## This is a ridiculous check of successful decryption
|
||||||
## There are no useable asn1 parsers for perl available
|
## There are no useable asn1 parsers for perl available
|
||||||
## We have to rely on a combination of padding check and pattern matching
|
## We have to rely on a combination of padding check and pattern matching
|
||||||
## The (minimum) 16 bit should be good enough for a unit test
|
## The (minimum) 16 bit should be good enough for a unit test
|
||||||
|
@ -58,7 +58,7 @@ sub module_generate_hash
|
|||||||
|
|
||||||
my $dec_bin = $aes->decrypt ($data_bin);
|
my $dec_bin = $aes->decrypt ($data_bin);
|
||||||
|
|
||||||
## This is a ridiculous check of successfull decryption
|
## This is a ridiculous check of successful decryption
|
||||||
## There are no useable asn1 parsers for perl available
|
## There are no useable asn1 parsers for perl available
|
||||||
## We have to rely on a combination of padding check and pattern matching
|
## We have to rely on a combination of padding check and pattern matching
|
||||||
## The (minimum) 16 bit should be good enough for a unit test
|
## The (minimum) 16 bit should be good enough for a unit test
|
||||||
|
@ -80,7 +80,7 @@ sub module_generate_hash
|
|||||||
$dec_bin = $aes->decrypt ($data_bin);
|
$dec_bin = $aes->decrypt ($data_bin);
|
||||||
}
|
}
|
||||||
|
|
||||||
## This is a ridiculous check of successfull decryption
|
## This is a ridiculous check of successful decryption
|
||||||
## There are no useable asn1 parsers for perl available
|
## There are no useable asn1 parsers for perl available
|
||||||
## We have to rely on a combination of padding check and pattern matching
|
## We have to rely on a combination of padding check and pattern matching
|
||||||
## The (minimum) 16 bit should be good enough for a unit test
|
## The (minimum) 16 bit should be good enough for a unit test
|
||||||
|
@ -80,7 +80,7 @@ sub module_generate_hash
|
|||||||
$dec_bin = $aes->decrypt ($data_bin);
|
$dec_bin = $aes->decrypt ($data_bin);
|
||||||
}
|
}
|
||||||
|
|
||||||
## This is a ridiculous check of successfull decryption
|
## This is a ridiculous check of successful decryption
|
||||||
## There are no useable asn1 parsers for perl available
|
## There are no useable asn1 parsers for perl available
|
||||||
## We have to rely on a combination of padding check and pattern matching
|
## We have to rely on a combination of padding check and pattern matching
|
||||||
## The (minimum) 16 bit should be good enough for a unit test
|
## The (minimum) 16 bit should be good enough for a unit test
|
||||||
|
@ -99,7 +99,7 @@ sub pdf_compute_encryption_key_owner
|
|||||||
my $o_key;
|
my $o_key;
|
||||||
if ($R == 2)
|
if ($R == 2)
|
||||||
{
|
{
|
||||||
$o_key = substr ($o_digest, 0, 8); # rc4 key is always 5 for revision 2, but for 3 or greather is dependent on the value of the encryption dictionaries length entry
|
$o_key = substr ($o_digest, 0, 8); # rc4 key is always 5 for revision 2, but for 3 or greater is dependent on the value of the encryption dictionaries length entry
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -115,7 +115,7 @@ sub module_generate_hash
|
|||||||
|
|
||||||
my $salt_bin = pack ("H*", $salt);
|
my $salt_bin = pack ("H*", $salt);
|
||||||
|
|
||||||
my $seed = unpack ("N", $salt_bin); # or maybe "L" ? not enought example data to clarify
|
my $seed = unpack ("N", $salt_bin); # or maybe "L" ? not enough example data to clarify
|
||||||
|
|
||||||
my $digest = MurmurHash ($word, $seed);
|
my $digest = MurmurHash ($word, $seed);
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ sub module_generate_hash
|
|||||||
|
|
||||||
## convert_userpin_to_secretpin()
|
## convert_userpin_to_secretpin()
|
||||||
## this looks strange. what if the user password is outside 0x20 - 0x7f?
|
## this looks strange. what if the user password is outside 0x20 - 0x7f?
|
||||||
## from some testing, it seems MS prevents the user to use any non-ascii charcters
|
## from some testing, it seems MS prevents the user to use any non-ascii characters
|
||||||
|
|
||||||
my $stage1_hexpin = uc (encode ("UTF-16LE", unpack ("H*", $word)));
|
my $stage1_hexpin = uc (encode ("UTF-16LE", unpack ("H*", $word)));
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ sub module_constraints { [[52, 52], [-1, -1], [-1, -1], [-1, -1], [-1, -1]] }
|
|||||||
|
|
||||||
sub module_generate_hash
|
sub module_generate_hash
|
||||||
{
|
{
|
||||||
my $word = shift; # expecting valid WIF formated private key
|
my $word = shift; # expecting valid WIF formatted private key
|
||||||
|
|
||||||
my @is_valid_base58 = eval
|
my @is_valid_base58 = eval
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,7 @@ sub module_constraints { [[51, 51], [-1, -1], [-1, -1], [-1, -1], [-1, -1]] }
|
|||||||
|
|
||||||
sub module_generate_hash
|
sub module_generate_hash
|
||||||
{
|
{
|
||||||
my $word = shift; # expecting valid WIF formated private key
|
my $word = shift; # expecting valid WIF formatted private key
|
||||||
|
|
||||||
my @is_valid_base58 = eval
|
my @is_valid_base58 = eval
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,7 @@ sub module_constraints { [[52, 52], [-1, -1], [-1, -1], [-1, -1], [-1, -1]] }
|
|||||||
|
|
||||||
sub module_generate_hash
|
sub module_generate_hash
|
||||||
{
|
{
|
||||||
my $word = shift; # expecting valid WIF formated private key
|
my $word = shift; # expecting valid WIF formatted private key
|
||||||
|
|
||||||
my @is_valid_base58 = eval
|
my @is_valid_base58 = eval
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,7 @@ sub module_constraints { [[51, 51], [-1, -1], [-1, -1], [-1, -1], [-1, -1]] }
|
|||||||
|
|
||||||
sub module_generate_hash
|
sub module_generate_hash
|
||||||
{
|
{
|
||||||
my $word = shift; # expecting valid WIF formated private key
|
my $word = shift; # expecting valid WIF formatted private key
|
||||||
|
|
||||||
my @is_valid_base58 = eval
|
my @is_valid_base58 = eval
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,7 @@ sub module_constraints { [[52, 52], [-1, -1], [-1, -1], [-1, -1], [-1, -1]] }
|
|||||||
|
|
||||||
sub module_generate_hash
|
sub module_generate_hash
|
||||||
{
|
{
|
||||||
my $word = shift; # expecting valid WIF formated private key
|
my $word = shift; # expecting valid WIF formatted private key
|
||||||
|
|
||||||
my @is_valid_base58 = eval
|
my @is_valid_base58 = eval
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,7 @@ sub module_constraints { [[51, 51], [-1, -1], [-1, -1], [-1, -1], [-1, -1]] }
|
|||||||
|
|
||||||
sub module_generate_hash
|
sub module_generate_hash
|
||||||
{
|
{
|
||||||
my $word = shift; # expecting valid WIF formated private key
|
my $word = shift; # expecting valid WIF formatted private key
|
||||||
|
|
||||||
my @is_valid_base58 = eval
|
my @is_valid_base58 = eval
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user