stdin mode

This commit is contained in:
pirate sans barbe 2021-03-03 06:05:58 -10:00
commit 70c8b6ee6d
5 changed files with 26 additions and 44 deletions

27
bfg.c
View file

@ -174,8 +174,6 @@ int32_t bf_init(char *arg) {
bf_options.crs_len = crs_len; bf_options.crs_len = crs_len;
bf_options.current = bf_options.from; bf_options.current = bf_options.from;
bf_options.rain = 0;
bf_options.gcounter = 0;
memset((char *) bf_options.state, 0, sizeof(bf_options.state)); memset((char *) bf_options.state, 0, sizeof(bf_options.state));
@ -202,7 +200,7 @@ uint64_t bf_get_pcount() {
return foo; return foo;
} }
char *bf_next(_Bool rainy) { char *bf_next() {
int32_t i, pos = bf_options.current - 1; int32_t i, pos = bf_options.current - 1;
if (bf_options.current > bf_options.to) if (bf_options.current > bf_options.to)
@ -213,18 +211,7 @@ char *bf_next(_Bool rainy) {
return NULL; return NULL;
} }
if(rainy) for(i=0; i<bf_options.current; ++i)
{
bf_options.rain = bf_options.gcounter;
bf_options.ptr[0] = bf_options.crs[bf_options.state[0]];
for(i=1; i<bf_options.current; ++i) {
bf_options.ptr[i] = bf_options.crs[(bf_options.state[i] + bf_options.rain) % bf_options.crs_len];
bf_options.rain -= bf_options.rain / bf_options.crs_len;
}
bf_options.gcounter++;
}
else
for(i=0; i<bf_options.current; ++i)
bf_options.ptr[i] = bf_options.crs[bf_options.state[i]]; bf_options.ptr[i] = bf_options.crs[bf_options.state[i]];
//we don't subtract the same depending on wether the length is odd or even //we don't subtract the same depending on wether the length is odd or even
bf_options.ptr[bf_options.current] = 0; bf_options.ptr[bf_options.current] = 0;
@ -236,15 +223,6 @@ char *bf_next(_Bool rainy) {
printf(", x: %s\n", bf_options.ptr); printf(", x: %s\n", bf_options.ptr);
} }
//we revert the ordering of the bruteforce to fix the first static character
if(rainy) {
pos = 0;
while (pos < bf_options.current && (++bf_options.state[pos]) >= bf_options.crs_len) {
bf_options.state[pos] = 0;
pos++;
}
}
else
while (pos >= 0 && (++bf_options.state[pos]) >= bf_options.crs_len) { while (pos >= 0 && (++bf_options.state[pos]) >= bf_options.crs_len) {
bf_options.state[pos] = 0; bf_options.state[pos] = 0;
pos--; pos--;
@ -252,7 +230,6 @@ char *bf_next(_Bool rainy) {
if (pos < 0 || pos >= bf_options.current) { if (pos < 0 || pos >= bf_options.current) {
bf_options.current++; bf_options.current++;
bf_options.rain = 0;
memset((char *)bf_options.state, 0, sizeof(bf_options.state)); memset((char *)bf_options.state, 0, sizeof(bf_options.state));
} }

4
bfg.h
View file

@ -43,8 +43,6 @@ typedef struct {
char *crs; /* internal representation of charset */ char *crs; /* internal representation of charset */
char *ptr; /* ptr to the last generated password */ char *ptr; /* ptr to the last generated password */
uint32_t disable_symbols; uint32_t disable_symbols;
uint64_t rain;
uint64_t gcounter;
} bf_option; } bf_option;
extern bf_option bf_options; extern bf_option bf_options;
@ -52,7 +50,7 @@ extern bf_option bf_options;
#ifdef HAVE_MATH_H #ifdef HAVE_MATH_H
extern uint64_t bf_get_pcount(); extern uint64_t bf_get_pcount();
extern int32_t bf_init(char *arg); extern int32_t bf_init(char *arg);
extern char *bf_next(_Bool rainy); extern char *bf_next();
#endif #endif
#endif #endif

6
configure vendored
View file

@ -17,12 +17,10 @@ if [ "$1" = "-h" -o "$1" = "--help" ]; then
echo " --help this here" echo " --help this here"
echo echo
echo If the CC environment variable is set, this is used as the compiler for the configure tests. The default is \"gcc\" otherwise. echo If the CC environment variable is set, this is used as the compiler for the configure tests. The default is \"gcc\" otherwise.
echo You can also set PKG_CONFIG if necessary.
exit 0 exit 0
fi fi
test -z "$CC" && CC=gcc test -z "$CC" && CC=gcc
test -z "$PKG_CONFIG" && PKG_CONFIG=pkg-config
FHS="" FHS=""
SIXFOUR="" SIXFOUR=""
@ -1307,9 +1305,9 @@ echo "Checking for smbclient (libsmbclient/libsmbclient.h) ..."
if [ "X" = "X$XHYDRA_SUPPORT" ]; then if [ "X" = "X$XHYDRA_SUPPORT" ]; then
echo "Checking for GUI req's (pkg-config/gtk+-2.0) ..." echo "Checking for GUI req's (pkg-config/gtk+-2.0) ..."
XHYDRA_SUPPORT=`$PKG_CONFIG --help > /dev/null 2>&1 || echo disabled` XHYDRA_SUPPORT=`pkg-config --help > /dev/null 2>&1 || echo disabled`
if [ "X" = "X$XHYDRA_SUPPORT" ]; then if [ "X" = "X$XHYDRA_SUPPORT" ]; then
XHYDRA_SUPPORT=`$PKG_CONFIG --modversion gtk+-2.0 2> /dev/null` XHYDRA_SUPPORT=`pkg-config --modversion gtk+-2.0 2> /dev/null`
else else
XHYDRA_SUPPORT="" XHYDRA_SUPPORT=""
fi fi

28
hydra.c
View file

@ -503,8 +503,11 @@ void help(int32_t ext) {
"[-C FILE]] [-e nsr]" "[-C FILE]] [-e nsr]"
" [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W " " [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W "
"TIME] [-f] [-s PORT]" "TIME] [-f] [-s PORT]"
#ifdef HAVE_MATH_H #ifndef HAVE_MATH_H
" [-x MIN:MAX:CHARSET]" " [-x +LINES]"
#else
" [ [-x MIN:MAX:CHARSET] | [-x +LINES] ]"
#endif #endif
" [-c TIME] [-ISOuvVd46] [-m MODULE_OPT] " " [-c TIME] [-ISOuvVd46] [-m MODULE_OPT] "
//"[server service [OPT]]|" //"[server service [OPT]]|"
@ -522,11 +525,14 @@ void help(int32_t ext) {
" -p PASS or -P FILE try password PASS, or load several " " -p PASS or -P FILE try password PASS, or load several "
"passwords from FILE\n"); "passwords from FILE\n");
PRINT_EXTEND(ext, PRINT_EXTEND(ext,
#ifdef HAVE_MATH_H #ifndef HAVE_MATH_H
" -x MIN:MAX:CHARSET password bruteforce generation, type " " -x +LINES read from stdin\n"
"\"-x -h\" to get help\n"
#else
" -x +LINES read from stdin\n"
" -x MIN:MAX:CHARSET password bruteforce generation, type\n"
"\"-x -h\" to get help\n" "\"-x -h\" to get help\n"
" -y disable use of symbols in bruteforce, see above\n" " -y disable use of symbols in bruteforce, see above\n"
" -r use a non-random shuffling method for option -x\n"
#endif #endif
" -e nsr try \"n\" null password, \"s\" login as pass " " -e nsr try \"n\" null password, \"s\" login as pass "
"and/or \"r\" reversed login\n" "and/or \"r\" reversed login\n"
@ -612,9 +618,10 @@ void help_bfg() {
" 'A' for uppercase letters, '1' for numbers, and for all " " 'A' for uppercase letters, '1' for numbers, and for all "
"others,\n" "others,\n"
" just add their real representation.\n" " just add their real representation.\n"
" -y disable the use of the above letters as placeholders\n" " -y disable the use of the above letters as placeholders\n\n"
" -r use a shuffling method called 'rain' to try to break\n" " -x +LINES\n\n"
" the linearity of the bruteforce\n" " LINES is the numer of lines read from standard input,\n"
" you must not set it above what stdin is going to produce.\n"
"Examples:\n" "Examples:\n"
" -x 3:5:a generate passwords from length 3 to 5 with all " " -x 3:5:a generate passwords from length 3 to 5 with all "
"lowercase letters\n" "lowercase letters\n"
@ -626,6 +633,7 @@ void help_bfg() {
"only of /%%,.-\n" "only of /%%,.-\n"
" -x 3:5:aA1 -y generate passwords from length 3 to 5 with a, A and " " -x 3:5:aA1 -y generate passwords from length 3 to 5 with a, A and "
"1 only\n" "1 only\n"
" -x +250 test with the first 250 lines of standard input\n"
"\nThe bruteforce mode was made by Jan Dlabal, " "\nThe bruteforce mode was made by Jan Dlabal, "
"http://houbysoft.com/bfg/\n"); "http://houbysoft.com/bfg/\n");
exit(-1); exit(-1);
@ -2476,11 +2484,11 @@ int main(int argc, char *argv[]) {
modusage = 1; modusage = 1;
break; break;
case 'x': case 'x':
if(optarg[0] == '-') { if(optarg[0] == '+') {
hydra_options.read_stdin = 1; hydra_options.read_stdin = 1;
hydra_options.stdin_lines = atoi(&optarg[1]); hydra_options.stdin_lines = atoi(&optarg[1]);
if(hydra_options.stdin_lines < 1) { if(hydra_options.stdin_lines < 1) {
fprintf(stderr, "Using stdin, you must give the numbers of lines to treat: -x -250"); fprintf(stderr, "Using stdin, you must give the numbers of lines to treat: -x +250\n");
exit(-1); exit(-1);
} }
} }

View file

@ -206,7 +206,8 @@ typedef struct {
char *server; char *server;
char *service; char *service;
char bfg; char bfg;
int8_t rainy; int32_t read_stdin;
int32_t stdin_lines;
int32_t skip_redo; int32_t skip_redo;
} hydra_option; } hydra_option;