/** * Author......: Jens Steube * License.....: MIT */ #ifndef TYPES_H #define TYPES_H typedef struct { uint salt_buf[16]; uint salt_buf_pc[8]; uint salt_len; uint salt_iter; uint salt_sign[2]; uint keccak_mdlen; uint truecrypt_mdlen; uint digests_cnt; uint digests_done; uint digests_offset; uint scrypt_N; uint scrypt_r; uint scrypt_p; uint scrypt_tmto; uint scrypt_phy; } salt_t; typedef struct { uint iv[4]; } rar5_t; typedef struct { int V; int R; int P; int enc_md; uint id_buf[8]; uint u_buf[32]; uint o_buf[32]; int id_len; int o_len; int u_len; uint rc4key[2]; uint rc4data[2]; } pdf_t; typedef struct { uint pke[25]; uint eapol[64]; int eapol_size; int keyver; } wpa_t; typedef struct { uint cry_master_buf[64]; uint ckey_buf[64]; uint public_key_buf[64]; uint cry_master_len; uint ckey_len; uint public_key_len; } bitcoin_wallet_t; typedef struct { uint salt_buf[30]; uint salt_len; uint esalt_buf[38]; uint esalt_len; } sip_t; typedef struct { uint data[384]; } androidfde_t; typedef struct { uint nr_buf[16]; uint nr_len; uint msg_buf[128]; uint msg_len; } ikepsk_t; typedef struct { uint user_len; uint domain_len; uint srvchall_len; uint clichall_len; uint userdomain_buf[64]; uint chall_buf[256]; } netntlm_t; typedef struct { uint user[16]; uint realm[16]; uint salt[32]; uint timestamp[16]; uint checksum[4]; } krb5pa_t; typedef struct { uint salt_buf[16]; uint data_buf[112]; uint keyfile_buf[16]; } tc_t; typedef struct { uint salt_buf[16]; } pbkdf2_md5_t; typedef struct { uint salt_buf[16]; } pbkdf2_sha1_t; typedef struct { uint salt_buf[16]; } pbkdf2_sha256_t; typedef struct { uint salt_buf[32]; } pbkdf2_sha512_t; typedef struct { u8 cipher[1040]; } agilekey_t; typedef struct { uint salt_buf[128]; uint salt_len; } rakp_t; typedef struct { uint data_len; uint data_buf[512]; } cloudkey_t; typedef struct { uint encryptedVerifier[4]; uint encryptedVerifierHash[5]; uint keySize; } office2007_t; typedef struct { uint encryptedVerifier[4]; uint encryptedVerifierHash[8]; } office2010_t; typedef struct { uint encryptedVerifier[4]; uint encryptedVerifierHash[8]; } office2013_t; typedef struct { uint version; uint encryptedVerifier[4]; uint encryptedVerifierHash[4]; uint rc4key[2]; } oldoffice01_t; typedef struct { uint version; uint encryptedVerifier[4]; uint encryptedVerifierHash[5]; uint rc4key[2]; } oldoffice34_t; typedef struct { uint P[256]; } scrypt_tmp_t; typedef struct { uint digest[4]; uint out[4]; } pdf14_tmp_t; typedef struct { union { uint dgst32[16]; u64 dgst64[8]; }; uint dgst_len; uint W_len; } pdf17l8_tmp_t; typedef struct { uint digest_buf[4]; } phpass_tmp_t; typedef struct { uint digest_buf[4]; } md5crypt_tmp_t; typedef struct { u64 l_alt_result[8]; u64 l_p_bytes[2]; u64 l_s_bytes[2]; } sha512crypt_tmp_t; typedef struct { uint alt_result[8]; uint p_bytes[4]; uint s_bytes[4]; } sha256crypt_tmp_t; typedef struct { uint ipad[5]; uint opad[5]; uint dgst[10]; uint out[10]; } wpa_tmp_t; typedef struct { u64 dgst[8]; } bitcoin_wallet_tmp_t; typedef struct { uint ipad[5]; uint opad[5]; uint dgst[5]; uint out[4]; } dcc2_tmp_t; typedef struct { uint E[18]; uint P[18]; uint S0[256]; uint S1[256]; uint S2[256]; uint S3[256]; } bcrypt_tmp_t; typedef struct { uint digest[2]; uint P[18]; uint S0[256]; uint S1[256]; uint S2[256]; uint S3[256]; } pwsafe2_tmp_t; typedef struct { uint digest_buf[8]; } pwsafe3_tmp_t; typedef struct { uint digest_buf[5]; } androidpin_tmp_t; typedef struct { uint ipad[5]; uint opad[5]; uint dgst[10]; uint out[10]; } androidfde_tmp_t; typedef struct { uint ipad[16]; uint opad[16]; uint dgst[64]; uint out[64]; } tc_tmp_t; typedef struct { u64 ipad[8]; u64 opad[8]; u64 dgst[32]; u64 out[32]; } tc64_tmp_t; typedef struct { uint ipad[5]; uint opad[5]; uint dgst[5]; uint out[5]; } agilekey_tmp_t; typedef struct { uint ipad[5]; uint opad[5]; uint dgst1[5]; uint out1[5]; uint dgst2[5]; uint out2[5]; } mywallet_tmp_t; typedef struct { uint ipad[5]; uint opad[5]; uint dgst[5]; uint out[5]; } sha1aix_tmp_t; typedef struct { uint ipad[8]; uint opad[8]; uint dgst[8]; uint out[8]; } sha256aix_tmp_t; typedef struct { u64 ipad[8]; u64 opad[8]; u64 dgst[8]; u64 out[8]; } sha512aix_tmp_t; typedef struct { uint ipad[8]; uint opad[8]; uint dgst[8]; uint out[8]; } lastpass_tmp_t; typedef struct { u64 digest_buf[8]; } drupal7_tmp_t; typedef struct { uint ipad[5]; uint opad[5]; uint dgst[5]; uint out[5]; } lotus8_tmp_t; typedef struct { uint out[5]; } office2007_tmp_t; typedef struct { uint out[5]; } office2010_tmp_t; typedef struct { u64 out[8]; } office2013_tmp_t; typedef struct { uint digest_buf[5]; } saph_sha1_tmp_t; typedef struct { u32 ipad[4]; u32 opad[4]; u32 dgst[32]; u32 out[32]; } pbkdf2_md5_tmp_t; typedef struct { u32 ipad[5]; u32 opad[5]; u32 dgst[32]; u32 out[32]; } pbkdf2_sha1_tmp_t; typedef struct { u32 ipad[8]; u32 opad[8]; u32 dgst[32]; u32 out[32]; } pbkdf2_sha256_tmp_t; typedef struct { u64 ipad[8]; u64 opad[8]; u64 dgst[16]; u64 out[16]; } pbkdf2_sha512_tmp_t; typedef struct { u64 out[8]; } ecryptfs_tmp_t; typedef struct { u64 ipad[8]; u64 opad[8]; u64 dgst[16]; u64 out[16]; } oraclet_tmp_t; typedef struct { uint block[16]; uint dgst[8]; uint block_len; uint final_len; } seven_zip_tmp_t; typedef struct { uint Kc[16]; uint Kd[16]; uint iv[2]; } bsdicrypt_tmp_t; typedef struct { uint dgst[17][5]; } rar3_tmp_t; typedef struct { uint user[16]; } cram_md5_t; typedef struct { uint iv_buf[4]; uint iv_len; uint salt_buf[4]; uint salt_len; uint crc; uint data_buf[96]; uint data_len; uint unpack_size; } seven_zip_t; typedef struct { u32 random[2]; u32 hash[5]; u32 salt[5]; // unused, but makes better valid check u32 iv[2]; // unused, but makes better valid check } psafe2_hdr; typedef struct { char *user_name; uint user_len; } user_t; typedef struct { user_t *user; char *orighash; } hashinfo_t; typedef struct { void *digest; salt_t *salt; void *esalt; int cracked; hashinfo_t *hash_info; } hash_t; typedef struct { uint key; u64 val; } hcstat_table_t; typedef struct { uint cs_buf[0x100]; uint cs_len; } cs_t; typedef struct { char essid[36]; u8 mac1[6]; u8 mac2[6]; u8 nonce1[32]; u8 nonce2[32]; u8 eapol[256]; int eapol_size; int keyver; u8 keymic[16]; } hccap_t; typedef struct { char signature[4]; u32 salt_buf[8]; u32 iterations; u32 hash_buf[8]; } psafe3_t; typedef struct { char plain_buf[256]; int plain_len; hash_t hash; } pot_t; typedef struct { u64 cnt; #ifdef _POSIX struct stat stat; #endif #ifdef _WIN struct __stat64 stat; #endif } dictstat_t; typedef struct { uint len; char buf[0x100]; } cpu_rule_t; typedef struct { uint cmds[0x100]; } kernel_rule_t; typedef struct { union { u8 hc4[4][ 64]; u32 hi4[4][ 16]; u64 hl4[4][ 8]; u8 hc2[2][128]; u32 hi2[2][ 32]; u64 hl2[2][ 16]; u8 hc1[1][256]; u32 hi1[1][ 64]; u64 hl1[1][ 32]; }; uint pw_len; uint alignment_placeholder_1; uint alignment_placeholder_2; uint alignment_placeholder_3; } pw_t; typedef struct { uint i; } bf_t; typedef struct { uint b[32]; } bs_word_t; typedef struct { uint i[8]; uint pw_len; } comb_t; typedef struct { pw_t pw_buf; uint cnt; } pw_cache_t; typedef struct { u32 version_bin; char cwd[256]; u32 pid; u32 dictpos; u32 maskpos; u64 words_cur; u32 argc; char **argv; } restore_data_t; typedef struct { char *file_name; long seek; time_t ctime; } outfile_data_t; typedef struct { char *buf; u32 incr; u32 avail; u32 cnt; u32 pos; } wl_data_t; typedef struct { uint bitmap_shift; uint collisions; } bitmap_result_t; #define CPT_BUF 0x20000 typedef struct { uint cracked; time_t timestamp; } cpt_t; /* typedef struct { uint plain_buf[16]; uint plain_len; } plain_t; */ typedef struct { uint gidvid; uint il_pos; } plain_t; typedef struct { uint word_buf[16]; } wordl_t; typedef struct { uint word_buf[1]; } wordr_t; #define RULES_MAX 256 #define PW_MIN 0 #define PW_MAX 54 #define PW_MAX1 (PW_MAX + 1) #define PW_DICTMAX 31 #define PW_DICTMAX1 (PW_DICTMAX + 1) struct __hc_device_param { cl_device_id device; cl_device_type device_type; uint device_id; uint platform_devices_id; // for mapping with hms devices uint skipped; uint sm_major; uint sm_minor; uint kernel_exec_timeout; uint device_processors; uint device_processor_cores; u64 device_maxmem_alloc; u64 device_global_mem; u32 device_maxclock_frequency; uint vector_width; uint kernel_threads; uint kernel_accel; uint kernel_power; // these both are based on their _user counterpart uint kernel_blocks; // but are modified by autotuner and used inside crack loops uint kernel_power_user; uint kernel_blocks_user; uint size_pws; uint size_tmps; uint size_hooks; uint size_root_css; uint size_markov_css; uint size_digests; uint size_salts; uint size_shown; uint size_results; uint size_plains; uint (*pw_add) (struct __hc_device_param *, const u8 *, const uint); void (*pw_transpose) (const pw_t *, pw_t *); FILE *combs_fp; comb_t *combs_buf; void *hooks_buf; pw_cache_t *pw_caches; pw_t *pws_buf; uint pws_cnt; u64 pw_cnt; u64 words_off; u64 words_done; uint *result; uint outerloop_pos; uint outerloop_left; uint innerloop_pos; uint innerloop_left; uint speed_pos; u64 speed_cnt[SPEED_CACHE]; float speed_ms[SPEED_CACHE]; hc_timer_t speed_rec[SPEED_CACHE]; hc_timer_t timer_speed; // device specific attributes starting char *device_name; char *device_name_chksum; char *device_version; char *driver_version; cl_uint vendor_id; cl_kernel kernel1; cl_kernel kernel12; cl_kernel kernel2; cl_kernel kernel23; cl_kernel kernel3; cl_kernel kernel_mp; cl_kernel kernel_mp_l; cl_kernel kernel_mp_r; cl_kernel kernel_amp; cl_kernel kernel_tb; cl_kernel kernel_tm; cl_kernel kernel_weak; cl_context context; cl_program program; cl_program program_mp; cl_program program_amp; cl_program program_weak; cl_command_queue command_queue; cl_mem d_pws_buf; cl_mem d_pws_amp_buf; cl_mem d_words_buf_l; cl_mem d_words_buf_r; cl_mem d_rules; cl_mem d_rules_c; cl_mem d_combs; cl_mem d_combs_c; cl_mem d_bfs; cl_mem d_bfs_c; cl_mem d_tm_c; cl_mem d_bitmap_s1_a; cl_mem d_bitmap_s1_b; cl_mem d_bitmap_s1_c; cl_mem d_bitmap_s1_d; cl_mem d_bitmap_s2_a; cl_mem d_bitmap_s2_b; cl_mem d_bitmap_s2_c; cl_mem d_bitmap_s2_d; cl_mem d_plain_bufs; cl_mem d_digests_buf; cl_mem d_digests_shown; cl_mem d_salt_bufs; cl_mem d_esalt_bufs; cl_mem d_bcrypt_bufs; cl_mem d_tmps; cl_mem d_hooks; cl_mem d_result; cl_mem d_scryptV_buf; cl_mem d_root_css_buf; cl_mem d_markov_css_buf; #define PARAMCNT 32 void *kernel_params[PARAMCNT]; void *kernel_params_mp[PARAMCNT]; void *kernel_params_mp_r[PARAMCNT]; void *kernel_params_mp_l[PARAMCNT]; void *kernel_params_amp[PARAMCNT]; void *kernel_params_tb[PARAMCNT]; void *kernel_params_tm[PARAMCNT]; u32 kernel_params_buf32[PARAMCNT]; u32 kernel_params_mp_buf32[PARAMCNT]; u64 kernel_params_mp_buf64[PARAMCNT]; u32 kernel_params_mp_r_buf32[PARAMCNT]; u64 kernel_params_mp_r_buf64[PARAMCNT]; u32 kernel_params_mp_l_buf32[PARAMCNT]; u64 kernel_params_mp_l_buf64[PARAMCNT]; u32 kernel_params_amp_buf32[PARAMCNT]; }; typedef struct __hc_device_param hc_device_param_t; #ifdef HAVE_HWMON typedef struct { union { #ifdef HAVE_ADL HM_ADAPTER_AMD amd; #endif #if defined(HAVE_NVML) || defined(HAVE_NVAPI) HM_ADAPTER_NV nv; #endif } adapter_index; int od_version; int fan_supported; // int busid; // used for CL_DEVICE_TOPOLOGY_AMD but broken for dual GPUs // int devid; // used for CL_DEVICE_TOPOLOGY_AMD but broken for dual GPUs } hm_attrs_t; #endif // HAVE_HWMON typedef struct { /** * threads */ uint devices_status; uint devices_cnt; uint devices_active; hc_device_param_t *devices_param; uint kernel_blocks_all; /** * attack specific */ uint wordlist_mode; uint hashlist_mode; uint hashlist_format; uint attack_mode; uint attack_kern; uint attack_exec; uint kernel_rules_cnt; kernel_rule_t *kernel_rules_buf; uint combs_mode; uint combs_cnt; uint bfs_cnt; uint css_cnt; cs_t *css_buf; cs_t *root_css_buf; cs_t *markov_css_buf; char *rule_buf_l; char *rule_buf_r; int rule_len_l; int rule_len_r; /** * hardware watchdog */ #ifdef HAVE_HWMON HM_LIB hm_dll_nv; HM_LIB hm_dll_amd; hm_attrs_t hm_device[DEVICES_MAX]; #endif /** * hashes */ uint digests_cnt; uint digests_done; uint digests_saved; void *digests_buf; uint *digests_shown; uint *digests_shown_tmp; uint salts_cnt; uint salts_done; salt_t *salts_buf; uint *salts_shown; void *esalts_buf; /** * logging */ uint logfile_disable; char *logfile; char *topid; char *subid; /** * crack-per-time */ cpt_t cpt_buf[CPT_BUF]; int cpt_pos; time_t cpt_start; u64 cpt_total; /** * user */ char *dictfile; char *dictfile2; char *mask; uint maskcnt; uint maskpos; char *session; char separator; char *hashfile; char *homedir; char *install_dir; char *profile_dir; char *session_dir; char *shared_dir; char *outfile; uint outfile_format; uint outfile_autohex; uint outfile_check_timer; char *eff_restore_file; char *new_restore_file; char *induction_directory; char *outfile_check_directory; uint loopback; char *loopback_file; uint restore; uint restore_timer; uint restore_disable; uint status; uint status_timer; uint status_automat; uint quiet; uint force; uint benchmark; uint runtime; uint remove; uint remove_timer; uint debug_mode; char *debug_file; uint hex_charset; uint hex_salt; uint hex_wordlist; uint pw_min; uint pw_max; float kernel_blocks_div; uint kernel_accel; uint kernel_loops; uint powertune_enable; uint scrypt_tmto; uint segment_size; char *truecrypt_keyfiles; uint hash_mode; uint hash_type; uint kern_type; uint opts_type; uint salt_type; uint esalt_size; uint isSalted; uint dgst_size; uint opti_type; uint dgst_pos0; uint dgst_pos1; uint dgst_pos2; uint dgst_pos3; #ifdef HAVE_HWMON uint gpu_temp_disable; uint gpu_temp_abort; uint gpu_temp_retain; #endif char **rp_files; uint rp_files_cnt; uint rp_gen; uint rp_gen_seed; FILE *pot_fp; /** * used for restore */ u64 skip; u64 limit; restore_data_t *rd; u64 checkpoint_cur_words; // used for the "stop at next checkpoint" feature /** * status, timer */ time_t runtime_start; time_t runtime_stop; time_t proc_start; time_t proc_stop; u64 words_cnt; u64 words_cur; u64 words_base; u64 *words_progress_done; // progress number of words done per salt u64 *words_progress_rejected; // progress number of words rejected per salt u64 *words_progress_restored; // progress number of words restored per salt hc_timer_t timer_running; // timer on current dict hc_timer_t timer_paused; // timer on current dict float ms_paused; // timer on current dict /** * hash_info and username */ hashinfo_t **hash_info; uint username; int (*sort_by_digest) (const void *, const void *); int (*parse_func) (char *, uint, hash_t *); } hc_global_data_t; extern hc_global_data_t data; #endif