1
0
mirror of https://github.com/hashcat/hashcat.git synced 2025-07-20 05:28:19 +00:00

Fixed bug in module_constraints and kernel for hash-mode 7800

This commit is contained in:
Gabriele Gristina 2025-07-12 01:35:25 +02:00
parent 5af377ac4f
commit dbd41ca750
No known key found for this signature in database
GPG Key ID: 9F68B59298F311F0
3 changed files with 114 additions and 31 deletions

View File

@ -62,16 +62,12 @@ DECLSPEC void m07800m (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w
* salt
*/
u32 salt_buf[8];
u32 salt_buf[4];
salt_buf[0] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[0]);
salt_buf[1] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[1]);
salt_buf[2] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[2]);
salt_buf[3] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[3]);
salt_buf[4] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[4]);
salt_buf[5] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[5]);
salt_buf[6] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[6]);
salt_buf[7] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[7]);
const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len;
@ -84,10 +80,10 @@ DECLSPEC void m07800m (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w
s0[1] = salt_buf[1];
s0[2] = salt_buf[2];
s0[3] = salt_buf[3];
s1[0] = salt_buf[4];
s1[1] = salt_buf[5];
s1[2] = salt_buf[6];
s1[3] = salt_buf[7];
s1[0] = 0;
s1[1] = 0;
s1[2] = 0;
s1[3] = 0;
s2[0] = 0;
s2[1] = 0;
s2[2] = 0;
@ -206,8 +202,8 @@ DECLSPEC void m07800m (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w
final[ 5] = w1[1];
final[ 6] = w1[2];
final[ 7] = w1[3];
final[ 8] = 0;
final[ 9] = 0;
final[ 8] = w2[0];
final[ 9] = w2[1];
final[10] = 0;
final[11] = 0;
final[12] = 0;
@ -279,16 +275,12 @@ DECLSPEC void m07800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w
* salt
*/
u32 salt_buf[8];
u32 salt_buf[4];
salt_buf[0] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[0]);
salt_buf[1] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[1]);
salt_buf[2] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[2]);
salt_buf[3] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[3]);
salt_buf[4] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[4]);
salt_buf[5] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[5]);
salt_buf[6] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[6]);
salt_buf[7] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[7]);
const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len;
@ -301,10 +293,10 @@ DECLSPEC void m07800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w
s0[1] = salt_buf[1];
s0[2] = salt_buf[2];
s0[3] = salt_buf[3];
s1[0] = salt_buf[4];
s1[1] = salt_buf[5];
s1[2] = salt_buf[6];
s1[3] = salt_buf[7];
s1[0] = 0;
s1[1] = 0;
s1[2] = 0;
s1[3] = 0;
s2[0] = 0;
s2[1] = 0;
s2[2] = 0;
@ -435,8 +427,8 @@ DECLSPEC void m07800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w
final[ 5] = w1[1];
final[ 6] = w1[2];
final[ 7] = w1[3];
final[ 8] = 0;
final[ 9] = 0;
final[ 8] = w2[0];
final[ 9] = w2[1];
final[10] = 0;
final[11] = 0;
final[12] = 0;
@ -514,8 +506,6 @@ KERNEL_FQ KERNEL_FA void m07800_m04 (KERN_ATTR_BASIC ())
* modifier
*/
//const u64 lid = get_local_id (0);
u32 w0[4];
w0[0] = pws[gid].i[ 0];
@ -569,8 +559,6 @@ KERNEL_FQ KERNEL_FA void m07800_m08 (KERN_ATTR_BASIC ())
* modifier
*/
//const u64 lid = get_local_id (0);
u32 w0[4];
w0[0] = pws[gid].i[ 0];
@ -610,6 +598,55 @@ KERNEL_FQ KERNEL_FA void m07800_m08 (KERN_ATTR_BASIC ())
KERNEL_FQ KERNEL_FA void m07800_m16 (KERN_ATTR_BASIC ())
{
/**
* base
*/
const u64 lid = get_local_id (0);
const u64 gid = get_global_id (0);
const u64 lsz = get_local_size (0);
if (gid >= GID_CNT) return;
/**
* modifier
*/
u32 w0[4];
w0[0] = pws[gid].i[ 0];
w0[1] = pws[gid].i[ 1];
w0[2] = pws[gid].i[ 2];
w0[3] = pws[gid].i[ 3];
u32 w1[4];
w1[0] = pws[gid].i[ 4];
w1[1] = pws[gid].i[ 5];
w1[2] = pws[gid].i[ 6];
w1[3] = pws[gid].i[ 7];
u32 w2[4];
w2[0] = pws[gid].i[ 8];
w2[1] = pws[gid].i[ 9];
w2[2] = pws[gid].i[10];
w2[3] = pws[gid].i[11];
u32 w3[4];
w3[0] = pws[gid].i[12];
w3[1] = pws[gid].i[13];
w3[2] = 0;
w3[3] = 0;
const u32 pw_len = pws[gid].pw_len & 63;
/**
* main
*/
m07800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz);
}
KERNEL_FQ KERNEL_FA void m07800_s04 (KERN_ATTR_BASIC ())
@ -628,8 +665,6 @@ KERNEL_FQ KERNEL_FA void m07800_s04 (KERN_ATTR_BASIC ())
* modifier
*/
//const u64 lid = get_local_id (0);
u32 w0[4];
w0[0] = pws[gid].i[ 0];
@ -683,8 +718,6 @@ KERNEL_FQ KERNEL_FA void m07800_s08 (KERN_ATTR_BASIC ())
* modifier
*/
//const u64 lid = get_local_id (0);
u32 w0[4];
w0[0] = pws[gid].i[ 0];
@ -724,4 +757,53 @@ KERNEL_FQ KERNEL_FA void m07800_s08 (KERN_ATTR_BASIC ())
KERNEL_FQ KERNEL_FA void m07800_s16 (KERN_ATTR_BASIC ())
{
/**
* base
*/
const u64 lid = get_local_id (0);
const u64 gid = get_global_id (0);
const u64 lsz = get_local_size (0);
if (gid >= GID_CNT) return;
/**
* modifier
*/
u32 w0[4];
w0[0] = pws[gid].i[ 0];
w0[1] = pws[gid].i[ 1];
w0[2] = pws[gid].i[ 2];
w0[3] = pws[gid].i[ 3];
u32 w1[4];
w1[0] = pws[gid].i[ 4];
w1[1] = pws[gid].i[ 5];
w1[2] = pws[gid].i[ 6];
w1[3] = pws[gid].i[ 7];
u32 w2[4];
w2[0] = pws[gid].i[ 8];
w2[1] = pws[gid].i[ 9];
w2[2] = pws[gid].i[10];
w2[3] = pws[gid].i[11];
u32 w3[4];
w3[0] = pws[gid].i[12];
w3[1] = pws[gid].i[13];
w3[2] = 0;
w3[3] = 0;
const u32 pw_len = pws[gid].pw_len & 63;
/**
* main
*/
m07800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz);
}

View File

@ -91,6 +91,7 @@
- Added verification of token buffer length when using TOKEN_ATTR_FIXED_LENGTH
- Fixed a bug in all SCRYPT-based hash modes with Apple Metal
- Fixed buffer overflow on module_26600.c / module_hash_encode()
- Fixed bug in module_constraints and kernel for hash-mode 7800
- Fixed bug in 18400 module_hash_encode
- Fixed bug in 23800/unrar with Apple Silicon
- Fixed bug in 26900 module_hash_encode

View File

@ -10,7 +10,7 @@ use warnings;
use Digest::SHA qw (sha1 sha1_hex);
sub module_constraints { [[-1, -1], [-1, -1], [0, 55], [1, 12], [0, 55]] }
sub module_constraints { [[-1, -1], [-1, -1], [0, 40], [1, 12], [0, 55]] }
sub module_generate_hash
{