mirror of
https://github.com/hashcat/hashcat.git
synced 2024-12-22 14:48:12 +00:00
implements the enhancement mentioned in issue #10 (cancel on next checkpoint)
This commit is contained in:
parent
73f9441977
commit
946b4a37d0
@ -1892,6 +1892,7 @@ extern hc_thread_mutex_t mux_display;
|
||||
#define STATUS_ABORTED 6
|
||||
#define STATUS_QUIT 7
|
||||
#define STATUS_BYPASS 8
|
||||
#define STATUS_STOP_AT_CHECKPOINT 9
|
||||
|
||||
#define ST_0000 "Initializing"
|
||||
#define ST_0001 "Starting"
|
||||
@ -1902,6 +1903,7 @@ extern hc_thread_mutex_t mux_display;
|
||||
#define ST_0006 "Aborted"
|
||||
#define ST_0007 "Quit"
|
||||
#define ST_0008 "Bypass"
|
||||
#define ST_0009 "Running (stop at checkpoint)"
|
||||
|
||||
/**
|
||||
* kernel types
|
||||
@ -2234,6 +2236,7 @@ restore_data_t *init_restore (int argc, char **argv);
|
||||
void read_restore (const char *eff_restore_file, restore_data_t *rd);
|
||||
void write_restore (const char *new_restore_file, restore_data_t *rd);
|
||||
void cycle_restore ();
|
||||
void check_checkpoint ();
|
||||
|
||||
#ifdef WIN
|
||||
|
||||
|
@ -1206,6 +1206,8 @@ typedef struct
|
||||
|
||||
restore_data_t *rd;
|
||||
|
||||
uint64_t checkpoint_cur_words; // used for the "stop at next checkpoint" feature
|
||||
|
||||
/**
|
||||
* status, timer
|
||||
*/
|
||||
|
@ -315,7 +315,7 @@ hc_thread_mutex_t mux_display;
|
||||
|
||||
hc_global_data_t data;
|
||||
|
||||
const char *PROMPT = "[s]tatus [p]ause [r]esume [b]ypass [q]uit => ";
|
||||
const char *PROMPT = "[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint stop [q]uit => ";
|
||||
|
||||
const char *USAGE_MINI[] =
|
||||
{
|
||||
@ -1482,7 +1482,7 @@ void status_display ()
|
||||
|
||||
if (data.restore_disable == 0)
|
||||
{
|
||||
log_info ("Restore point..: %llu/%llu (%.02f%%)", (uint64_t) 0, (uint64_t) 0, (float) 100);
|
||||
log_info ("Restore.Point..: %llu/%llu (%.02f%%)", (uint64_t) 0, (uint64_t) 0, (float) 100);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1494,7 +1494,7 @@ void status_display ()
|
||||
|
||||
//if (data.restore_disable == 0)
|
||||
//{
|
||||
// log_info ("Restore point..: %llu", (unsigned long long int) restore_point);
|
||||
// log_info ("Restore.Point..: %llu", (unsigned long long int) restore_point);
|
||||
//}
|
||||
}
|
||||
}
|
||||
@ -2797,6 +2797,8 @@ static void run_cracker (hc_device_param_t *device_param, const uint pw_cnt, con
|
||||
{
|
||||
while (data.devices_status == STATUS_PAUSED) hc_sleep (1);
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -2823,6 +2825,8 @@ static void run_cracker (hc_device_param_t *device_param, const uint pw_cnt, con
|
||||
{
|
||||
while (data.devices_status == STATUS_PAUSED) hc_sleep (1);
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -3080,6 +3084,8 @@ static void run_cracker (hc_device_param_t *device_param, const uint pw_cnt, con
|
||||
|
||||
run_kernel (KERN_RUN_2, device_param, pws_cnt);
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -3116,6 +3122,8 @@ static void run_cracker (hc_device_param_t *device_param, const uint pw_cnt, con
|
||||
run_kernel (KERN_RUN_3, device_param, pws_cnt);
|
||||
}
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -4954,6 +4962,8 @@ static void *thread_calc (void *p)
|
||||
device_param->pws_cnt = 0;
|
||||
}
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -5127,11 +5137,7 @@ static void *thread_calc (void *p)
|
||||
|
||||
device_param->pw_add (device_param, (uint8_t *) line_buf, line_len);
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
if (data.devices_status == STATUS_BYPASS) break;
|
||||
}
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
@ -5139,6 +5145,16 @@ static void *thread_calc (void *p)
|
||||
if (data.devices_status == STATUS_BYPASS) break;
|
||||
}
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
if (data.devices_status == STATUS_BYPASS) break;
|
||||
}
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -5197,6 +5213,8 @@ static void *thread_calc (void *p)
|
||||
device_param->pws_cnt = 0;
|
||||
}
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -5250,6 +5268,8 @@ static void *thread_calc (void *p)
|
||||
device_param->pws_cnt = 0;
|
||||
}
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -17369,6 +17389,7 @@ int main (int argc, char **argv)
|
||||
|
||||
hc_thread_wait (devices_cnt, c_threads);
|
||||
|
||||
|
||||
local_free (c_threads);
|
||||
|
||||
data.restore = 0;
|
||||
@ -17377,6 +17398,8 @@ int main (int argc, char **argv)
|
||||
|
||||
logfile_sub_var_uint ("status-after-work", data.devices_status);
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
|
||||
@ -17454,6 +17477,8 @@ int main (int argc, char **argv)
|
||||
global_free (subid);
|
||||
}
|
||||
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) check_checkpoint ();
|
||||
|
||||
if (data.devices_status == STATUS_CRACKED) break;
|
||||
if (data.devices_status == STATUS_ABORTED) break;
|
||||
if (data.devices_status == STATUS_QUIT) break;
|
||||
@ -17954,6 +17979,7 @@ int main (int argc, char **argv)
|
||||
|
||||
if (data.devices_status == STATUS_ABORTED) return 2;
|
||||
if (data.devices_status == STATUS_QUIT) return 2;
|
||||
if (data.devices_status == STATUS_STOP_AT_CHECKPOINT) return 2;
|
||||
if (data.devices_status == STATUS_EXHAUSTED) return 1;
|
||||
if (data.devices_status == STATUS_CRACKED) return 0;
|
||||
|
||||
|
51
src/shared.c
51
src/shared.c
@ -5578,6 +5578,8 @@ char *strstatus (const uint devices_status)
|
||||
case STATUS_CRACKED: return ((char *) ST_0005); break;
|
||||
case STATUS_ABORTED: return ((char *) ST_0006); break;
|
||||
case STATUS_QUIT: return ((char *) ST_0007); break;
|
||||
case STATUS_BYPASS: return ((char *) ST_0008); break;
|
||||
case STATUS_STOP_AT_CHECKPOINT: return ((char *) ST_0009); break;
|
||||
}
|
||||
|
||||
return ((char *) "Unknown");
|
||||
@ -8360,6 +8362,28 @@ void bypass ()
|
||||
log_info ("Next dictionary / mask in queue selected, bypassing current one");
|
||||
}
|
||||
|
||||
void stop_at_checkpoint ()
|
||||
{
|
||||
if (data.devices_status != STATUS_RUNNING) return;
|
||||
|
||||
// this feature only makes sense if --restore-disable was not specified
|
||||
|
||||
if (data.restore_disable == 0)
|
||||
{
|
||||
data.devices_status = STATUS_STOP_AT_CHECKPOINT;
|
||||
|
||||
// save the current restore point value
|
||||
|
||||
data.checkpoint_cur_words = get_lowest_words_done ();
|
||||
|
||||
log_info ("Stop at next checkpoint");
|
||||
}
|
||||
else
|
||||
{
|
||||
log_info ("WARNING: this feature is disabled when --restore-disable was specified");
|
||||
}
|
||||
}
|
||||
|
||||
void myabort ()
|
||||
{
|
||||
if (data.devices_status == STATUS_INIT) return;
|
||||
@ -8772,6 +8796,18 @@ void cycle_restore ()
|
||||
}
|
||||
}
|
||||
|
||||
void check_checkpoint ()
|
||||
{
|
||||
// if (data.restore_disable == 1) break; (this is already implied by previous checks)
|
||||
|
||||
uint64_t words_cur = get_lowest_words_done ();
|
||||
|
||||
if (words_cur != data.checkpoint_cur_words)
|
||||
{
|
||||
myabort ();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* adjustments
|
||||
*/
|
||||
@ -18713,6 +18749,21 @@ void *thread_keypress (void *p)
|
||||
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
|
||||
log_info ("");
|
||||
|
||||
if (benchmark == 1) break;
|
||||
|
||||
stop_at_checkpoint ();
|
||||
|
||||
log_info ("");
|
||||
|
||||
if (quiet == 0) fprintf (stdout, "%s", PROMPT);
|
||||
if (quiet == 0) fflush (stdout);
|
||||
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
|
||||
log_info ("");
|
||||
|
Loading…
Reference in New Issue
Block a user