好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 姐又寡闻了 于 2019-6-6 18:50 编辑
【零】初衷
(萌新发帖,有所不周之处,望海涵)
因为有个朋友 要考 二级c 下载软件后发现要付费,于是我就想可不可以 运用 从各位大佬这里学到的知识来破解它。
【一】查壳,od载入。。。
我一开始 ,就直接od载入,发现程序自动退出了,再附加一看,也不行,在网上找了许多资料后,下载了许多.net的专用工具(详见后文)
调整了思路后:
我 使用 DONETStringSearch 查找了.exe 结果什么 有用的字符串都没找到,那么,破解的关键 就在dll文件上了
我看到了这个名字:
那么,查一下是否混淆,并使用 de4dot反混淆了一下
使用 Reflector.exe 打开了 SystemFream.dll
哇,我看到了什么:
那么很显然我们已经到了 入口
【二】 分析
经过分析后,我找到了关键函数 (这多亏了 Reflector 可以把 源文件 使用 c#源码的形式 展现出来)
如图:
遍历源代码 我们找到了 关键跳转:
源代码如下:
if (!new CheckNetStatus().CallPing(".baidu.com")) // [1]
{ if ((this.tbSN.Text != "MSPK34SF1M27WQ") || (Parameters.CurrentCourse.Sign.ToLower() != "msofficenew"))
{ if ((this.tbSN.Text == "MSPK34SF1M27WQ") || (Parameters.CurrentCourse.Sign.ToLower() == "cpro"))
{ sok = new TipsOK("激活提示", "请检测网络是否通畅!"){ //[2]
SetIco = Resources.B_weiqu
};
sok.ShowDialog();
return;
}
str= "Ok"; //[3]
}
else
{ str= "Ok"; }
}
else
{
try { [url=]str[/url] = new UserRegister().PostInfo(this.CreateJson()); }
catch
{ this.btnSub2_Click(null, null);
}
}
switch (str)
{ case "Ok":
{ base.Close();
this.isOk = true;
SqliteHelper.set_ConStr(AppDomain.CurrentDomain.BaseDirectory + @"data\" + Parameters.CurrentCourse.Sign + @"\data.dat");
JFT_Class class2 = new JFT_Class();
JFT_Class model = class2.GetModel();
model.set_SN(this.tbSN.Text);
model.set_ClassType(StringTest.DesEncrypt(Parameters.HMAC + this.tbSN.Text + Parameters.CurrentCourse.Sign));
class2.UpdateClass([url=]model);
sok = new TipsOK("激活提示", "恭喜,软件成功激活!")
...........
那么问题已经很清晰了,我选择断网会 报错 "激活提示", "请检测网络是否通畅!"
我们只需要在该处 不跳转 就 破解 成立
下面我使用了 reflector 的一个插件 reflexil (该插件可以修改 IL反汇编 代码)
又因为 if ((this.tbSN.Text == "MSPK34SF1M27WQ") || (Parameters.CurrentCourse.Sign.ToLower() == "cpro"))
使用了 || 所以我们需要修改两处IL代码 (具体代码含义见后文)
我们在
(116) IL_074 处 //其中 116 是在 reflector 的插件 reflexil 中显示的偏移量
(143) IL_08F 处 //IL_08F 是在 IL
全部改为 bs_true_s
如右图:
改完收工。
【三】新的开始
在破解vip题库的时候遇到了很多问题
首先是32位的reflector 改数据时 溢出 ,改完后成立一个负数
else if (num== 0x65E485CF) //[1]
{ if (s== "Ok")//[2]
{ base.Close();
this.isOk = true;
SqliteHelper.set_ConStr(AppDomain.CurrentDomain.BaseDirectory + @"data\" + Parameters.CurrentCourse.Sign + @"\data.dat");
JFT_Class class3 = new JFT_Class();
JFT_Class model = [url=]class3[/url].GetModel();
model.set_SN(this.tbSN.Text);
model.set_ClassType(StringTest.DesEncrypt(Parameters.HMAC + this.tbSN.Text + Parameters.CurrentCourse.Sign));
class3.UpdateClass(mode)l;
FileManage.WriteFile(AppDomain.CurrentDomain.BaseDirectory + "User.dat", this.tbUser.Text + "|" + this.tbPass.Text, true);
new TipsOK("激活提示", "恭喜,软件成功激活!")
...............
else if ((num == 0xb8190cac) && (s == "SnNotExist")) //[3]
{ new TipsOK("激活提示", "输入的激活码不存在,请输入正确的激活码!")
{ SetIco = Resources.B_wuyu }.ShowDialog(); return; }
new TipsOK("激活提示", "未知异常,请稍后重试!")
{ SetIco = Resources.B_weiqu }.ShowDialog();
}
既然我们胡乱输入 会跳转到else if ((num == 0xb8190cac) && (s== "SnNotExist")) //[3] { new TipsOK("激活提示", "输入的激活码不存在,请输入正确的激活码!")
{ SetIco = Resources.B_wuyu }.ShowDialog(); return; }
new TipsOK("激活提示", "未知异常,请稍后重试!")
{ SetIco = Resources.B_weiqu }.ShowDialog();
所以这个也要改两处 else if (num == 0x65E485CF) //[1] 改成num== 0xb8190cac
if (s== "Ok")//[2] 改成 s != "Ok"
但是把 0x65E485CF 改成 0xb8190cac 在 32位环境下是 负数
else if ((num== -1206317908) && (s == "SnNotExist"))
本来以为 凉凉 但是 细细一看源码
IL_01ab: pop
IL_01ac: ret
IL_01ad: ldloc.1
IL_01ae: ldc.i4 0xb8190cac
IL_01b3: bgt.un IL_0340
IL_01b8: ldloc.1
IL_01b9: ldc.i4 0x65E485CF
IL_01be: beq.s IL_01fe //跳转到 激活成功
IL_01c0: ldloc.1
IL_01c1: ldc.i4 0xb8190cac
IL_01c6: beq.s IL_01cd //跳转到 激活失败
IL_01c8: br IL_038d
IL_01cd: ldloc.0
IL_01ce: ldstr "SnNotExist"
我一看,顿时放心了,成功在失败之前 被测试
所以
把 IL_01b9: ldc.i4 0x65E485CF
IL_01be: beq.s IL_01fe //跳转到 激活成功
改为
IL_01b9: ldc.i4 0xb8190cac
IL_01be: beq.s IL_01fe //跳转到 激活成功
PS: 改数据时如果使用 Reflector 不行,那就 用 winhex 搜 0x65E485CF,我的电脑上就出现了这个问题,
偏移量我忘了,大概是在 9E0A 处,但平台不同,版本不同,等等,不确定
然后在 (521)IL_0209 处 改为 brtrue
测试 通过
【软件&破解后的文件】
no.1
Reflector、reflexil、De4Dot、IL指令速查表
http://blog.csdn.net/u010349629/article/details/52058407
no.2 破解DLL(使用说明,在压缩包里)
[url=]二级C考试模拟 破解.zip[/url]
[url=]二级C语言VIP题库 破解.7z[/url]
NO3 工具 (附件大小限制,网盘)
[url=]de4dot 链接:https://pan.baidu.com/s/1qZATwwk 密码:gcjg[/url]
[url=]Reflector9.0.1.374(已包含插件) 链接:https://pan.baidu.com/s/1jJiFsqE 密码:5nr6[/url]
【n】最后,如果我在文中有疏漏之处,敬请指正,新人第一次发帖,请轻喷,谢谢
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|