1
0
mirror of https://github.com/hashcat/hashcat.git synced 2025-02-18 10:32:04 +00:00

Add some useful stuff to main.c

This commit is contained in:
jsteube 2016-10-03 01:27:55 +02:00
parent 50d2cec912
commit 57cb082fda
10 changed files with 164 additions and 139 deletions

View File

@ -21,7 +21,7 @@ int sort_by_dictstat (const void *s1, const void *s2);
void dictstat_init (dictstat_ctx_t *dictstat_ctx, const user_options_t *user_options, const folder_config_t *folder_config); void dictstat_init (dictstat_ctx_t *dictstat_ctx, const user_options_t *user_options, const folder_config_t *folder_config);
void dictstat_destroy (dictstat_ctx_t *dictstat_ctx); void dictstat_destroy (dictstat_ctx_t *dictstat_ctx);
void dictstat_read (dictstat_ctx_t *dictstat_ctx, const int comptime); void dictstat_read (dictstat_ctx_t *dictstat_ctx);
int dictstat_write (dictstat_ctx_t *dictstat_ctx); int dictstat_write (dictstat_ctx_t *dictstat_ctx);
u64 dictstat_find (dictstat_ctx_t *dictstat_ctx, dictstat_t *d); u64 dictstat_find (dictstat_ctx_t *dictstat_ctx, dictstat_t *d);
void dictstat_append (dictstat_ctx_t *dictstat_ctx, dictstat_t *d); void dictstat_append (dictstat_ctx_t *dictstat_ctx, dictstat_t *d);

View File

@ -6,6 +6,9 @@
#ifndef _HASHCAT_H #ifndef _HASHCAT_H
#define _HASHCAT_H #define _HASHCAT_H
int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv); int hashcat (hashcat_ctx_t *hashcat_ctx, char *install_folder, char *shared_folder, int argc, char **argv, const int comptime);
void hashcat_ctx_init (hashcat_ctx_t *hashcat_ctx);
void hashcat_ctx_destroy (hashcat_ctx_t *hashcat_ctx);
#endif // _HASHCAT_H #endif // _HASHCAT_H

View File

@ -23,8 +23,8 @@
#include <windows.h> #include <windows.h>
#endif // _WIN #endif // _WIN
void welcome_screen (const user_options_t *user_options, const status_ctx_t *status_ctx, char *version_tag); void welcome_screen (const user_options_t *user_options, const time_t proc_start, const char *version_tag);
void goodbye_screen (const user_options_t *user_options, const status_ctx_t *status_ctx); void goodbye_screen (const user_options_t *user_options, const time_t proc_start, const time_t proc_stop);
int setup_console (); int setup_console ();

View File

