1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-22 22:58:30 +00:00

Print warnings in yellow and errors in red

This commit is contained in:
jsteube 2016-10-15 16:12:20 +02:00
parent 91979bff69
commit 694de36694
4 changed files with 146 additions and 124 deletions

View File

@ -75,6 +75,14 @@ typedef struct stat64 hc_stat;
// enums // enums
typedef enum loglevel
{
LOGLEVEL_INFO = 0,
LOGLEVEL_WARNING = 1,
LOGLEVEL_ERROR = 2,
} loglevel_t;
typedef enum event_identifier typedef enum event_identifier
{ {
EVENT_LOG_INFO = 0x00000001, EVENT_LOG_INFO = 0x00000001,

View File

@ -19,7 +19,27 @@
#include "interface.h" #include "interface.h"
#include "event.h" #include "event.h"
static void main_log (hashcat_ctx_t *hashcat_ctx, FILE *fp) static void main_log_clear_line (MAYBE_UNUSED const int prev_len, MAYBE_UNUSED FILE *fp)
{
#if defined (_WIN)
fputc ('\r', fp);
for (int i = 0; i < prev_len; i++)
{
fputc (' ', fp);
}
fputc ('\r', fp);
#else
printf ("\033[2K\r");
#endif
}
static void main_log (hashcat_ctx_t *hashcat_ctx, FILE *fp, const int loglevel)
{ {
event_ctx_t *event_ctx = hashcat_ctx->event_ctx; event_ctx_t *event_ctx = hashcat_ctx->event_ctx;
@ -33,22 +53,7 @@ static void main_log (hashcat_ctx_t *hashcat_ctx, FILE *fp)
if (prev_len) if (prev_len)
{ {
#if defined (_WIN) main_log_clear_line (prev_len, fp);
fputc ('\r', fp);
for (int i = 0; i < prev_len; i++)
{
fputc (' ', fp);
}
fputc ('\r', fp);
#else
printf ("\033[2K\r");
#endif
} }
if (msg_newline == true) if (msg_newline == true)
@ -60,13 +65,67 @@ static void main_log (hashcat_ctx_t *hashcat_ctx, FILE *fp)
event_ctx->prev_len = msg_len; event_ctx->prev_len = msg_len;
} }
// color stuff pre
#if defined (_WIN)
HANDLE hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO con_info;
GetConsoleScreenBufferInfo (hConsole, &con_info);
const int orig = con_info.wAttributes;
switch (loglevel)
{
case LOGLEVEL_INFO: break;
case LOGLEVEL_WARNING: SetConsoleTextAttribute (hConsole, 6); break;
case LOGLEVEL_ERROR: SetConsoleTextAttribute (hConsole, FOREGROUND_RED); break;
}
#else
switch (loglevel)
{
case LOGLEVEL_INFO: break;
case LOGLEVEL_WARNING: fwrite ("\033[33m", 5, 1, fp); break;
case LOGLEVEL_ERROR: fwrite ("\033[31m", 5, 1, fp); break;
}
#endif
// finally, print // finally, print
fwrite (msg_buf, msg_len, 1, fp); fwrite (msg_buf, msg_len, 1, fp);
// color stuff post
#if defined (_WIN)
switch (loglevel)
{
case LOGLEVEL_INFO: break;
case LOGLEVEL_WARNING: SetConsoleTextAttribute (hConsole, orig); break;
case LOGLEVEL_ERROR: SetConsoleTextAttribute (hConsole, orig); break;
}
#else
switch (loglevel)
{
case LOGLEVEL_INFO: break;
case LOGLEVEL_WARNING: fwrite ("\033[0m", 4, 1, fp); break;
case LOGLEVEL_ERROR: fwrite ("\033[0m", 4, 1, fp); break;
}
#endif
// eventual newline
if (msg_newline == true) if (msg_newline == true)
{ {
fwrite (EOL, strlen (EOL), 1, fp); fwrite (EOL, strlen (EOL), 1, fp);
// on error, add another newline
if (loglevel == LOGLEVEL_ERROR)
{
fwrite (EOL, strlen (EOL), 1, fp);
}
} }
fflush (fp); fflush (fp);
@ -74,28 +133,17 @@ static void main_log (hashcat_ctx_t *hashcat_ctx, FILE *fp)
static void main_log_info (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) static void main_log_info (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
{ {
main_log (hashcat_ctx, stdout); main_log (hashcat_ctx, stdout, LOGLEVEL_INFO);
} }
static void main_log_warning (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) static void main_log_warning (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
{ {
static const char PREFIX_WARNING[] = "WARNING: "; main_log (hashcat_ctx, stdout, LOGLEVEL_WARNING);
fwrite (PREFIX_WARNING, strlen (PREFIX_WARNING), 1, stdout);
main_log (hashcat_ctx, stdout);
} }
static void main_log_error (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) static void main_log_error (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
{ {
static const char PREFIX_ERROR[] = "ERROR: "; main_log (hashcat_ctx, stderr, LOGLEVEL_ERROR);
fwrite (EOL, strlen (EOL), 1, stderr);
fwrite (PREFIX_ERROR, strlen (PREFIX_ERROR), 1, stderr);
main_log (hashcat_ctx, stderr);
fwrite (EOL, strlen (EOL), 1, stderr);
} }
static void main_welcome_screen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) static void main_welcome_screen (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
@ -203,8 +251,19 @@ static void main_cracker_starting (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB
static void main_cracker_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) static void main_cracker_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len)
{ {
const hashes_t *hashes = hashcat_ctx->hashes; const hashes_t *hashes = hashcat_ctx->hashes;
const user_options_t *user_options = hashcat_ctx->user_options; const user_options_t *user_options = hashcat_ctx->user_options;
const user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra;
// if we had a prompt, clear it
if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK))
{
if ((user_options->quiet == false) && (user_options->benchmark == false) && (user_options->speed_only == false))
{
clear_prompt ();
}
}
// print final status // print final status
@ -219,25 +278,11 @@ static void main_cracker_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYB
} }
else else
{ {
if (user_options->quiet == false) if (hashes->digests_saved != hashes->digests_done) event_log_info (hashcat_ctx, "");
{
clear_prompt ();
if (hashes->digests_saved != hashes->digests_done) event_log_info (hashcat_ctx, ""); status_display (hashcat_ctx);
status_display (hashcat_ctx); event_log_info (hashcat_ctx, "");
event_log_info (hashcat_ctx, "");
}
else
{
if (user_options->status == true)
{
status_display (hashcat_ctx);
event_log_info (hashcat_ctx, "");
}
}
} }
} }

