对一个在线学习的秒挂助手的破解
本帖最后由 wmsuper 于 2017-5-15 23:54 编辑0x01 软件分析
软件是由C#写的,需要充值,否则不能使用,其次软件并没有加壳,猜测能直接爆破。
0x02 软件破解
直接改跳转,把brtrue.s->(206)改成brtrue.s->(188)即无论正确与否都跳转到下一句,到这里,保存之后能成功运行并开始进行秒挂操作,看样子是成功破解了
0x03 遇到问题
在破解第二天之后,发现软件不行了,全部失败,估计有验证。
仔细查看代码,发现程序在确认信息的时候,会发送支付请求,但是实际上余额不足不会发起支付请求的,所以这样会被作者察觉可能软件被非法修改。那么他是如何让秒挂结果失败的呢?进一步发现有一处登陆的地方,获取登陆后的cookies,但是登陆的账号和密码并不是发往在线学习网站,而是发往作者服务器的,由作者的服务器作为代{过}{滤}理对在线学习的网站发起请求,
并返回对应的登陆cookies,所以作者可以轻易把账号或IP作为黑名单拉黑。
示意图如下:
从以上可以知道,软件并没有实现登陆网站的逻辑,登陆逻辑在服务器上,但是却实现了秒挂的代码,所以要实现的是直接登陆获取获取登陆cookies而不依赖作者的服务器。
0x04 软件补完计划
先把程序反编译并导出,并把所有关于支付的代码注释掉。研究了下登陆POST的请求,发现很简单,教科书式的登陆:
写出获取cookies的函数,替换掉原来获取cookies的代码,这样就能把软件缺少的那部分代码逻辑补完了(ps:还有一处获取cookies的地方,原理差不多,不再赘述。)
public string getCookies(string url, string account, string password)
{
CookieContainer cc = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
string postData = "txtLoginName=" + account + "&txtPassword=" + password;
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
request.ProtocolVersion = HttpVersion.Version11;
request.AllowAutoRedirect = true;
request.ContentLength = byteArray.Length;
request.CookieContainer = cc;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
//判断登录是否成功
// Console.WriteLine(responseFromServer);
if (responseFromServer.Contains("用户名或密码错误"))
return "-1";
else
return cc.GetCookieHeader(request.RequestUri); ;
}
this.student_COOKIE =getCookies("http://student.uestcedu.com/login.jsp", this.txtUserName.Text, this.txtPassWord.Text);
0x05 建议
1.加强壳,比较厉害当然是DNG啦。
2.把重要的代码实现逻辑都放在服务器上,那么破解程序的难度不亚于重新编写一个程序的难度。(注意处理网站的安全性,尤其是个人网站,否则黑客嘿嘿嘿) 学习了,思路开阔,干的漂亮! 其实吧,我觉得有些课真的很没必要....但我也理解学校的难处 破解后的demo在哪 谢谢分享 看一下,谢谢分享 受教了感谢分享 请问楼主有没有网络学习挂机类的工具破解案例或教程? 谢谢分享。。。涨姿势了。。 不谋而合的想法,可惜我研究的那个c#程序还么有成功!{:1_906:} 感谢发布原创作品,吾爱破解论坛因你更精彩! 学习学习感谢分享