⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callbacks.c

📁 hydra-5.2 密码破译工具,支持http,https等多种方式
💻 C
📖 第 1 页 / 共 2 页
字号:
	return TRUE;}int read_into(int fd) {        char in_buf[BUF_S];	char *passline;	char *start, *end;        int result;	GtkWidget *output;	GtkTextBuffer *outputbuf;	GtkTextIter outputiter;         if ((result = read(fd, in_buf, BUF_S-1)) < 0) {                g_warning("%s::%i: read returned negative!", __FILE__, __LINE__);                return FALSE;        } else if (result == 0) {                return FALSE;        } else {                in_buf[result] = 0;	}	output = lookup_widget(GTK_WIDGET(wndMain), "txtOutput");	outputbuf = gtk_text_view_get_buffer((GtkTextView*) output);	gtk_text_buffer_get_iter_at_offset(outputbuf, &outputiter, -1);	if (( passline = strstr(in_buf, "password: ")) == NULL ) {		gtk_text_buffer_insert(outputbuf, &outputiter, in_buf, result);	} else {		start = in_buf;		end = in_buf;		while ((end = (strchr(end + 1, '\n'))) < passline ) { 			start = end;		}		if ( start != in_buf ) {			gtk_text_buffer_insert(outputbuf, &outputiter, in_buf, (start - in_buf + 1));		}		gtk_text_buffer_insert_with_tags_by_name (outputbuf, &outputiter, start, (end - start + 1), "bold", NULL);		if (end - in_buf - result > 0 ) {			gtk_text_buffer_insert(outputbuf, &outputiter, end+1, -1);		}			}	if ( strstr(in_buf, " finished at ") != NULL ) {		gtk_text_buffer_insert_with_tags_by_name(outputbuf, &outputiter, "<finished>\n\n", -1, "bold", NULL);	}        if (result == BUF_S -1) /* there might be more available, recurse baby! */                return read_into(fd);        else                return TRUE;}/* wait for hydra output */static int wait_hydra_output(gpointer data) {	static int stdout_ok = TRUE, stderr_ok = TRUE;	fd_set rset;	struct timeval tv;	int result, max;	int *fd = data;	int status;	g_assert((stdout_ok == TRUE) || (stderr_ok == TRUE));	tv.tv_sec = 0;	tv.tv_usec = 0;	FD_ZERO(&rset);	max = -1;	if (stdout_ok) {		FD_SET(fd[0], &rset);		max = fd[0];	}	if (stderr_ok) {		FD_SET(fd[1], &rset);		if (-1 == max)			max = fd[1];		else			max = fd[0]>fd[1] ? fd[0] : fd[1];	}	result = select(max + 1, &rset, NULL, NULL, &tv);	if (result < 0)		g_error("wait_hydra_output: select returned negative!");	else if (result == 0)		return TRUE;	if (stdout_ok && FD_ISSET(fd[0], &rset))		stdout_ok = read_into(fd[0]);	if (stderr_ok && FD_ISSET(fd[1], &rset))		stderr_ok = read_into(fd[1]);	if (!(stdout_ok || stderr_ok)) {		waitpid(hydra_pid, &status, 0);		hydra_pid = 0;		stdout_ok = stderr_ok = TRUE;		return FALSE;	} else		return TRUE;}/* assumes a successfull pipe() won't set the fd's to -1 */static void close_pipe(int *pipe) {	if (-1 != pipe[0]) {		close(pipe[0]);		pipe[0] = -1;	}	if (-1 != pipe[1]) {		close(pipe[1]);		pipe[1] = -1;	}}/* executes the command stored in command->elemets (which is suitable for execv()) * returns an int *pfd with file descriptors: * pfd[0] STDOUT output of the command and * pfd[1] STDERR output of the command */int *popen_re_unbuffered(char *command) {	static int p_r[2] = {-1, -1}, p_e[2] = {-1, -1};	static int *pfd = NULL;	hydra_pid = 0;	char *options[128];	update_statusbar();	/* only allocate once */	if (NULL == pfd)		pfd = malloc(sizeof(int)*2);	/* clean up from last command */	close_pipe(p_r);	close_pipe(p_e);	if (pipe(p_r) < 0 || pipe(p_e) < 0) {		g_warning("popen_rw_unbuffered: Error creating pipe!");		return NULL;	}	if ((hydra_pid = fork()) < 0) {		g_warning("popen_rw_unbuffered: Error forking!");		return NULL;	} else if (hydra_pid == 0) { /* child */		if (setpgid(getpid(), getpid()) < 0)			g_warning("popen_rw_unbuffered: setpgid() failed");		if (close(p_r[0]) < 0)			g_warning("popen_rw_unbuffered: close(p_r[0]) failed");		if (p_r[1] != STDOUT_FILENO)			if (dup2(p_r[1], STDOUT_FILENO) < 0)				g_warning("popen_rw_unbuffered: child dup2 STDOUT failed!");		if (close(p_r[1]) < 0)			g_warning("popen_rw_unbuffered: close(p_r[1]) failed");		if (close(p_e[0]) < 0)			g_warning("popen_rw_unbuffered: close(p_e[0]) failed");		if (p_e[1] != STDERR_FILENO)			if (dup2(p_e[1], STDERR_FILENO) < 0)				g_warning("popen_rw_unbuffered: child dup2 STDERR failed!");		if (close(p_e[1]) < 0)			g_warning("popen_rw_unbuffered: close(p_e[1]) failed");		(void) hydra_get_options(options);		execv(HYDRA_BIN, options);		g_warning("%s %i: popen_rw_unbuffered: execv() returned", __FILE__, __LINE__);		int k;		for ( k = 0; options[k] != NULL; k++ ){			g_warning(options[k]);		}		gtk_main_quit();	} else { /* parent */		if (close(p_r[1]) < 0)			g_warning("popen_rw_unbuffered: close(p_r[1]) (parent) failed");		if (close(p_e[1]) < 0)			g_warning("popen_rw_unbuffered: close(p_e[1]) (parent) failed");		pfd[0] = p_r[0];		pfd[1] = p_e[0];		return pfd;	}	g_assert_not_reached();	return pfd;}voidon_quit1_activate                      (GtkMenuItem     *menuitem,                                        gpointer         user_data){	gtk_main_quit();}voidon_about1_activate                     (GtkMenuItem     *menuitem,                                        gpointer         user_data){}voidon_btnStart_clicked                   (GtkButton       *button,                                        gpointer         user_data){	int *fd = NULL;	fd = popen_re_unbuffered(NULL);	g_timeout_add (200, wait_hydra_output, fd);}voidon_btnStop_clicked                   (GtkButton       *button,                                        gpointer         user_data){	if (hydra_pid != 0){		kill(hydra_pid, SIGTERM);			hydra_pid = 0;	}}voidon_wndMain_destroy                     (GtkObject       *object,                                        gpointer         user_data){	if (hydra_pid != 0){		kill(hydra_pid, SIGTERM);			hydra_pid = 0;	}	gtk_main_quit();}gbooleanon_entTargetFile_button_press_event    (GtkWidget       *widget,                                        GdkEventButton  *event,                                        gpointer         user_data){	hydra_select_file((GtkEntry *) widget, "Select target list");	gtk_widget_grab_focus(widget);	return TRUE;}gbooleanon_entUsernameFile_button_press_event  (GtkWidget       *widget,                                        GdkEventButton  *event,                                        gpointer         user_data){	hydra_select_file((GtkEntry *) widget, "Select username list");	gtk_widget_grab_focus(widget);	return TRUE;} gbooleanon_entPassFile_button_press_event      (GtkWidget       *widget,                                        GdkEventButton  *event,                                        gpointer         user_data){	hydra_select_file((GtkEntry *) widget, "Select password list");	gtk_widget_grab_focus(widget);	return TRUE;}gbooleanon_entColonFile_button_press_event      (GtkWidget       *widget,                                        GdkEventButton  *event,                                        gpointer         user_data){	hydra_select_file((GtkEntry *) widget, "Select colon seperated user,password list");	gtk_widget_grab_focus(widget);	return TRUE;}voidon_btnSave_clicked                     (GtkButton       *button,                                        gpointer         user_data){#ifdef GTK_TYPE_FILE_CHOOSER	GtkWidget *dialog;	char *filename;	gchar *text;	int fd;	GtkWidget *output;	GtkTextBuffer *outputbuf;	GtkTextIter start;	GtkTextIter end;	dialog = gtk_file_chooser_dialog_new ("Save output", (GtkWindow *)wndMain, GTK_FILE_CHOOSER_ACTION_SAVE,					GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL,					GTK_RESPONSE_CANCEL, NULL);	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {		filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));		output = lookup_widget(GTK_WIDGET(wndMain), "txtOutput");		outputbuf = gtk_text_view_get_buffer((GtkTextView*) output);		gtk_text_buffer_get_start_iter(outputbuf, &start);		gtk_text_buffer_get_end_iter(outputbuf, &end);				text = gtk_text_buffer_get_text(outputbuf, &start, &end, TRUE);		fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY);		if ( fd > 0 ) {			write(fd, text, strlen(text));			close(fd);		}		g_free(text);			g_free(filename);	}	gtk_widget_destroy (dialog);#endif}voidon_chkColon_toggled                    (GtkToggleButton *togglebutton,                                        gpointer         user_data){	GtkWidget *user =  lookup_widget(GTK_WIDGET(wndMain), "frmUsername");;		GtkWidget *pass =  lookup_widget(GTK_WIDGET(wndMain), "frmPass");	if (gtk_toggle_button_get_active(togglebutton)){		gtk_widget_set_sensitive(user, FALSE);		gtk_widget_set_sensitive(pass, FALSE);	} else {		gtk_widget_set_sensitive(user, TRUE);		gtk_widget_set_sensitive(pass, TRUE);	}}voidon_btnClear_clicked                    (GtkButton       *button,                                        gpointer         user_data){	GtkWidget *output;	GtkTextBuffer *outputbuf;	output = lookup_widget(GTK_WIDGET(wndMain), "txtOutput");	outputbuf = gtk_text_view_get_buffer((GtkTextView*) output);	gtk_text_buffer_set_text(outputbuf, "", -1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -