void potfile_write_append (hashcat_ctx_t *hashcat_ctx, const char *out_buf, u8 *plain_ptr, unsigned int plain_len) { const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const potfile_ctx_t *potfile_ctx = hashcat_ctx->potfile_ctx; const user_options_t *user_options = hashcat_ctx->user_options; if (potfile_ctx->enabled == false) return; u8 *tmp_buf = potfile_ctx->tmp_buf; int tmp_len = 0; if (1) { const size_t out_len = strlen (out_buf); memcpy (tmp_buf + tmp_len, out_buf, out_len); tmp_len += out_len; tmp_buf[tmp_len] = hashconfig->separator; tmp_len += 1; } if (1) { const bool always_ascii = (hashconfig->hash_type & OPTS_TYPE_PT_ALWAYS_ASCII) ? true : false; if ((user_options->outfile_autohex == true) && (need_hexify (plain_ptr, plain_len, hashconfig->separator, always_ascii) == true)) { tmp_buf[tmp_len++] = '$'; tmp_buf[tmp_len++] = 'H'; tmp_buf[tmp_len++] = 'E'; tmp_buf[tmp_len++] = 'X'; tmp_buf[tmp_len++] = '['; exec_hexify ((const u8 *) plain_ptr, plain_len, tmp_buf + tmp_len); tmp_len += plain_len * 2; tmp_buf[tmp_len++] = ']'; } else { memcpy (tmp_buf + tmp_len, plain_ptr, plain_len); tmp_len += plain_len; } } tmp_buf[tmp_len] = 0; lock_file (potfile_ctx->fp); fprintf (potfile_ctx->fp, "%s" EOL, tmp_buf); fflush (potfile_ctx->fp); if (unlock_file (potfile_ctx->fp)) { event_log_error (hashcat_ctx, "%s: Failed to unlock file.", potfile_ctx->filename); } }
int outfile_write (hashcat_ctx_t *hashcat_ctx, const char *out_buf, const unsigned char *plain_ptr, const u32 plain_len, const u64 crackpos, const unsigned char *username, const u32 user_len, char tmp_buf[HCBUFSIZ_LARGE]) { const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const outfile_ctx_t *outfile_ctx = hashcat_ctx->outfile_ctx; const user_options_t *user_options = hashcat_ctx->user_options; int tmp_len = 0; if (user_len > 0) { if (username != NULL) { memcpy (tmp_buf + tmp_len, username, user_len); tmp_len += user_len; if (outfile_ctx->outfile_format & (OUTFILE_FMT_HASH | OUTFILE_FMT_PLAIN | OUTFILE_FMT_HEXPLAIN | OUTFILE_FMT_CRACKPOS)) { tmp_buf[tmp_len] = hashconfig->separator; tmp_len += 1; } } } if (outfile_ctx->outfile_format & OUTFILE_FMT_HASH) { const size_t out_len = strlen (out_buf); memcpy (tmp_buf + tmp_len, out_buf, out_len); tmp_len += out_len; if (outfile_ctx->outfile_format & (OUTFILE_FMT_PLAIN | OUTFILE_FMT_HEXPLAIN | OUTFILE_FMT_CRACKPOS)) { tmp_buf[tmp_len] = hashconfig->separator; tmp_len += 1; } } if (outfile_ctx->outfile_format & OUTFILE_FMT_PLAIN) { const bool always_ascii = (hashconfig->hash_type & OPTS_TYPE_PT_ALWAYS_ASCII) ? true : false; if ((user_options->outfile_autohex == true) && (need_hexify (plain_ptr, plain_len, always_ascii) == true)) { tmp_buf[tmp_len++] = '$'; tmp_buf[tmp_len++] = 'H'; tmp_buf[tmp_len++] = 'E'; tmp_buf[tmp_len++] = 'X'; tmp_buf[tmp_len++] = '['; exec_hexify ((const u8 *) plain_ptr, plain_len, (u8 *) tmp_buf + tmp_len); tmp_len += plain_len * 2; tmp_buf[tmp_len++] = ']'; } else { memcpy (tmp_buf + tmp_len, plain_ptr, plain_len); tmp_len += plain_len; } if (outfile_ctx->outfile_format & (OUTFILE_FMT_HEXPLAIN | OUTFILE_FMT_CRACKPOS)) { tmp_buf[tmp_len] = hashconfig->separator; tmp_len += 1; } } if (outfile_ctx->outfile_format & OUTFILE_FMT_HEXPLAIN) { for (u32 i = 0; i < plain_len; i++) { exec_hexify ((const u8 *) plain_ptr, plain_len, (u8 *) tmp_buf + tmp_len); tmp_len += 2; } if (outfile_ctx->outfile_format & (OUTFILE_FMT_CRACKPOS)) { tmp_buf[tmp_len] = hashconfig->separator; tmp_len += 1; } } if (outfile_ctx->outfile_format & OUTFILE_FMT_CRACKPOS) { sprintf (tmp_buf + tmp_len, "%" PRIu64, crackpos); } tmp_buf[tmp_len] = 0; if (outfile_ctx->fp != NULL) { fwrite (tmp_buf, tmp_len, 1, outfile_ctx->fp); fwrite (EOL, strlen (EOL), 1, outfile_ctx->fp); } return tmp_len; }
int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) { const wpa_pmkid_t *wpa_pmkid = (const wpa_pmkid_t *) esalt_buf; int line_len = 0; if (wpa_pmkid->essid_len) { if (need_hexify ((const u8 *) wpa_pmkid->essid_buf, wpa_pmkid->essid_len, ':', 0) == true) { char tmp_buf[128]; int tmp_len = 0; tmp_buf[tmp_len++] = '$'; tmp_buf[tmp_len++] = 'H'; tmp_buf[tmp_len++] = 'E'; tmp_buf[tmp_len++] = 'X'; tmp_buf[tmp_len++] = '['; exec_hexify ((const u8 *) wpa_pmkid->essid_buf, wpa_pmkid->essid_len, (u8 *) tmp_buf + tmp_len); tmp_len += wpa_pmkid->essid_len * 2; tmp_buf[tmp_len++] = ']'; tmp_buf[tmp_len++] = 0; line_len = snprintf (line_buf, line_size, "%02x%02x%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x:%s", wpa_pmkid->orig_mac_ap[0], wpa_pmkid->orig_mac_ap[1], wpa_pmkid->orig_mac_ap[2], wpa_pmkid->orig_mac_ap[3], wpa_pmkid->orig_mac_ap[4], wpa_pmkid->orig_mac_ap[5], wpa_pmkid->orig_mac_sta[0], wpa_pmkid->orig_mac_sta[1], wpa_pmkid->orig_mac_sta[2], wpa_pmkid->orig_mac_sta[3], wpa_pmkid->orig_mac_sta[4], wpa_pmkid->orig_mac_sta[5], tmp_buf); } else { line_len = snprintf (line_buf, line_size, "%02x%02x%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x:%s", wpa_pmkid->orig_mac_ap[0], wpa_pmkid->orig_mac_ap[1], wpa_pmkid->orig_mac_ap[2], wpa_pmkid->orig_mac_ap[3], wpa_pmkid->orig_mac_ap[4], wpa_pmkid->orig_mac_ap[5], wpa_pmkid->orig_mac_sta[0], wpa_pmkid->orig_mac_sta[1], wpa_pmkid->orig_mac_sta[2], wpa_pmkid->orig_mac_sta[3], wpa_pmkid->orig_mac_sta[4], wpa_pmkid->orig_mac_sta[5], (const char *) wpa_pmkid->essid_buf); } } else { line_len = snprintf (line_buf, line_size, "%02x%02x%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x", wpa_pmkid->orig_mac_ap[0], wpa_pmkid->orig_mac_ap[1], wpa_pmkid->orig_mac_ap[2], wpa_pmkid->orig_mac_ap[3], wpa_pmkid->orig_mac_ap[4], wpa_pmkid->orig_mac_ap[5], wpa_pmkid->orig_mac_sta[0], wpa_pmkid->orig_mac_sta[1], wpa_pmkid->orig_mac_sta[2], wpa_pmkid->orig_mac_sta[3], wpa_pmkid->orig_mac_sta[4], wpa_pmkid->orig_mac_sta[5]); } return line_len; }
void example_hashes (hashcat_ctx_t *hashcat_ctx) { user_options_t *user_options = hashcat_ctx->user_options; if (user_options->hash_mode_chgd == true) { const int rc = hashconfig_init (hashcat_ctx); if (rc == 0) { hashconfig_t *hashconfig = hashcat_ctx->hashconfig; event_log_info (hashcat_ctx, "MODE: %u", hashconfig->hash_mode); event_log_info (hashcat_ctx, "TYPE: %s", strhashtype (hashconfig->hash_mode)); if ((hashconfig->st_hash != NULL) && (hashconfig->st_pass != NULL)) { event_log_info (hashcat_ctx, "HASH: %s", hashconfig->st_hash); if (need_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), user_options->separator, 0)) { char tmp_buf[HCBUFSIZ_LARGE]; int tmp_len = 0; tmp_buf[tmp_len++] = '$'; tmp_buf[tmp_len++] = 'H'; tmp_buf[tmp_len++] = 'E'; tmp_buf[tmp_len++] = 'X'; tmp_buf[tmp_len++] = '['; exec_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), (u8 *) tmp_buf + tmp_len); tmp_len += strlen (hashconfig->st_pass) * 2; tmp_buf[tmp_len++] = ']'; tmp_buf[tmp_len++] = 0; event_log_info (hashcat_ctx, "PASS: %s", tmp_buf); } else { event_log_info (hashcat_ctx, "PASS: %s", hashconfig->st_pass); } } else { event_log_info (hashcat_ctx, "HASH: not stored"); event_log_info (hashcat_ctx, "PASS: not stored"); } event_log_info (hashcat_ctx, NULL); } hashconfig_destroy (hashcat_ctx); } else { for (int i = 0; i < 100000; i++) { user_options->hash_mode = i; const int rc = hashconfig_init (hashcat_ctx); if (rc == 0) { hashconfig_t *hashconfig = hashcat_ctx->hashconfig; event_log_info (hashcat_ctx, "MODE: %u", hashconfig->hash_mode); event_log_info (hashcat_ctx, "TYPE: %s", strhashtype (hashconfig->hash_mode)); if ((hashconfig->st_hash != NULL) && (hashconfig->st_pass != NULL)) { event_log_info (hashcat_ctx, "HASH: %s", hashconfig->st_hash); if (need_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), user_options->separator, 0)) { char tmp_buf[HCBUFSIZ_LARGE]; int tmp_len = 0; tmp_buf[tmp_len++] = '$'; tmp_buf[tmp_len++] = 'H'; tmp_buf[tmp_len++] = 'E'; tmp_buf[tmp_len++] = 'X'; tmp_buf[tmp_len++] = '['; exec_hexify ((const u8 *) hashconfig->st_pass, strlen (hashconfig->st_pass), (u8 *) tmp_buf + tmp_len); tmp_len += strlen (hashconfig->st_pass) * 2; tmp_buf[tmp_len++] = ']'; tmp_buf[tmp_len++] = 0; event_log_info (hashcat_ctx, "PASS: %s", tmp_buf); } else { event_log_info (hashcat_ctx, "PASS: %s", hashconfig->st_pass); } } else { event_log_info (hashcat_ctx, "HASH: not stored"); event_log_info (hashcat_ctx, "PASS: not stored"); } event_log_info (hashcat_ctx, NULL); } hashconfig_destroy (hashcat_ctx); } } }