diff --git a/OpenCL/m22400-pure.cl b/OpenCL/m22400-pure.cl index 8045986c5..4df18501a 100644 --- a/OpenCL/m22400-pure.cl +++ b/OpenCL/m22400-pure.cl @@ -26,7 +26,7 @@ typedef struct aescrypt typedef struct aescrypt_tmp { - u32 pass[144]; + u32 pass[80]; int len; } aescrypt_tmp_t; @@ -50,36 +50,13 @@ KERNEL_FQ void m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) s[2] = salt_bufs[SALT_POS].salt_buf[2]; s[3] = salt_bufs[SALT_POS].salt_buf[3]; - // convert password to utf16le: - const u32 pw_len = pws[gid].pw_len; - const u32 pw_len_utf16le = pw_len * 2; - - u32 w[144] = { 0 }; + u32 w[80] = { 0 }; - for (u32 i = 0, j = 0; i < 64; i += 4, j += 8) + for (u32 i = 0, j = 0; i < pw_len; i += 4, j += 1) { - u32 in[4]; - - in[0] = pws[gid].i[i + 0]; - in[1] = pws[gid].i[i + 1]; - in[2] = pws[gid].i[i + 2]; - in[3] = pws[gid].i[i + 3]; - - u32 out0[4]; - u32 out1[4]; - - make_utf16le_S (in, out0, out1); - - w[j + 0] = hc_swap32_S (out0[0]); - w[j + 1] = hc_swap32_S (out0[1]); - w[j + 2] = hc_swap32_S (out0[2]); - w[j + 3] = hc_swap32_S (out0[3]); - w[j + 4] = hc_swap32_S (out1[0]); - w[j + 5] = hc_swap32_S (out1[1]); - w[j + 6] = hc_swap32_S (out1[2]); - w[j + 7] = hc_swap32_S (out1[3]); + w[j] = hc_swap32_S (pws[gid].i[j]); } // sha256: @@ -88,7 +65,7 @@ KERNEL_FQ void m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) sha256_init (&ctx); sha256_update (&ctx, s, 32); - sha256_update (&ctx, w, pw_len_utf16le); + sha256_update (&ctx, w, pw_len); sha256_final (&ctx); // set tmps: @@ -110,7 +87,7 @@ KERNEL_FQ void m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) w[6] = ctx.h[6]; w[7] = ctx.h[7]; - const u32 final_len = 32 + pw_len_utf16le; + const u32 final_len = 32 + pw_len; const u32 idx_floor = (final_len / 64) * 16; const u32 idx_ceil = ((final_len & 63) >= 56) ? idx_floor + 16 : idx_floor; @@ -123,7 +100,7 @@ KERNEL_FQ void m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) #ifdef _unroll #pragma unroll #endif - for (u32 i = 0; i < 144; i++) + for (u32 i = 0; i < 80; i++) { tmps[gid].pass[i] = w[i]; } @@ -139,17 +116,17 @@ KERNEL_FQ void m22400_loop (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) // init - u32 w[144]; + u32 w[80]; #ifdef _unroll #pragma unroll #endif - for (u32 i = 0; i < 144; i++) + for (u32 i = 0; i < 80; i++) { w[i] = tmps[gid].pass[i]; } - const int pw_len = tmps[gid].len; + const int len = tmps[gid].len; // main loop @@ -174,7 +151,7 @@ KERNEL_FQ void m22400_loop (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) int left; int idx; - for (left = pw_len, idx = 0; left >= 56; left -= 64, idx += 16) + for (left = len, idx = 0; left >= 56; left -= 64, idx += 16) { w0[0] = w[idx + 0]; w0[1] = w[idx + 1]; diff --git a/src/modules/module_22400.c b/src/modules/module_22400.c index 7969e90f9..f0ee9e73b 100644 --- a/src/modules/module_22400.c +++ b/src/modules/module_22400.c @@ -20,7 +20,8 @@ static const u32 HASH_CATEGORY = HASH_CATEGORY_FDE; static const char *HASH_NAME = "AES Crypt (SHA256)"; static const u64 KERN_TYPE = 22400; static const u32 OPTI_TYPE = 0; -static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE; +static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_POST_AMP_UTF16LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$aescrypt$1*efc648908ca7ec727f37f3316dfd885c*eff5c87a35545406a57b56de57bd0554*3a66401271aec08cbd10cf2070332214093a33f36bd0dced4a4bb09fab817184*6a3c49fea0cafb19190dc4bdadb787e73b1df244c51780beef912598bd3bdf7e"; @@ -54,13 +55,20 @@ typedef struct aescrypt typedef struct aescrypt_tmp { - u32 pass[144]; + u32 pass[80]; int len; } aescrypt_tmp_t; static const char *SIGNATURE_AESCRYPT = "$aescrypt$"; +u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 pw_max = 128; + + return pw_max; +} + char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -338,7 +346,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_potfile_disable = MODULE_DEFAULT; module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; module_ctx->module_pwdump_column = MODULE_DEFAULT; - module_ctx->module_pw_max = MODULE_DEFAULT; + module_ctx->module_pw_max = module_pw_max; module_ctx->module_pw_min = MODULE_DEFAULT; module_ctx->module_salt_max = MODULE_DEFAULT; module_ctx->module_salt_min = MODULE_DEFAULT; diff --git a/tools/test_modules/m22400.pm b/tools/test_modules/m22400.pm index e9aa0318e..2455327d7 100644 --- a/tools/test_modules/m22400.pm +++ b/tools/test_modules/m22400.pm @@ -12,7 +12,7 @@ use Digest::SHA qw (sha256); use Digest::HMAC qw (hmac_hex); use Encode; -sub module_constraints { [[0, 256], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } +sub module_constraints { [[0, 128], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } sub module_generate_hash {