XX 考试模拟软件 二级c & 二级c vip 破解
本帖最后由 姐又寡闻了 于 2019-6-6 18:50 编辑【零】初衷
(萌新发帖,有所不周之处,望海涵)
因为有个朋友 要考 二级c下载软件后发现要付费,于是我就想可不可以 运用 从各位大佬这里学到的知识来破解它。
https://www.52pojie.cn/forum.php?mod=image&aid=1046858&size=300x300&key=fd4bda4c25c5c1bd&nocache=yes&type=fixnone
【一】查壳,od载入。。。
我一开始 ,就直接od载入,发现程序自动退出了,再附加一看,也不行,在网上找了许多资料后,下载了许多.net的专用工具(详见后文)
调整了思路后:
我 使用 DONETStringSearch 查找了.exe 结果什么 有用的字符串都没找到,那么,破解的关键 就在dll文件上了
我看到了这个名字:https://www.52pojie.cn/forum.php?mod=image&aid=1046866&size=300x300&key=d9877173663bce2f&nocache=yes&type=fixnone
那么,查一下是否混淆,并使用 de4dot反混淆了一下
使用 Reflector.exe 打开了 SystemFream.dll https://www.52pojie.cn/forum.php?mod=image&aid=1046868&size=300x300&key=64d4e05fd7337196&nocache=yes&type=fixnone
哇,我看到了什么:
那么很显然我们已经到了 入口
【二】 分析
经过分析后,我找到了关键函数 (这多亏了 Reflector 可以把 源文件 使用 c#源码的形式 展现出来)
如图:
遍历源代码 我们找到了 关键跳转:
源代码如下:
if (!new CheckNetStatus().CallPing("www.baidu.com")) //
{ if ((this.tbSN.Text != "MSPK34SF1M27WQ") || (Parameters.CurrentCourse.Sign.ToLower() != "msofficenew"))
{ if ((this.tbSN.Text == "MSPK34SF1M27WQ") || (Parameters.CurrentCourse.Sign.ToLower() == "cpro"))
{ sok = new TipsOK("激活提示", "请检测网络是否通畅!"){ //
SetIco = Resources.B_weiqu
};
sok.ShowDialog();
return;
}
str= "Ok"; //
}
else
{ str= "Ok"; }
}
else
{
try { str = 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(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) //
{if (s== "Ok")//
{ 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 = class3.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"))//
{ new TipsOK("激活提示", "输入的激活码不存在,请输入正确的激活码!")
{ SetIco = Resources.B_wuyu }.ShowDialog(); return; }
new TipsOK("激活提示", "未知异常,请稍后重试!")
{ SetIco = Resources.B_weiqu }.ShowDialog();
}
既然我们胡乱输入 会跳转到else if ((num == 0xb8190cac) && (s== "SnNotExist"))// { new TipsOK("激活提示", "输入的激活码不存在,请输入正确的激活码!")
{ SetIco = Resources.B_wuyu }.ShowDialog(); return; }
new TipsOK("激活提示", "未知异常,请稍后重试!")
{ SetIco = Resources.B_weiqu }.ShowDialog();
所以这个也要改两处else if (num == 0x65E485CF) // 改成num== 0xb8190cac
if (s== "Ok")//改成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(使用说明,在压缩包里)
二级C考试模拟 破解.zip
二级C语言VIP题库 破解.7z
NO3 工具 (附件大小限制,网盘)
de4dot 链接:https://pan.baidu.com/s/1qZATwwk 密码:gcjg
Reflector9.0.1.374(已包含插件)链接:https://pan.baidu.com/s/1jJiFsqE 密码:5nr6
【n】最后,如果我在文中有疏漏之处,敬请指正,新人第一次发帖,请轻喷,谢谢{:1_893:}
激动得想哭,感谢楼主!3月份我也要考二级C语言,这个软件终于让我给找到了……:'(weeqw 朽. 发表于 2018-2-6 22:27
问下 第一个附件是普通的题库吗 第二个才是vip题库吗? vip题库的原件哪里下载啊。。
都是一样的,一个zip,一个7z,VIP题库可以直接去未来教育那里下载 没人回贴吗?? 我试过了 这个东西很好 都能用牛{:1_893:} 计算机类题库其实只用改一个字就OK了,楼主你去找找这段
course.Status = ((a == dataTable.Rows["ClassType"].ToString()) ? "已激活" : "未激活"); 问下 第一个附件是普通的题库吗 第二个才是vip题库吗? vip题库的原件哪里下载啊。。 有2018的吗 这怎么是2017呢 朽. 发表于 2018-2-6 22:44
有2018的吗 这怎么是2017呢
链接:https://pan.baidu.com/s/1hufCaZq 密码:2333
给你一个 朽. 发表于 2018-2-6 22:27
问下 第一个附件是普通的题库吗 第二个才是vip题库吗? vip题库的原件哪里下载啊。。
http://www.eduexam.cn/wt/ 谢谢,收下了