1
mirror of https://github.com/hashcat/hashcat synced 2024-12-01 20:18:12 +01: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_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);
u64 dictstat_find (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
#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

View File

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

View File

@ -257,11 +257,8 @@ uninstall:
obj/%.NATIVE.o: src/%.c
$(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)
$(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
@ -279,26 +276,14 @@ obj/%.WIN.32.o: src/%.c
obj/%.WIN.64.o: src/%.c
$(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)
$(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)
$(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)
$(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)
$(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));
}
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;
@ -69,28 +69,6 @@ void dictstat_read (dictstat_ctx_t *dictstat_ctx, const int comptime)
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))
{
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 (install_folder == NULL) install_folder = "/"; // makes library use easier
char *resolved_install_folder = realpath (install_folder, 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_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->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));
}
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->combinator_ctx);
@ -847,7 +847,7 @@ static int inner1_loop (hashcat_ctx_t *hashcat_ctx)
* dictstat read
*/
dictstat_read (dictstat_ctx, COMPTIME);
dictstat_read (dictstat_ctx);
/**
* dictionary pad
@ -1713,16 +1713,12 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx)
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
*/
const int rc_console = setup_console ();
if (rc_console == -1) return -1;
setup_environment_variables ();
setup_umask ();
@ -1731,8 +1727,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
* main init
*/
hashcat_ctx_init (hashcat_ctx);
debugfile_ctx_t *debugfile_ctx = hashcat_ctx->debugfile_ctx;
dictstat_ctx_t *dictstat_ctx = hashcat_ctx->dictstat_ctx;
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
*/
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);
/**
* 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
*/
@ -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);
/**
* 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
*/
@ -1938,7 +1882,7 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
* 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)
{
@ -2070,8 +2014,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
logfile_destroy (logfile_ctx);
goodbye_screen (user_options, status_ctx);
user_options_destroy (user_options);
int rc_final = -1;
@ -2083,7 +2025,5 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
status_ctx_destroy (status_ctx);
hashcat_ctx_destroy (hashcat_ctx);
return rc_final;
}

View File

@ -1,22 +1,136 @@
/**
* Author......: See docs/credits.txt
* License.....: MIT
*/
#include <stdio.h>
#include <stdlib.h>
#include "common.h"
#include "types.h"
#include "hashcat.h"
int main (int argc, char **argv)
{
hashcat_ctx_t *hashcat_ctx = malloc (sizeof (hashcat_ctx_t));
const int rc = hashcat (hashcat_ctx, argc, argv);
free (hashcat_ctx);
return rc;
}
/**
* Author......: See docs/credits.txt
* License.....: MIT
*/
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include "common.h"
#include "types.h"
#include "user_options.h"
#include "hashcat.h"
#include "terminal.h" // commandline only
#include "usage.h" // commandline only
#define RUN_AS_COMMANDLINE true
int main (int argc, char **argv)
{
// 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);
if (argc == 0) return 0;
if (argv == NULL) return 0;
if (user_options->benchmark == true) return 0;
if (user_options->keyspace == 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 => ";
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->keyspace == true) return;
@ -48,7 +48,7 @@ void welcome_screen (const user_options_t *user_options, const status_ctx_t *sta
}
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)
@ -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->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->left == true) return;
log_info_nn ("Started: %s", ctime (&status_ctx->proc_start));
log_info_nn ("Stopped: %s", ctime (&status_ctx->proc_stop));
log_info_nn ("Started: %s", ctime (&proc_start));
log_info_nn ("Stopped: %s", ctime (&proc_stop));
}
int setup_console ()