private void cracker() { crakerKey(); this.Invoke(new VoidDelegate(this.bt_timer.Start)); this.runTime = 0; if (initDic()) { //初始化检查次数 initStatusCount(); //清空检查列表 this.list_cracker = new ConcurrentBag <string>(); //清空跳过列表 this.list_ip_break.Clear(); this.list_ip_user_break.Clear(); Boolean isScanport = this.chk_isScanPort.Checked; stp = new SmartThreadPool(); stp.MaxThreads = maxThread; creackerSumCount = 0; scanPortsSumCount = 0; //计算端口扫描总数 if (isScanport) { foreach (string serviceName in this.services_list.CheckedItems) { string[] ports = this.services[serviceName].Port.Split(','); scanPortsSumCount += this.list_target.Count * ports.Length; } } //更新状态 this.Invoke(new update(updateStatus)); foreach (string serviceName in this.services_list.CheckedItems) { string[] ports = this.services[serviceName].Port.Split(','); foreach (string sport in ports) { int port = int.Parse(sport); foreach (string ip in list_target) { if (!isScanport) { list_cracker.Add(ip + ":" + port + ":" + serviceName); } else { stp.QueueWorkItem <string, string, int>(ScanPort, ip, serviceName, port); stp.WaitFor(1000); } } } } stp.WaitForIdle(); if (isScanport) { LogMessage("验证端口是否开放完成!"); } int c = stp.CurrentWorkItemsCount; LogMessage("开始检查" + this.list_cracker.Count + "个目标," + services_list.CheckedItems.Count + "个服务......."); //计算检查总数 if (this.notAutoSelectDic == false) { foreach (string serviceName in this.services_list.CheckedItems) { creackerSumCount += list_cracker.Count * this.services[serviceName].ListUserName.Count * this.services[serviceName].ListPassword.Count; } } else { creackerSumCount += list_cracker.Count * this.list_username.Count * this.list_password.Count * this.services_list.CheckedItems.Count; } foreach (string serviceName in this.services_list.CheckedItems) { HashSet <string> clist_username = null; HashSet <string> clist_password = null; if (this.notAutoSelectDic == false) { clist_username = this.services[serviceName].ListUserName; clist_password = this.services[serviceName].ListPassword; } else { clist_username = this.list_username; clist_password = this.list_password; } foreach (string user in clist_username) { //替换变量密码 string username = user + this.txt_username_ext.Text; HashSet <string> list_current_password = new HashSet <string>(); foreach (string cpass in clist_password) { string newpass = cpass.Replace("%user%", user); if (!list_current_password.Contains(newpass)) { list_current_password.Add(newpass); } else { //重复密码 creackerSumCount -= this.list_cracker.Count; } } foreach (string pass in list_current_password) { foreach (string cracker in this.list_cracker) { if (cracker.EndsWith(serviceName)) { stp.QueueWorkItem <string, string, string>(crackerService, cracker, username, pass); stp.WaitFor(1000); } } } } } stp.WaitForIdle(); stp.Shutdown(); LogInfo("检查完成!"); } //更新状态 this.Invoke(new update(updateStatus)); this.btn_cracker.Enabled = true; this.services_list.Enabled = true; this.Invoke(new VoidDelegate(this.bt_timer.Stop)); }
public void crackerpass() { stp.MaxThreads = maxThread; stp.Start(); int timeout = int.Parse(this.cmb_timeout.Text); taskCount += urls_list.Count; foreach (String domain in urls_list) { try { String ndomain = Tool.updateTheDomain(domain); //现获取用户名 stp.QueueWorkItem <String, int>(getUserNames, ndomain, timeout); stp.WaitFor(1000); } catch (Exception e) { Tool.SysLog("执行线程异常!" + domain + e.Message); continue; } } stp.WaitForIdle(); //stp.Start(); this.txt_log.Invoke(new changeLog(updateLog), "获取用户名完成,正在开始尝试破解,请稍候....."); foreach (List <String> list in creaker_table.Values) { taskCount += pass_list.Count * list.Count; } foreach (String pass in this.pass_list) { IDictionaryEnumerator ide = null; lock (creaker_table) { ide = creaker_table.GetEnumerator(); } while (ide.MoveNext()) { String ndomain = Tool.updateTheDomain(ide.Key.ToString()); List <String> userlist = (List <String>)ide.Value; if (userlist != null && userlist.Count > 0) { foreach (String user in userlist) { try { stp.QueueWorkItem <String, String, String>(cracker, ndomain, user, pass); stp.WaitFor(1000); } catch (Exception e) { Tool.SysLog("执行线程异常!" + ndomain + e.Message); continue; } } } } this.txt_log.Invoke(new changeLog(updateLog), "正在尝试密码队列:" + pass); } stp.WaitForIdle(); stopThread(); MessageBox.Show("破解完成!"); }