1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-11-26 01:50:10 +00:00

Add missing cipher cascade support for DiskCryptor

This commit is contained in:
jsteube 2019-04-08 19:33:24 +02:00
parent db9870fbb5
commit 8f62085ea4
3 changed files with 136 additions and 6 deletions

View File

@ -380,6 +380,8 @@ KERNEL_FQ void m19811_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt
if (gid >= gid_max) return; if (gid >= gid_max) return;
#define il_pos 0
u32 ukey1[8]; u32 ukey1[8];
ukey1[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[0])); ukey1[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[0]));
@ -402,8 +404,6 @@ KERNEL_FQ void m19811_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt
ukey2[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[7])); ukey2[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[7]));
ukey2[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[7])); ukey2[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[7]));
#define il_pos 0
if (dcrp_verify_header_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1) if (dcrp_verify_header_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{ {
if (atomic_inc (&hashes_shown[digests_offset]) == 0) if (atomic_inc (&hashes_shown[digests_offset]) == 0)

View File

@ -380,6 +380,8 @@ KERNEL_FQ void m19812_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt
if (gid >= gid_max) return; if (gid >= gid_max) return;
#define il_pos 0
u32 ukey1[8]; u32 ukey1[8];
ukey1[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[0])); ukey1[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[0]));
@ -402,8 +404,6 @@ KERNEL_FQ void m19812_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt
ukey2[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[7])); ukey2[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[7]));
ukey2[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[7])); ukey2[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[7]));
#define il_pos 0
if (dcrp_verify_header_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1) if (dcrp_verify_header_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{ {
if (atomic_inc (&hashes_shown[digests_offset]) == 0) if (atomic_inc (&hashes_shown[digests_offset]) == 0)
@ -427,4 +427,50 @@ KERNEL_FQ void m19812_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0); mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
} }
} }
u32 ukey3[8];
ukey3[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[ 8]));
ukey3[1] = hc_swap32_S (l32_from_64_S (tmps[gid].out[ 8]));
ukey3[2] = hc_swap32_S (h32_from_64_S (tmps[gid].out[ 9]));
ukey3[3] = hc_swap32_S (l32_from_64_S (tmps[gid].out[ 9]));
ukey3[4] = hc_swap32_S (h32_from_64_S (tmps[gid].out[10]));
ukey3[5] = hc_swap32_S (l32_from_64_S (tmps[gid].out[10]));
ukey3[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[11]));
ukey3[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[11]));
u32 ukey4[8];
ukey4[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[12]));
ukey4[1] = hc_swap32_S (l32_from_64_S (tmps[gid].out[12]));
ukey4[2] = hc_swap32_S (h32_from_64_S (tmps[gid].out[13]));
ukey4[3] = hc_swap32_S (l32_from_64_S (tmps[gid].out[13]));
ukey4[4] = hc_swap32_S (h32_from_64_S (tmps[gid].out[14]));
ukey4[5] = hc_swap32_S (l32_from_64_S (tmps[gid].out[14]));
ukey4[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[15]));
ukey4[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[15]));
if (dcrp_verify_header_aes_twofish (digests_buf[digests_offset].digest_buf, ukey1, ukey2, ukey3, ukey4, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{
if (atomic_inc (&hashes_shown[digests_offset]) == 0)
{
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
}
}
if (dcrp_verify_header_serpent_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, ukey3, ukey4, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{
if (atomic_inc (&hashes_shown[digests_offset]) == 0)
{
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
}
}
if (dcrp_verify_header_twofish_serpent (digests_buf[digests_offset].digest_buf, ukey1, ukey2, ukey3, ukey4) == 1)
{
if (atomic_inc (&hashes_shown[digests_offset]) == 0)
{
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
}
}
} }

View File

@ -380,6 +380,8 @@ KERNEL_FQ void m19813_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt
if (gid >= gid_max) return; if (gid >= gid_max) return;
#define il_pos 0
u32 ukey1[8]; u32 ukey1[8];
ukey1[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[0])); ukey1[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[0]));
@ -402,8 +404,6 @@ KERNEL_FQ void m19813_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt
ukey2[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[7])); ukey2[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[7]));
ukey2[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[7])); ukey2[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[7]));
#define il_pos 0
if (dcrp_verify_header_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1) if (dcrp_verify_header_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{ {
if (atomic_inc (&hashes_shown[digests_offset]) == 0) if (atomic_inc (&hashes_shown[digests_offset]) == 0)
@ -427,4 +427,88 @@ KERNEL_FQ void m19813_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0); mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
} }
} }
u32 ukey3[8];
ukey3[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[ 8]));
ukey3[1] = hc_swap32_S (l32_from_64_S (tmps[gid].out[ 8]));
ukey3[2] = hc_swap32_S (h32_from_64_S (tmps[gid].out[ 9]));
ukey3[3] = hc_swap32_S (l32_from_64_S (tmps[gid].out[ 9]));
ukey3[4] = hc_swap32_S (h32_from_64_S (tmps[gid].out[10]));
ukey3[5] = hc_swap32_S (l32_from_64_S (tmps[gid].out[10]));
ukey3[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[11]));
ukey3[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[11]));
u32 ukey4[8];
ukey4[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[12]));
ukey4[1] = hc_swap32_S (l32_from_64_S (tmps[gid].out[12]));
ukey4[2] = hc_swap32_S (h32_from_64_S (tmps[gid].out[13]));
ukey4[3] = hc_swap32_S (l32_from_64_S (tmps[gid].out[13]));
ukey4[4] = hc_swap32_S (h32_from_64_S (tmps[gid].out[14]));
ukey4[5] = hc_swap32_S (l32_from_64_S (tmps[gid].out[14]));
ukey4[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[15]));
ukey4[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[15]));
if (dcrp_verify_header_aes_twofish (digests_buf[digests_offset].digest_buf, ukey1, ukey2, ukey3, ukey4, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{
if (atomic_inc (&hashes_shown[digests_offset]) == 0)
{
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
}
}
if (dcrp_verify_header_serpent_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, ukey3, ukey4, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{
if (atomic_inc (&hashes_shown[digests_offset]) == 0)
{
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
}
}
if (dcrp_verify_header_twofish_serpent (digests_buf[digests_offset].digest_buf, ukey1, ukey2, ukey3, ukey4) == 1)
{
if (atomic_inc (&hashes_shown[digests_offset]) == 0)
{
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
}
}
u32 ukey5[8];
ukey5[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[16]));
ukey5[1] = hc_swap32_S (l32_from_64_S (tmps[gid].out[16]));
ukey5[2] = hc_swap32_S (h32_from_64_S (tmps[gid].out[17]));
ukey5[3] = hc_swap32_S (l32_from_64_S (tmps[gid].out[17]));
ukey5[4] = hc_swap32_S (h32_from_64_S (tmps[gid].out[18]));
ukey5[5] = hc_swap32_S (l32_from_64_S (tmps[gid].out[18]));
ukey5[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[19]));
ukey5[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[19]));
u32 ukey6[8];
ukey6[0] = hc_swap32_S (h32_from_64_S (tmps[gid].out[20]));
ukey6[1] = hc_swap32_S (l32_from_64_S (tmps[gid].out[20]));
ukey6[2] = hc_swap32_S (h32_from_64_S (tmps[gid].out[21]));
ukey6[3] = hc_swap32_S (l32_from_64_S (tmps[gid].out[21]));
ukey6[4] = hc_swap32_S (h32_from_64_S (tmps[gid].out[22]));
ukey6[5] = hc_swap32_S (l32_from_64_S (tmps[gid].out[22]));
ukey6[6] = hc_swap32_S (h32_from_64_S (tmps[gid].out[23]));
ukey6[7] = hc_swap32_S (l32_from_64_S (tmps[gid].out[23]));
if (dcrp_verify_header_aes_twofish_serpent (digests_buf[digests_offset].digest_buf, ukey1, ukey2, ukey3, ukey4, ukey5, ukey6, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{
if (atomic_inc (&hashes_shown[digests_offset]) == 0)
{
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
}
}
if (dcrp_verify_header_serpent_twofish_aes (digests_buf[digests_offset].digest_buf, ukey1, ukey2, ukey3, ukey4, ukey5, ukey6, s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4) == 1)
{
if (atomic_inc (&hashes_shown[digests_offset]) == 0)
{
mark_hash (plains_buf, d_return_buf, salt_pos, digests_cnt, 0, digests_offset, gid, il_pos, 0, 0);
}
}
} }