-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
bd8ec47
commit cd0757e
Showing
3 changed files
with
115 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,94 @@ | ||
all: | ||
@echo Error: you must run "./configure" first | ||
CC=gcc | ||
STRIP=strip | ||
XDEFINES= -DLIBOPENSSL -DHAVE_PCRE -DLIBSVN -DLIBSSH -DHAVE_ZLIB -DHAVE_MATH_H | ||
XLIBS= -lz -lssl -lpcre -lsvn_client-1 -lapr-1 -laprutil-1 -lsvn_subr-1 -lssh -lcrypto | ||
XLIBPATHS=-L/usr/lib -L/usr/local/lib -L/lib -L/lib -L/usr/local/lib -L/lib | ||
XIPATHS= -I/usr/include -I/usr/local/include -I/usr/include/subversion-1 -I/usr/include/apr-1 -I/usr/include/subversion-1 | ||
PREFIX=/usr/local | ||
XHYDRA_SUPPORT= | ||
STRIP=strip | ||
|
||
HYDRA_LOGO=hydra-logo.o | ||
PWI_LOGO=pw-inspector-logo.o | ||
SEC=-fstack-protector-all --param ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 | ||
|
||
# | ||
# Makefile for Hydra - (c) 2001-2017 by van Hauser / THC <[email protected]> | ||
# | ||
OPTS=-I. -O3 | ||
# -Wall -g -pedantic | ||
LIBS=-lm | ||
BINDIR = /bin | ||
MANDIR ?= /man/man1/ | ||
DATADIR ?= /etc | ||
DESTDIR ?= | ||
|
||
SRC = hydra-vnc.c hydra-pcnfs.c hydra-rexec.c hydra-nntp.c hydra-socks5.c \ | ||
hydra-telnet.c hydra-cisco.c hydra-http.c hydra-ftp.c hydra-imap.c \ | ||
hydra-pop3.c hydra-smb.c hydra-icq.c hydra-cisco-enable.c hydra-ldap.c \ | ||
hydra-mysql.c hydra-mssql.c hydra-xmpp.c hydra-http-proxy-urlenum.c \ | ||
hydra-snmp.c hydra-cvs.c hydra-smtp.c hydra-smtp-enum.c hydra-sapr3.c \ | ||
hydra-ssh.c hydra-sshkey.c hydra-teamspeak.c hydra-postgres.c \ | ||
hydra-rsh.c hydra-rlogin.c hydra-oracle-listener.c hydra-svn.c \ | ||
hydra-pcanywhere.c hydra-sip.c hydra-oracle.c hydra-vmauthd.c \ | ||
hydra-asterisk.c hydra-firebird.c hydra-afp.c hydra-ncp.c hydra-rdp.c \ | ||
hydra-oracle-sid.c hydra-http-proxy.c hydra-http-form.c hydra-irc.c \ | ||
hydra-s7-300.c hydra-redis.c hydra-adam6500.c hydra-rtsp.c \ | ||
hydra-rpcap.c hydra-radmin2.c \ | ||
hydra-time.c crc32.c d3des.c bfg.c ntlm.c sasl.c hmacmd5.c hydra-mod.c | ||
OBJ = hydra-vnc.o hydra-pcnfs.o hydra-rexec.o hydra-nntp.o hydra-socks5.o \ | ||
hydra-telnet.o hydra-cisco.o hydra-http.o hydra-ftp.o hydra-imap.o \ | ||
hydra-pop3.o hydra-smb.o hydra-icq.o hydra-cisco-enable.o hydra-ldap.o \ | ||
hydra-mysql.o hydra-mssql.o hydra-xmpp.o hydra-http-proxy-urlenum.o \ | ||
hydra-snmp.o hydra-cvs.o hydra-smtp.o hydra-smtp-enum.o hydra-sapr3.o \ | ||
hydra-ssh.o hydra-sshkey.o hydra-teamspeak.o hydra-postgres.o \ | ||
hydra-rsh.o hydra-rlogin.o hydra-oracle-listener.o hydra-svn.o \ | ||
hydra-pcanywhere.o hydra-sip.o hydra-oracle-sid.o hydra-oracle.o \ | ||
hydra-vmauthd.o hydra-asterisk.o hydra-firebird.o hydra-afp.o \ | ||
hydra-ncp.o hydra-http-proxy.o hydra-http-form.o hydra-irc.o \ | ||
hydra-redis.o hydra-rdp.o hydra-s7-300.c hydra-adam6500.o hydra-rtsp.o \ | ||
hydra-rpcap.o hydra-radmin2.o \ | ||
crc32.o d3des.o bfg.o ntlm.o sasl.o hmacmd5.o hydra-mod.o hydra-time.o | ||
BINS = hydra pw-inspector | ||
|
||
EXTRA_DIST = README README.arm README.palm CHANGES TODO INSTALL LICENSE \ | ||
hydra-mod.h hydra.h crc32.h d3des.h | ||
|
||
all: pw-inspector hydra $(XHYDRA_SUPPORT) | ||
@echo | ||
@echo Now type "make install" | ||
|
||
hydra: hydra.c $(OBJ) | ||
$(CC) $(OPTS) $(SEC) $(LIBS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o hydra $(HYDRA_LOGO) hydra.c $(OBJ) $(LIBS) $(XLIBS) $(XLIBPATHS) $(XIPATHS) $(XDEFINES) | ||
@echo | ||
@echo If men could get pregnant, abortion would be a sacrament | ||
@echo | ||
|
||
xhydra: | ||
-cd hydra-gtk && sh ./make_xhydra.sh | ||
|
||
pw-inspector: pw-inspector.c | ||
-$(CC) $(OPTS) $(SEC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o pw-inspector $(PWI_LOGO) pw-inspector.c | ||
|
||
.c.o: | ||
$(CC) $(OPTS) $(SEC) $(CFLAGS) $(CPPFLAGS) -c $< $(XDEFINES) $(XIPATHS) | ||
|
||
strip: all | ||
strip $(BINS) | ||
-echo OK > /dev/null && test -x xhydra && strip xhydra || echo OK > /dev/null | ||
|
||
install: strip | ||
-mkdir -p $(DESTDIR)$(PREFIX)$(BINDIR) | ||
cp -f hydra-wizard.sh $(BINS) $(DESTDIR)$(PREFIX)$(BINDIR) && cd $(DESTDIR)$(PREFIX)$(BINDIR) && chmod 755 hydra-wizard.sh $(BINS) | ||
-echo OK > /dev/null && test -x xhydra && cp xhydra $(DESTDIR)$(PREFIX)$(BINDIR) && cd $(DESTDIR)$(PREFIX)$(BINDIR) && chmod 755 xhydra || echo OK > /dev/null | ||
-sed -e "s|^INSTALLDIR=.*|INSTALLDIR="$(PREFIX)"|" dpl4hydra.sh | sed -e "s|^LOCATION=.*|LOCATION="$(DATADIR)"|" > $(DESTDIR)$(PREFIX)$(BINDIR)/dpl4hydra.sh | ||
-chmod 755 $(DESTDIR)$(PREFIX)$(BINDIR)/dpl4hydra.sh | ||
-mkdir -p $(DESTDIR)$(PREFIX)$(DATADIR) | ||
-cp -f *.csv $(DESTDIR)$(PREFIX)$(DATADIR) | ||
-mkdir -p $(DESTDIR)$(PREFIX)$(MANDIR) | ||
-cp -f hydra.1 xhydra.1 pw-inspector.1 $(DESTDIR)$(PREFIX)$(MANDIR) | ||
|
||
clean: | ||
rm -rf xhydra pw-inspector hydra *.o core *.core *.stackdump *~ Makefile.in Makefile dev_rfc hydra.restore arm/*.ipk arm/ipkg/usr/bin/* hydra-gtk/src/*.o hydra-gtk/src/xhydra hydra-gtk/stamp-h hydra-gtk/config.status hydra-gtk/errors hydra-gtk/config.log hydra-gtk/src/.deps hydra-gtk/src/Makefile hydra-gtk/Makefile | ||
cp -f Makefile.orig Makefile | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -626,15 +626,15 @@ void hydra_debug(int32_t force, char *string) { | |
if (!debug && !force) | ||
return; | ||
|
||
printf("[DEBUG] Code: %s Time: %llu\n", string, (uint64_t) time(NULL)); | ||
printf("[DEBUG] Code: %s Time: %lu\n", string, (uint64_t) time(NULL)); | ||
printf("[DEBUG] Options: mode %d ssl %d restore %d showAttempt %d tasks %d max_use %d tnp %d tpsal %d tprl %d exit_found %d miscptr %s service %s\n", | ||
hydra_options.mode, hydra_options.ssl, hydra_options.restore, | ||
hydra_options.showAttempt, hydra_options.tasks, hydra_options.max_use, | ||
hydra_options.try_null_password, hydra_options.try_password_same_as_login, | ||
hydra_options.try_password_reverse_login, hydra_options.exit_found, | ||
STR_NULL(hydra_options.miscptr), hydra_options.service); | ||
|
||
printf("[DEBUG] Brains: active %d targets %d finished %d todo_all %llu todo %llu sent %llu found %llu countlogin %llu sizelogin %llu countpass %llu sizepass %llu\n", | ||
printf("[DEBUG] Brains: active %d targets %d finished %d todo_all %lu todo %lu sent %lu found %lu countlogin %lu sizelogin %lu countpass %lu sizepass %lu\n", | ||
hydra_brains.active, hydra_brains.targets, hydra_brains.finished, | ||
hydra_brains.todo_all + total_redo_count, hydra_brains.todo, | ||
hydra_brains.sent, hydra_brains.found, | ||
|
@@ -646,7 +646,7 @@ void hydra_debug(int32_t force, char *string) { | |
for (i = 0; i < hydra_brains.targets; i++) { | ||
hydra_target* target = hydra_targets[i]; | ||
printf | ||
("[DEBUG] Target %d - target %s ip %s login_no %llu pass_no %llu sent %llu pass_state %d redo_state %d (%d redos) use_count %d failed %d done %d fail_count %d login_ptr %s pass_ptr %s\n", | ||
("[DEBUG] Target %d - target %s ip %s login_no %lu pass_no %lu sent %lu pass_state %d redo_state %d (%d redos) use_count %d failed %d done %d fail_count %d login_ptr %s pass_ptr %s\n", | ||
i, STR_NULL(target->target), hydra_address2string_beautiful(target->ip), | ||
target->login_no, target->pass_no, target->sent, | ||
target->pass_state, target->redo_state, target->redo, | ||
|
@@ -749,7 +749,7 @@ void hydra_restore_write(int32_t print_msg) { | |
for (j = 0; j < hydra_options.max_use; j++) { | ||
memcpy((char *) &hh, hydra_heads[j], sizeof(hydra_head)); | ||
if (j == 0 && debug) { | ||
printf("[DEBUG] sizeof hydra_head: %u\n", sizeof(hydra_head)); | ||
printf("[DEBUG] sizeof hydra_head: %lu\n", sizeof(hydra_head)); | ||
printf("[DEBUG] memcmp: %d\n", memcmp(hydra_heads[j], &hh, sizeof(hydra_head))); | ||
} | ||
hh.active = 0; // re-enable disabled heads | ||
|
@@ -1567,14 +1567,14 @@ int32_t hydra_send_next_pair(int32_t target_no, int32_t head_no) { | |
|
||
if (debug) | ||
printf | ||
("[DEBUG] send_next_pair_init target %d, head %d, redo %d, redo_state %d, pass_state %d. loop_mode %d, curlogin %s, curpass %s, tlogin %s, tpass %s, logincnt %llu/%llu, passcnt %llu/%llu, loop_cnt %d\n", | ||
("[DEBUG] send_next_pair_init target %d, head %d, redo %d, redo_state %d, pass_state %d. loop_mode %d, curlogin %s, curpass %s, tlogin %s, tpass %s, logincnt %lu/%lu, passcnt %lu/%lu, loop_cnt %d\n", | ||
target_no, head_no, hydra_targets[target_no]->redo, hydra_targets[target_no]->redo_state, hydra_targets[target_no]->pass_state, hydra_options.loop_mode, | ||
hydra_heads[head_no]->current_login_ptr, hydra_heads[head_no]->current_pass_ptr, hydra_targets[target_no]->login_ptr, hydra_targets[target_no]->pass_ptr, | ||
hydra_targets[target_no]->login_no, hydra_brains.countlogin, hydra_targets[target_no]->pass_no, hydra_brains.countpass, loop_cnt); | ||
|
||
if (loop_cnt > (hydra_brains.countlogin * 2) + 1 && loop_cnt > (hydra_brains.countpass * 2) + 1) { | ||
if (debug) | ||
printf("[DEBUG] too many loops in send_next_pair, returning -1 (loop_cnt %d, sent %llu, todo %llu)\n", loop_cnt, hydra_targets[target_no]->sent, hydra_brains.todo); | ||
printf("[DEBUG] too many loops in send_next_pair, returning -1 (loop_cnt %d, sent %lu, todo %lu)\n", loop_cnt, hydra_targets[target_no]->sent, hydra_brains.todo); | ||
return -1; | ||
} | ||
|
||
|
@@ -1584,7 +1584,7 @@ int32_t hydra_send_next_pair(int32_t target_no, int32_t head_no) { | |
snpdone = 1; | ||
} else { | ||
if (debug && (hydra_heads[head_no]->current_login_ptr != NULL || hydra_heads[head_no]->current_pass_ptr != NULL)) | ||
printf("[COMPLETED] target %s - login \"%s\" - pass \"%s\" - child %d - %llu of %llu\n", | ||
printf("[COMPLETED] target %s - login \"%s\" - pass \"%s\" - child %d - %lu of %lu\n", | ||
hydra_targets[target_no]->target, hydra_heads[head_no]->current_login_ptr, hydra_heads[head_no]->current_pass_ptr, head_no, | ||
hydra_targets[target_no]->sent, hydra_brains.todo + hydra_targets[target_no]->redo); | ||
hydra_heads[head_no]->redo = 0; | ||
|
@@ -1894,7 +1894,7 @@ int32_t hydra_send_next_pair(int32_t target_no, int32_t head_no) { | |
return 0; // not prevent disabling it, if its needed its already done in the above line | ||
} | ||
if (debug || hydra_options.showAttempt) { | ||
printf("[%sATTEMPT] target %s - login \"%s\" - pass \"%s\" - %llu of %llu [child %d] (%d/%d)\n", | ||
printf("[%sATTEMPT] target %s - login \"%s\" - pass \"%s\" - %lu of %lu [child %d] (%d/%d)\n", | ||
hydra_targets[target_no]->redo_state ? "REDO-" : snp_is_redo ? "RE-" : "", hydra_targets[target_no]->target, hydra_heads[head_no]->current_login_ptr, | ||
hydra_heads[head_no]->current_pass_ptr, hydra_targets[target_no]->sent, hydra_brains.todo + hydra_targets[target_no]->redo, head_no, hydra_targets[target_no]->redo_state ? hydra_targets[target_no]->redo_state - 1 : 0, hydra_targets[target_no]->redo); | ||
} | ||
|
@@ -3188,11 +3188,11 @@ int32_t main(int32_t argc, char *argv[]) { | |
exit(-1); | ||
} | ||
if (hydra_brains.countlogin > MAX_LINES) { | ||
fprintf(stderr, "[ERROR] Maximum number of logins is %d, this file has %llu entries.\n", MAX_LINES, hydra_brains.countlogin); | ||
fprintf(stderr, "[ERROR] Maximum number of logins is %d, this file has %lu entries.\n", MAX_LINES, hydra_brains.countlogin); | ||
exit(-1); | ||
} | ||
if (hydra_brains.sizelogin > MAX_BYTES) { | ||
fprintf(stderr, "[ERROR] Maximum size of the login file is %d, this file has %llu bytes.\n", MAX_BYTES, (uint64_t) hydra_brains.sizelogin); | ||
fprintf(stderr, "[ERROR] Maximum size of the login file is %d, this file has %lu bytes.\n", MAX_BYTES, (uint64_t) hydra_brains.sizelogin); | ||
exit(-1); | ||
} | ||
login_ptr = malloc(hydra_brains.sizelogin + hydra_brains.countlogin + 8); | ||
|
@@ -3217,11 +3217,11 @@ int32_t main(int32_t argc, char *argv[]) { | |
exit(-1); | ||
} | ||
if (hydra_brains.countpass > MAX_LINES) { | ||
fprintf(stderr, "[ERROR] Maximum number of passwords is %d, this file has %llu entries.\n", MAX_LINES, hydra_brains.countpass); | ||
fprintf(stderr, "[ERROR] Maximum number of passwords is %d, this file has %lu entries.\n", MAX_LINES, hydra_brains.countpass); | ||
exit(-1); | ||
} | ||
if (hydra_brains.sizepass > MAX_BYTES) { | ||
fprintf(stderr, "[ERROR] Maximum size of the password file is %d, this file has %llu bytes.\n", MAX_BYTES, (uint64_t) hydra_brains.sizepass); | ||
fprintf(stderr, "[ERROR] Maximum size of the password file is %d, this file has %lu bytes.\n", MAX_BYTES, (uint64_t) hydra_brains.sizepass); | ||
exit(-1); | ||
} | ||
pass_ptr = malloc(hydra_brains.sizepass + hydra_brains.countpass + 8); | ||
|
@@ -3264,11 +3264,11 @@ int32_t main(int32_t argc, char *argv[]) { | |
exit(-1); | ||
} | ||
if (hydra_brains.countlogin > MAX_LINES / 2) { | ||
fprintf(stderr, "[ERROR] Maximum number of colon file entries is %d, this file has %llu entries.\n", MAX_LINES / 2, hydra_brains.countlogin); | ||
fprintf(stderr, "[ERROR] Maximum number of colon file entries is %d, this file has %lu entries.\n", MAX_LINES / 2, hydra_brains.countlogin); | ||
exit(-1); | ||
} | ||
if (hydra_brains.sizelogin > MAX_BYTES / 2) { | ||
fprintf(stderr, "[ERROR] Maximum size of the colon file is %d, this file has %llu bytes.\n", MAX_BYTES / 2, (uint64_t) hydra_brains.sizelogin); | ||
fprintf(stderr, "[ERROR] Maximum size of the colon file is %d, this file has %lu bytes.\n", MAX_BYTES / 2, (uint64_t) hydra_brains.sizelogin); | ||
exit(-1); | ||
} | ||
csv_ptr = malloc(hydra_brains.sizelogin + 2 * hydra_brains.countlogin + 8); | ||
|
@@ -3488,7 +3488,7 @@ int32_t main(int32_t argc, char *argv[]) { | |
bail("No login/password combination given!"); | ||
if (hydra_brains.todo < hydra_options.tasks) { | ||
if (verbose && hydra_options.tasks != TASKS) | ||
printf("[VERBOSE] More tasks defined than login/pass pairs exist. Tasks reduced to %llu\n", hydra_brains.todo); | ||
printf("[VERBOSE] More tasks defined than login/pass pairs exist. Tasks reduced to %lu\n", hydra_brains.todo); | ||
hydra_options.tasks = hydra_brains.todo; | ||
} | ||
} | ||
|
@@ -3523,11 +3523,11 @@ int32_t main(int32_t argc, char *argv[]) { | |
if (hydra_options.ssl) | ||
options = options | OPTION_SSL; | ||
if (hydra_options.colonfile != NULL) | ||
printf("[DATA] max %d task%s per %d server%s, overall %d tasks, %llu login tr%s, ~%llu tr%s per task\n", hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s", | ||
printf("[DATA] max %d task%s per %d server%s, overall %d tasks, %lu login tr%s, ~%lu tr%s per task\n", hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s", | ||
hydra_brains.targets, hydra_brains.targets == 1 ? "" : "s", hydra_options.max_use, hydra_brains.todo, hydra_brains.todo == 1 ? "y" : "ies", math2, | ||
math2 == 1 ? "y" : "ies"); | ||
else | ||
printf("[DATA] max %d task%s per %d server%s, overall %d task%s, %llu login tr%s (l:%llu/p:%llu), ~%llu tr%s per task\n", hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s", | ||
printf("[DATA] max %d task%s per %d server%s, overall %d task%s, %lu login tr%s (l:%lu/p:%lu), ~%lu tr%s per task\n", hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s", | ||
hydra_brains.targets, hydra_brains.targets == 1 ? "" : "s", | ||
hydra_options.max_use, hydra_options.max_use == 1 ? "" : "s", | ||
hydra_brains.todo, hydra_brains.todo == 1 ? "y" : "ies", | ||
|
@@ -3881,7 +3881,7 @@ int32_t main(int32_t argc, char *argv[]) { | |
case 'C': // head reports connect error | ||
fck = write(hydra_heads[head_no]->sp[0], "Q", 1); | ||
if (debug) { | ||
printf("[ATTEMPT-ERROR] target %s - login \"%s\" - pass \"%s\" - child %d - %llu of %llu\n", | ||
printf("[ATTEMPT-ERROR] target %s - login \"%s\" - pass \"%s\" - child %d - %lu of %lu\n", | ||
hydra_targets[hydra_heads[head_no]->target_no]->target, hydra_heads[head_no]->current_login_ptr, hydra_heads[head_no]->current_pass_ptr, head_no, | ||
hydra_targets[hydra_heads[head_no]->target_no]->sent, hydra_brains.todo); | ||
} | ||
|
@@ -3930,7 +3930,7 @@ int32_t main(int32_t argc, char *argv[]) { | |
hydra_increase_fail_count(hydra_heads[head_no]->target_no, head_no); | ||
} | ||
} | ||
//if (debug) printf("DEBUG: bug hunt: %llu %llu\n", hydra_brains.todo_all, hydra_brains.sent); | ||
//if (debug) printf("DEBUG: bug hunt: %lu %lu\n", hydra_brains.todo_all, hydra_brains.sent); | ||
|
||
usleepn(USLEEP_LOOP); | ||
(void) wait3(NULL, WNOHANG, NULL); | ||
|
@@ -3965,11 +3965,11 @@ int32_t main(int32_t argc, char *argv[]) { | |
for (i = 0; i < hydra_options.max_use; i++) | ||
if (hydra_heads[i]->active > 0 && hydra_heads[i]->pid > 0) | ||
hydra_kill_head(i, 1, 3); | ||
printf("[BUG] %llu + %d < %llu\n", hydra_brains.todo_all, total_redo_count, hydra_brains.sent); | ||
printf("[BUG] %lu + %d < %lu\n", hydra_brains.todo_all, total_redo_count, hydra_brains.sent); | ||
bail("[BUG] Weird bug detected where more tests were performed than possible. Please rerun with -d command line switch and post all output plus command line here: https://github.com/vanhauser-thc/thc-hydra/issues/113 or send it in an email to [email protected]"); | ||
} | ||
*/ | ||
printf("[STATUS] %.2f tries/min, %llu tries in %02llu:%02lluh, %llu to do in %02llu:%02lluh, %d active\n", (1.0 * hydra_brains.sent) / (((elapsed_status - starttime) * 1.0) / 60), // tries/min | ||
printf("[STATUS] %.2f tries/min, %lu tries in %02lu:%02luh, %lu to do in %02lu:%02luh, %d active\n", (1.0 * hydra_brains.sent) / (((elapsed_status - starttime) * 1.0) / 60), // tries/min | ||
hydra_brains.sent, // tries | ||
(uint64_t) ((elapsed_status - starttime) / 3600), // hours | ||
(uint64_t) (((elapsed_status - starttime) % 3600) / 60), // minutes | ||
|
@@ -4014,7 +4014,7 @@ int32_t main(int32_t argc, char *argv[]) { | |
fprintf(stderr, "[ERROR] illegal target result value (%d=>%d)\n", i, hydra_targets[i]->done); | ||
} | ||
|
||
printf("%d of %d target%s%scompleted, %llu valid password%s found\n", hydra_brains.targets - j - k - error, hydra_brains.targets, hydra_brains.targets == 1 ? " " : "s ", | ||
printf("%d of %d target%s%scompleted, %lu valid password%s found\n", hydra_brains.targets - j - k - error, hydra_brains.targets, hydra_brains.targets == 1 ? " " : "s ", | ||
hydra_brains.found > 0 ? "successfully " : "", hydra_brains.found, hydra_brains.found == 1 ? "" : "s"); | ||
|
||
error += j; | ||
|
@@ -4085,7 +4085,7 @@ int32_t main(int32_t argc, char *argv[]) { | |
printf("%s (%s) finished at %s\n", PROGRAM, RESOURCE, hydra_build_time()); | ||
if (hydra_brains.ofp != NULL && hydra_brains.ofp != stdout) { | ||
if (hydra_options.outfile_format == FORMAT_JSONV1) { | ||
fprintf(hydra_brains.ofp, "\n\t],\n\"success\": %s,\n\"errormessages\": [ %s ],\n\"quantityfound\": %llu }\n", | ||
fprintf(hydra_brains.ofp, "\n\t],\n\"success\": %s,\n\"errormessages\": [ %s ],\n\"quantityfound\": %lu }\n", | ||
(error ? "false" : "true"), json_error, hydra_brains.found); | ||
} | ||
fclose(hydra_brains.ofp); | ||
|