int reaver_main(int argc, char **argv) { int ret_val = EXIT_FAILURE, r = 0; time_t start_time = 0, end_time = 0; struct wps_data *wps = NULL; globule_init(); init_default_settings(); fprintf(stderr, "\nReaver v%s WiFi Protected Setup Attack Tool\n", get_version()); fprintf(stderr, "Copyright (c) 2011, Tactical Network Solutions, Craig Heffner <*****@*****.**>\n\n"); if(argc < 2) { ret_val = reaver_usage(argv[0]); goto end; } /* Process the command line arguments */ if(process_arguments(argc, argv) == EXIT_FAILURE) { ret_val = reaver_usage(argv[0]); goto end; } /* Double check reaver_usage */ if(!get_iface() || (memcmp(get_bssid(), NULL_MAC, MAC_ADDR_LEN) == 0)) { reaver_usage(argv[0]); goto end; } /* If no MAC address was provided, get it ourselves */ if(memcmp(get_mac(), NULL_MAC, MAC_ADDR_LEN) == 0) { if(!read_iface_mac()) { fprintf(stderr, "[-] Failed to retrieve a MAC address for interface '%s'!\n", get_iface()); goto end; } } /* Sanity checking on the message timeout value */ if(get_m57_timeout() > M57_MAX_TIMEOUT) { set_m57_timeout(M57_MAX_TIMEOUT); } else if(get_m57_timeout() <= 0) { set_m57_timeout(M57_DEFAULT_TIMEOUT); } /* Sanity checking on the receive timeout value */ if(get_rx_timeout() <= 0) { set_rx_timeout(DEFAULT_TIMEOUT); } /* Initialize signal handlers */ sigint_init(); sigalrm_init(); /* Mark the start time */ start_time = time(NULL); /* Do it. */ crack(); /* Mark the end time */ end_time = time(NULL); /* Check our key status */ if(get_key_status() == KEY_DONE) { wps = get_wps(); cprintf(VERBOSE, "[+] Pin cracked in %d seconds\n", (int) (end_time - start_time)); cprintf(CRITICAL, "[+] WPS PIN: '%s'\n", get_pin()); if(wps->key) cprintf(CRITICAL, "[+] WPA PSK: '%s'\n", wps->key); if(wps->essid) cprintf(CRITICAL, "[+] AP SSID: '%s'\n", wps->essid); /* Run user-supplied command */ if(get_exec_string()) { r = system(get_exec_string()); } ret_val = EXIT_SUCCESS; } else { cprintf(CRITICAL, "[-] Failed to recover WPA key\n"); } save_session(); end: globule_deinit(); return ret_val; }
int poclidek_shell(struct poclidek_ctx *cctx) { const char *prompt_prefix = "poldek"; char *line, *s, *home; if (cctx->htcnf) { tn_hash *global = poldek_conf_get_section(cctx->htcnf, "global"); const char *s = global ? poldek_conf_get(global, "prompt", NULL) : NULL; if (s) { prompt_prefix = s; DBGF("prompt_prefix %s\n", s); } } if (!isatty(fileno(stdout))) { logn(LOGERR, _("not a tty")); return 0; } if (!init_shell(cctx)) exit(EXIT_FAILURE); initialize_readline(); histfile = NULL; if ((home = getenv("HOME"))) { int len = strlen(home) + strlen("/.poldek_history") + 2; histfile = alloca(len); snprintf(histfile, len, "%s/.poldek_history", home); read_history(histfile); } sigint_init(); sigint_push(sigint_cb); signal(SIGTERM, shell_end); signal(SIGQUIT, shell_end); printf(_("\nWelcome to the poldek shell mode. " "Type \"help\" for help with commands.\n\n")); shDone = 0; while (!shDone) { struct pkg_dent *currdir = sh_ctx.cctx->currdir; char prompt[255]; sigint_reset(); n_snprintf(prompt, sizeof(prompt), "%s:%s%s> ", prompt_prefix, currdir == NULL ? "/" : *currdir->name == '/' ? "" : "/", currdir == NULL ? "" : currdir->name); if ((line = readline(prompt)) == NULL) break; /* add to history? */ s = line; while (isspace(*s)) s++; if (*s) add_history(line); s = n_str_strip_ws(line); if (*s) { shInCmd = 1; DBGF("(%s)\n", s); MEMINF("BEFORE %s\n", s); poclidek_execline(cctx, NULL, s); MEMINF("AFTER %s\n", s); sigint_reset(); shDone = 0; shInCmd = 0; } free(line); signal(SIGTERM, shell_end); signal(SIGQUIT, shell_end); if (shQuit) shDone = 1; } if (histfile) write_history(histfile); sigint_pop(); msg(0, "\n"); return 1; }