@ -257,11 +257,8 @@ uninstall:
obj/%.NATIVE.o: src/%.c obj/%.NATIVE.o: src/%.c
$(CC) $(CFLAGS_NATIVE) -c -o $@ $< $(CC) $(CFLAGS_NATIVE) -c -o $@ $<
obj/hashcat.NATIVE.o: src/hashcat.c
$(CC) $(CFLAGS_NATIVE) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
$(BINARY_NATIVE): src/main.c $(NATIVE_OBJS) $(BINARY_NATIVE): src/main.c $(NATIVE_OBJS)
$(CC) $(CFLAGS_NATIVE) -o $(BINARY_NATIVE) $^ $(LFLAGS_NATIVE) $(CC) $(CFLAGS_NATIVE) -o $(BINARY_NATIVE) $^ $(LFLAGS_NATIVE) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
## ##
## cross compiled hashcat for binary release version ## cross compiled hashcat for binary release version
@ -279,26 +276,14 @@ obj/%.WIN.32.o: src/%.c
obj/%.WIN.64.o: src/%.c obj/%.WIN.64.o: src/%.c
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -c -o $@ $< $(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -c -o $@ $<
obj/hashcat.LINUX.32.o: src/hashcat.c
$(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
obj/hashcat.LINUX.64.o: src/hashcat.c
$(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
obj/hashcat.WIN.32.o: src/hashcat.c
$(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\"
obj/hashcat.WIN.64.o: src/hashcat.c
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -c -o $@ $< -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\"
hashcat32.bin: src/main.c $(LINUX_32_OBJS) hashcat32.bin: src/main.c $(LINUX_32_OBJS)
$(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_LINUX) $(CC_LINUX_32) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
hashcat64.bin: src/main.c $(LINUX_64_OBJS) hashcat64.bin: src/main.c $(LINUX_64_OBJS)
$(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_LINUX) $(CC_LINUX_64) $(CFLAGS_CROSS_LINUX) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_LINUX) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\" -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
hashcat32.exe: src/main.c $(WIN_32_OBJS) hashcat32.exe: src/main.c $(WIN_32_OBJS)
$(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_WIN) $(CC_WIN_32) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_32) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\"
hashcat64.exe: src/main.c $(WIN_64_OBJS) hashcat64.exe: src/main.c $(WIN_64_OBJS)
$(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_WIN) $(CC_WIN_64) $(CFLAGS_CROSS_WIN) $(CFLAGS_CROSS_64) -o $@ $^ $(LFLAGS_CROSS_WIN) -DCOMPTIME=$(COMPTIME) -DVERSION_TAG=\"$(VERSION_TAG)\"

View File

@ -56,7 +56,7 @@ void dictstat_destroy (dictstat_ctx_t *dictstat_ctx)
memset (dictstat_ctx, 0, sizeof (dictstat_ctx_t)); memset (dictstat_ctx, 0, sizeof (dictstat_ctx_t));
} }
void dictstat_read (dictstat_ctx_t *dictstat_ctx, const int comptime) void dictstat_read (dictstat_ctx_t *dictstat_ctx)
{ {
if (dictstat_ctx->enabled == false) return; if (dictstat_ctx->enabled == false) return;
@ -69,28 +69,6 @@ void dictstat_read (dictstat_ctx_t *dictstat_ctx, const int comptime)
return; return;
} }
hc_stat tmpstat;
#if defined (_POSIX)
fstat (fileno (fp), &tmpstat);
#endif
#if defined (_WIN)
_fstat64 (fileno (fp), &tmpstat);
#endif
if (tmpstat.st_mtime < comptime)
{
/* with v0.15 the format changed so we have to ensure user is using a good version
since there is no version-header in the dictstat file */
fclose (fp);
unlink (dictstat_ctx->filename);
return;
}
while (!feof (fp)) while (!feof (fp))
{ {
dictstat_t d; dictstat_t d;

View File

@ -262,6 +262,8 @@ int folder_config_init (folder_config_t *folder_config, const char *install_fold
#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) #if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
if (install_folder == NULL) install_folder = "/"; // makes library use easier
char *resolved_install_folder = realpath (install_folder, NULL); char *resolved_install_folder = realpath (install_folder, NULL);
char *resolved_exec_path = realpath (exec_path, NULL); char *resolved_exec_path = realpath (exec_path, NULL);

View File

@ -56,7 +56,7 @@
extern const u32 DEFAULT_BENCHMARK_ALGORITHMS_CNT; extern const u32 DEFAULT_BENCHMARK_ALGORITHMS_CNT;
extern const u32 DEFAULT_BENCHMARK_ALGORITHMS_BUF[]; extern const u32 DEFAULT_BENCHMARK_ALGORITHMS_BUF[];
static void hashcat_ctx_init (hashcat_ctx_t *hashcat_ctx) void hashcat_ctx_init (hashcat_ctx_t *hashcat_ctx)
{ {
hashcat_ctx->bitmap_ctx = (bitmap_ctx_t *) mymalloc (sizeof (bitmap_ctx_t)); hashcat_ctx->bitmap_ctx = (bitmap_ctx_t *) mymalloc (sizeof (bitmap_ctx_t));
hashcat_ctx->combinator_ctx = (combinator_ctx_t *) mymalloc (sizeof (combinator_ctx_t)); hashcat_ctx->combinator_ctx = (combinator_ctx_t *) mymalloc (sizeof (combinator_ctx_t));
@ -84,7 +84,7 @@ static void hashcat_ctx_init (hashcat_ctx_t *hashcat_ctx)
hashcat_ctx->wl_data = (wl_data_t *) mymalloc (sizeof (wl_data_t)); hashcat_ctx->wl_data = (wl_data_t *) mymalloc (sizeof (wl_data_t));
} }
static void hashcat_ctx_destroy (hashcat_ctx_t *hashcat_ctx) void hashcat_ctx_destroy (hashcat_ctx_t *hashcat_ctx)
{ {
myfree (hashcat_ctx->bitmap_ctx); myfree (hashcat_ctx->bitmap_ctx);
myfree (hashcat_ctx->combinator_ctx); myfree (hashcat_ctx->combinator_ctx);
@ -847,7 +847,7 @@ static int inner1_loop (hashcat_ctx_t *hashcat_ctx)
* dictstat read * dictstat read
*/ */
dictstat_read (dictstat_ctx, COMPTIME); dictstat_read (dictstat_ctx);
/** /**
* dictionary pad * dictionary pad
@ -1713,16 +1713,12 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx)
return 0; return 0;
} }
int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv) int hashcat (hashcat_ctx_t *hashcat_ctx, char *install_folder, char *shared_folder, int argc, char **argv, const int comptime)
{ {
/** /**
* To help users a bit * To help users a bit
*/ */
const int rc_console = setup_console ();
if (rc_console == -1) return -1;
setup_environment_variables (); setup_environment_variables ();
setup_umask (); setup_umask ();
@ -1731,8 +1727,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
* main init * main init
*/ */
hashcat_ctx_init (hashcat_ctx);
debugfile_ctx_t *debugfile_ctx = hashcat_ctx->debugfile_ctx; debugfile_ctx_t *debugfile_ctx = hashcat_ctx->debugfile_ctx;
dictstat_ctx_t *dictstat_ctx = hashcat_ctx->dictstat_ctx; dictstat_ctx_t *dictstat_ctx = hashcat_ctx->dictstat_ctx;
folder_config_t *folder_config = hashcat_ctx->folder_config; folder_config_t *folder_config = hashcat_ctx->folder_config;
@ -1762,51 +1756,8 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
* folder * folder
*/ */
char *install_folder = NULL;
char *shared_folder = NULL;
#if defined (INSTALL_FOLDER)
install_folder = INSTALL_FOLDER;
#endif
#if defined (SHARED_FOLDER)
shared_folder = SHARED_FOLDER;
#endif
folder_config_init (folder_config, install_folder, shared_folder); folder_config_init (folder_config, install_folder, shared_folder);
/**
* commandline parameters
*/
user_options_init (user_options);
const int rc_options_getopt = user_options_getopt (user_options, argc, argv);
if (rc_options_getopt == -1) return -1;
const int rc_options_sanity = user_options_sanity (user_options);
if (rc_options_sanity == -1) return -1;
/**
* some early exits
*/
if (user_options->version == true)
{
log_info ("%s", VERSION_TAG);
return 0;
}
if (user_options->usage == true)
{
usage_big_print (PROGNAME);
return 0;
}
/** /**
* restore * restore
*/ */
@ -1829,13 +1780,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
setup_seeding (user_options->rp_gen_seed_chgd, user_options->rp_gen_seed); setup_seeding (user_options->rp_gen_seed_chgd, user_options->rp_gen_seed);
/**
* Inform user things getting started,
* - this is giving us a visual header before preparations start, so we do not need to clear them afterwards
*/
welcome_screen (user_options, status_ctx, VERSION_TAG);
/** /**
* logfile init * logfile init
*/ */
@ -1938,7 +1882,7 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
* Init OpenCL devices * Init OpenCL devices
*/ */
const int rc_devices_init = opencl_ctx_devices_init (opencl_ctx, user_options, COMPTIME); const int rc_devices_init = opencl_ctx_devices_init (opencl_ctx, user_options, comptime);
if (rc_devices_init == -1) if (rc_devices_init == -1)
{ {
@ -2070,8 +2014,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
logfile_destroy (logfile_ctx); logfile_destroy (logfile_ctx);
goodbye_screen (user_options, status_ctx);
user_options_destroy (user_options); user_options_destroy (user_options);
int rc_final = -1; int rc_final = -1;
@ -2083,7 +2025,5 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
status_ctx_destroy (status_ctx); status_ctx_destroy (status_ctx);
hashcat_ctx_destroy (hashcat_ctx);
return rc_final; return rc_final;
} }

View File

@ -1,22 +1,136 @@
/** /**
* Author......: See docs/credits.txt * Author......: See docs/credits.txt
* License.....: MIT * License.....: MIT
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <getopt.h>
#include "common.h"
#include "types.h" #include "common.h"
#include "hashcat.h" #include "types.h"
#include "user_options.h"
int main (int argc, char **argv) #include "hashcat.h"
{ #include "terminal.h" // commandline only
hashcat_ctx_t *hashcat_ctx = malloc (sizeof (hashcat_ctx_t)); #include "usage.h" // commandline only
const int rc = hashcat (hashcat_ctx, argc, argv); #define RUN_AS_COMMANDLINE true
free (hashcat_ctx); int main (int argc, char **argv)
{
return rc; // hashcat main context
}
hashcat_ctx_t *hashcat_ctx = (hashcat_ctx_t *) malloc (sizeof (hashcat_ctx_t));
hashcat_ctx_init (hashcat_ctx);
// initialize the user options with some defaults (you can override them)
user_options_t *user_options = hashcat_ctx->user_options;
user_options_init (user_options);
// initialize the session via getops for commandline use or
// alternatively you can set the user_options directly
int rc_hashcat = 0;
bool run_as_commandline = RUN_AS_COMMANDLINE;
if (run_as_commandline == true)
{
// install and shared folder need to be set to recognize "make install" use
char *install_folder = NULL;
char *shared_folder = NULL;
#if defined (INSTALL_FOLDER)
install_folder = INSTALL_FOLDER;
#endif
#if defined (SHARED_FOLDER)
shared_folder = SHARED_FOLDER;
#endif
// sets dos window size (windows only)
const int rc_console = setup_console ();
if (rc_console == -1) return -1;
// parse commandline parameters and check them
const int rc_options_getopt = user_options_getopt (user_options, argc, argv);
if (rc_options_getopt == -1) return -1;
const int rc_options_sanity = user_options_sanity (user_options);
if (rc_options_sanity == -1) return -1;
// some early exits
if (user_options->version == true)
{
printf ("%s", VERSION_TAG);
return 0;
}
if (user_options->usage == true)
{
usage_big_print (PROGNAME);
return 0;
}
// Inform user things getting started
time_t proc_start;
time (&proc_start);
welcome_screen (user_options, proc_start, VERSION_TAG);
// now run hashcat
rc_hashcat = hashcat (hashcat_ctx, install_folder, shared_folder, argc, argv, COMPTIME);
// Inform user we're done
time_t proc_stop;
time (&proc_stop);
goodbye_screen (user_options, proc_start, proc_stop);
}
else
{
// this is a bit ugly, but it's the example you're looking for
char *hash = "8743b52063cd84097a65d1633f5c74f5";
char *mask = "?l?l?l?l?l?l?l";
char *hc_argv[] = { hash, mask, NULL };
user_options->hc_argv = hc_argv;
user_options->hc_argc = 2;
user_options->quiet = true;
user_options->potfile_disable = true;
user_options->attack_mode = ATTACK_MODE_BF; // this is -a 3
user_options->hash_mode = 0; // MD5
user_options->workload_profile = 3;
// now run hashcat
rc_hashcat = hashcat (hashcat_ctx, NULL, NULL, 0, NULL, 0);
}
// finished with hashcat, clean up
hashcat_ctx_destroy (hashcat_ctx);
free (hashcat_ctx);
return rc_hashcat;
}

View File

@ -357,6 +357,9 @@ int restore_ctx_init (restore_ctx_t *restore_ctx, user_options_t *user_options,
init_restore (restore_ctx); init_restore (restore_ctx);
if (argc == 0) return 0;
if (argv == NULL) return 0;
if (user_options->benchmark == true) return 0; if (user_options->benchmark == true) return 0;
if (user_options->keyspace == true) return 0; if (user_options->keyspace == true) return 0;
if (user_options->left == true) return 0; if (user_options->left == true) return 0;

View File

@ -31,7 +31,7 @@
const char *PROMPT = "[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => "; const char *PROMPT = "[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => ";
void welcome_screen (const user_options_t *user_options, const status_ctx_t *status_ctx, char *version_tag) void welcome_screen (const user_options_t *user_options, const time_t proc_start, const char *version_tag)
{ {
if (user_options->quiet == true) return; if (user_options->quiet == true) return;
if (user_options->keyspace == true) return; if (user_options->keyspace == true) return;
@ -48,7 +48,7 @@ void welcome_screen (const user_options_t *user_options, const status_ctx_t *sta
} }
else else
{ {
log_info ("# %s (%s) %s", PROGNAME, version_tag, ctime (&status_ctx->proc_start)); log_info ("# %s (%s) %s", PROGNAME, version_tag, ctime (&proc_start));
} }
} }
else if (user_options->restore == true) else if (user_options->restore == true)
@ -63,7 +63,7 @@ void welcome_screen (const user_options_t *user_options, const status_ctx_t *sta
} }
} }
void goodbye_screen (const user_options_t *user_options, const status_ctx_t *status_ctx) void goodbye_screen (const user_options_t *user_options, const time_t proc_start, const time_t proc_stop)
{ {
if (user_options->quiet == true) return; if (user_options->quiet == true) return;
if (user_options->keyspace == true) return; if (user_options->keyspace == true) return;
@ -71,8 +71,8 @@ void goodbye_screen (const user_options_t *user_options, const status_ctx_t *sta
if (user_options->show == true) return; if (user_options->show == true) return;
if (user_options->left == true) return; if (user_options->left == true) return;
log_info_nn ("Started: %s", ctime (&status_ctx->proc_start)); log_info_nn ("Started: %s", ctime (&proc_start));
log_info_nn ("Stopped: %s", ctime (&status_ctx->proc_stop)); log_info_nn ("Stopped: %s", ctime (&proc_stop));
} }
int setup_console () int setup_console ()