View File

@ -157,7 +157,9 @@ static int monitor (hashcat_ctx_t *hashcat_ctx)
if (temperature > (int) user_options->gpu_temp_abort) if (temperature > (int) user_options->gpu_temp_abort)
{ {
event_log_error (hashcat_ctx, "Temperature limit on GPU %d reached, aborting...", device_id + 1); if (user_options->quiet == false) clear_prompt ();
event_log_error (hashcat_ctx, "Temperature limit on GPU #%u reached, aborting...", device_id + 1);
myabort (hashcat_ctx); myabort (hashcat_ctx);
@ -271,6 +273,8 @@ static int monitor (hashcat_ctx_t *hashcat_ctx)
{ {
if (user_options->benchmark == false) if (user_options->benchmark == false)
{ {
if (user_options->quiet == false) clear_prompt ();
if (user_options->quiet == false) event_log_info (hashcat_ctx, "NOTE: Runtime limit reached, aborting..."); if (user_options->quiet == false) event_log_info (hashcat_ctx, "NOTE: Runtime limit reached, aborting...");
} }
@ -307,8 +311,6 @@ static int monitor (hashcat_ctx_t *hashcat_ctx)
if (user_options->quiet == false) clear_prompt (); if (user_options->quiet == false) clear_prompt ();
//if (user_options->quiet == false) event_log_info (hashcat_ctx, "");
status_display (hashcat_ctx); status_display (hashcat_ctx);
if (user_options->quiet == false) event_log_info (hashcat_ctx, ""); if (user_options->quiet == false) event_log_info (hashcat_ctx, "");

View File

@ -304,17 +304,17 @@ int ocl_init (hashcat_ctx_t *hashcat_ctx)
if (ocl->lib == NULL) if (ocl->lib == NULL)
{ {
event_log_error (hashcat_ctx, event_log_error (hashcat_ctx,
"Can't find OpenCL ICD loader library" EOL "Can't find an OpenCL ICD loader library" EOL
"" EOL "" EOL
#if defined (__linux__) #if defined (__linux__)
"You're probably missing the \"ocl-icd-libopencl1\" package (Debian/Ubuntu)" EOL "You're probably missing the \"ocl-icd-libopencl1\" package (Debian/Ubuntu)" EOL
"Run: sudo apt-get install ocl-icd-libopencl1" EOL "Run: sudo apt-get install ocl-icd-libopencl1" EOL
"" EOL "" EOL
#elif defined (_WIN) #elif defined (_WIN)
"You're probably missing the OpenCL runtime installation" EOL "You're probably missing the OpenCL runtime installation" EOL
"* AMD users require AMD drivers 14.9 or later (recommended 15.12 or later)" EOL "* AMD users require AMD drivers 14.9 or later (recommended 15.12 exact)" EOL
"* Intel users require Intel OpenCL Runtime 14.2 or later (recommended 15.1 or later)" EOL "* Intel users require Intel OpenCL Runtime 14.2 or later (recommended 16.1 or later)" EOL
"* NVidia users require NVidia drivers 346.59 or later (recommended 361.x or later)" EOL "* NVidia users require NVidia drivers 346.59 or later (recommended 367.27 or later)" EOL
"" EOL "" EOL
#endif #endif
); );
@ -1958,15 +1958,13 @@ int opencl_ctx_init (hashcat_ctx_t *hashcat_ctx)
if (platforms_cnt == 0) if (platforms_cnt == 0)
{ {
event_log_error (hashcat_ctx, event_log_error (hashcat_ctx, "ATTENTION! No OpenCL compatible platform found");
"No OpenCL compatible platform found" EOL event_log_error (hashcat_ctx, "");
"" EOL event_log_error (hashcat_ctx, "You're probably missing the OpenCL runtime installation");
"You're probably missing the OpenCL runtime installation" EOL event_log_error (hashcat_ctx, "* AMD users require AMD drivers 14.9 or later (recommended 15.12 or later)");
"* AMD users require AMD drivers 14.9 or later (recommended 15.12 or later)" EOL event_log_error (hashcat_ctx, "* Intel users require Intel OpenCL Runtime 14.2 or later (recommended 15.1 or later)");
"* Intel users require Intel OpenCL Runtime 14.2 or later (recommended 15.1 or later)" EOL event_log_error (hashcat_ctx, "* NVidia users require NVidia drivers 346.59 or later (recommended 361.x or later)");
"* NVidia users require NVidia drivers 346.59 or later (recommended 361.x or later)" EOL event_log_error (hashcat_ctx, "");
"" EOL
);
return -1; return -1;
} }
@ -2506,9 +2504,8 @@ int opencl_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
{ {
if (user_options->force == 0) if (user_options->force == 0)
{ {
event_log_warning (hashcat_ctx, event_log_warning (hashcat_ctx, "Device #%u: Not a native Intel OpenCL runtime, expect massive speed loss", device_id + 1);
"Device #%u: Not a native Intel OpenCL runtime, expect massive speed loss" EOL event_log_warning (hashcat_ctx, " You can use --force to override this but do not post error reports if you do so");
" You can use --force to override this but do not post error reports if you do so", device_id + 1);
device_param->skipped = 1; device_param->skipped = 1;
} }
@ -2702,29 +2699,27 @@ int opencl_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
if (catalyst_broken == 1) if (catalyst_broken == 1)
{ {
event_log_error (hashcat_ctx, event_log_error (hashcat_ctx, "The Catalyst driver installed on your system is known to be broken!");
"The AMD driver installed on your system is known to be broken!" EOL event_log_error (hashcat_ctx, "");
"It passes over cracked hashes and will not report them as cracked" EOL event_log_error (hashcat_ctx, "It passes over cracked hashes and will not report them as cracked");
"You are STRONGLY encouraged not to use it" EOL event_log_error (hashcat_ctx, "You are STRONGLY encouraged not to use it");
"You can use --force to override this but do not post error reports if you do so" EOL event_log_error (hashcat_ctx, "You can use --force to override this but do not post error reports if you do so");
"" EOL event_log_error (hashcat_ctx, "");
);
return -1; return -1;
} }
if (catalyst_warn == 1) if (catalyst_warn == 1)
{ {
event_log_error (hashcat_ctx, event_log_error (hashcat_ctx, "Unsupported or incorrectly installed Catalyst driver detected!");
"Unsupported or incorrectly installed Catalyst driver detected!" EOL event_log_error (hashcat_ctx, "");
"You are STRONGLY encouraged to use the official supported catalyst driver" EOL event_log_error (hashcat_ctx, "You are STRONGLY encouraged to use the official supported catalyst driver");
"See hashcat's homepage for official supported catalyst drivers" EOL event_log_error (hashcat_ctx, "See hashcat's homepage for official supported catalyst drivers");
#if defined (_WIN) #if defined (_WIN)
"Also see: http://hashcat.net/wiki/doku.php?id=upgrading_amd_drivers_how_to" EOL event_log_error (hashcat_ctx, "Also see: http://hashcat.net/wiki/doku.php?id=upgrading_amd_drivers_how_to");
#endif #endif
"You can use --force to override this but do not post error reports if you do so" EOL event_log_error (hashcat_ctx, "You can use --force to override this but do not post error reports if you do so");
"" event_log_error (hashcat_ctx, "");
);
return -1; return -1;
} }
@ -2733,34 +2728,12 @@ int opencl_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
{ {
if (device_param->kernel_exec_timeout != 0) if (device_param->kernel_exec_timeout != 0)
{ {
event_log_warning (hashcat_ctx, event_log_warning (hashcat_ctx, "Device #%u: Kernel exec timeout is not disabled, it might cause you errors of code 702", device_id + 1);
"Device #%u: Kernel exec timeout is not disabled, it might cause you errors of code 702" EOL event_log_warning (hashcat_ctx, " See the wiki on how to disable it: https://hashcat.net/wiki/doku.php?id=timeout_patch");
" See the wiki on how to disable it: https://hashcat.net/wiki/doku.php?id=timeout_patch", device_id + 1);
} }
} }
} }
/* turns out pocl still creates segfaults (because of llvm)
if (device_type & CL_DEVICE_TYPE_CPU)
{
if (platform_vendor_id == VENDOR_ID_AMD)
{
if (user_options->force == 0)
{
event_log_error (hashcat_ctx,
"OpenCL support for CPU of catalyst driver is not reliable." EOL
"You are STRONGLY encouraged not to use it" EOL
"You can use --force to override this but do not post error reports if you do so" EOL
"A good alternative is the free pocl >= v0.13, but make sure to use a LLVM >= v3.8" EOL
"" EOL
);
return -1;
}
}
}
*/
/** /**
* activate device * activate device
*/ */
@ -2878,17 +2851,11 @@ void opencl_ctx_devices_update_power (hashcat_ctx_t *hashcat_ctx)
{ {
if (user_options->quiet == false) if (user_options->quiet == false)
{ {
clear_prompt (); event_log_warning (hashcat_ctx, "The wordlist or mask you are using is too small.");
event_log_warning (hashcat_ctx, "Therefore, hashcat is unable to utilize the full parallelization power of your device(s).");
event_log_warning (hashcat_ctx, event_log_warning (hashcat_ctx, "The cracking speed will drop.");
" The wordlist or mask you are using is too small." EOL event_log_warning (hashcat_ctx, "Workaround: https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#how_to_create_more_work_for_full_speed");
" Therefore, hashcat is unable to utilize the full parallelization power of your device(s)." EOL event_log_warning (hashcat_ctx, "");
" The cracking speed will drop." EOL
" Workaround: https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#how_to_create_more_work_for_full_speed" EOL
""
);
send_prompt ();
} }
} }
} }
@ -3434,7 +3401,7 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx)
if (fd == NULL) if (fd == NULL)
{ {
event_log_error (hashcat_ctx, "%s: fopen(): %s", files_names[i], strerror (errno)); event_log_error (hashcat_ctx, "%s: %s", files_names[i], strerror (errno));
return -1; return -1;
} }
@ -3445,7 +3412,7 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx)
if (n != 1) if (n != 1)
{ {
event_log_error (hashcat_ctx, "%s: fread(): %s", files_names[i], strerror (errno)); event_log_error (hashcat_ctx, "%s: %s", files_names[i], strerror (errno));
return -1; return -1;
} }