[.NET破解]x云系列软件破解及简单美化
本帖最后由 无痕软件 于 2015-6-30 13:04 编辑2015年6月30日 12:37:49修复了CAD批量打印只能打前三张的问题。链接:http://pan.baidu.com/s/1nt24iet 密码:wq86
2015年4月14日14:20:41感谢论坛网友反馈的破解BUG,现已经修复。新的下载地址:http://pan.baidu.com/s/1nt9lNAx 密码:8j62若还有BUG,请跟帖反馈,谢谢。
前言: 在论坛混了很久,看了很多优秀的文章,最近也刚刚开始接触.NET破解,写这个文章完全是为了帮助和我一样初入门的朋友,教程很简单和基础,完全可以零基础操作,写的不好请大家海涵,另外大神请直接飞过。 工具: 1、.NET Reflector 8.3-反编译 2、reflexil IL-修改 3、ScanId-查壳 4、de4dot -脱壳知识点: 1、.NET Reflector的简单使用 2、IL语法的简单使用软件来源: 受@damgda文章:http://www.52pojie.cn/thread-339252-1-1.html 启发,在学习练手的过程中决定一锅踹了这一系列软件。软件官网大家自己百度。 正文: 以下所提到的待破解程序都使用ScanId-查壳后,de4dot去混淆。 将待破解文件直接拖到de4dot的exe程序上就可以脱壳,不用敲命令行。 一、CAD批量打图精灵 需要CAD环境才可以测试,正好折腾装修的图纸,所以装了CAD2010,嘿嘿,真是天时地利啊,软件安装以后,找到了2个核心的dll,脱壳。 直接.NET Reflector打开,寻找主窗口,一般以frm,fr等打头(编程习惯),从frm_load事件开始,我们看能找到些什么。 果然,第一个函数就是彩头,从这个窗体载入事件的逻辑我们可以看到,,再怎么折腾注册也会是个未注册版,除非替换这个文件。从作者的演示视频中我们也可以看到,确实注册以后作者会发给你2个dll文件替换。pprivate void method_5(){int num = this.method_85(); //获取剩余天数this.Text = this.Text + "(剩余" + Conversions.ToString(num) + "天)";this.vmethod_68().Text = "未注册";} 跟踪到:this.method_85() 直接修改返回天数,改个够用的数,因为后面还有很多地方都会调用这个函数,所以不能直接XX掉。具体方法:(后面修改同这,不再赘述)。 这里需要大家了解下IL,有汇编经验的应该学得很快,我也是边用边学,我菜鸟中的战斗公鸡,嘿嘿。(学习地址:http://www.cnblogs.com/flyingbirds123/archive/2011/01/29/1947626.html)使用Ldc.I4指令,将所提供的 int32 类型的值作为 int32 推送到计算堆栈上。给100年,哈哈,够用。记得ret返回,任何程序片段的结束都要返回哦。 this.vmethod_68().Text = "未注册"; //改成已注册,给我们伟大的52破解论坛。 接下来搜索字符串“注册”,看看还有什么。 终于,找到了主要的注册判断函数。从这个函数的逻辑上来看,只要调用这个函数就会有提示框弹出,但是试用的时候没有弹出,可能哪个地方有优化吧,暂时没找到。下面对这个函数进行简单的分析。有源码就是简单易懂,呵呵。比ASM强多了。private void method_2(){this.Visible = false;//自己不可见,可能是什么界面吧,没仔细看。if ((((Class57.smethod_0().eliHanIaHC() > Class57.smethod_0().ExpirationDays) || (DateTime.Compare(DateTime.Now.Date, Class57.smethod_0().ExpirationDate) > 0)) || (this.method_85() == 0)) && (Interaction.MsgBox("您使用的\"CAD批量打图精灵\"已超过试用期限,点\"确认\"查看注册流程。", MsgBoxStyle.OkCancel, "注册提示") == MsgBoxResult.Ok)){Class18.smethod_0();//跟踪了下,会转到作者主页,修改时上面全部干掉,防止弹框}if (((Class57.smethod_0().eliHanIaHC() <= Class57.smethod_0().ExpirationDays) && (DateTime.Compare(DateTime.Now.Date, Class57.smethod_0().ExpirationDate) <= 0)) && (this.method_85() != 0)){string str = Assembly.GetExecutingAssembly().GetName().Version.ToString();this.bool_0 = new Class34("QuickPlot", Class19.smethod_0(), 20, str, false/*重点,打开的版本,FALSE=试用,TRUE注册*/, "cMbOpAivS6Gq61eR4SGkrNlz", "TQbLakcydsU0DknBkKCHnLn0XalLyrCl").method_0();//method_0()关键方法,返回真,有戏,假,就直接OVERif (!this.bool_0){Interaction.MsgBox("您使用的\"CAD批量打图精灵\"已失效!", MsgBoxStyle.Critical, "提示");}if (this.bool_0){int num = 0;num = Conversions.ToInteger(Application.GetSystemVariable("BACKGROUNDPLOT"));Application.SetSystemVariable("BACKGROUNDPLOT", 0);try{this.method_4();this.method_3();this.method_82();}catch (Exception exception1){ProjectData.SetProjectError(exception1);ProjectData.ClearProjectError();}finally{Application.SetSystemVariable("BACKGROUNDPLOT", num);Class5.frProgress_0.Close();}}}if (Class5.bool_0){this.Visible = true;}else{this.Close();}}
查看下这个.method_0()方法。internal bool method_0(){ string str; bool? nullable = null; Random random = new Random(); if (random.Next(this.int_0) == 0) { nullable = this.method_1();//好像是从xml取注册数据,从上下文看的,图省事,这里直接改成True即可,我们往下跟踪了下他的实现 } if (this.bool_0)// 版本区分,注册和试用版 { str = "tlic"; } else { str = "rlic"; } if (nullable == true) { Registry.SetValue(@"HKEY_CURRENT_USER\Software\YiyunSoftware\" + this.string_0, str, "true", RegistryValueKind.String); return true; } if (nullable == false) { Registry.SetValue(@"HKEY_CURRENT_USER\Software\YiyunSoftware\" + this.string_0, str, "false", RegistryValueKind.String); return false; } object obj2 = Registry.GetValue(@"HKEY_CURRENT_USER\Software\YiyunSoftware\" + this.string_0, str, true); return ((obj2 != null) && Convert.ToBoolean(obj2));} 往下看到一个线程的委托函数,是nullable的返回值,既然需要nullable返回true,那我们干脆将每个分支都改成true,修改2处 前面提到的new Class34()构造函数中一个参数需要改成true,注册判断的时候这个True决定了版本 关于这些指令的修改位置是怎么找到的,需要大家对IL指令、程序流程的熟悉。我也是边改边蒙的,嘿嘿。 注册失效时,打开软件主页,以防万一,使用BR指令修改(无条件地将控制转移到目标指令)。 前面提到了这个程序有点demo的性质,在后面发现了一处demo的特征,找了很久没找到限制打印的代码在哪里,不管了,先干掉意淫下。后面也测试了,没有发现只打印3页的问题,可能是注册了的缘故,有问题大家跟帖。 用软件查看,lb存在,但是隐藏了,不可见。 经过以上的修改,其实这里完全可以把标题写专业版了。从作则网站的注册流程看到,注册以后会发个重新打包的版本给你,这个demo也就这样了,起码里面的核心功能没有缺失。 二、Office批量打印精灵软件打开: 去混淆程序,用.NET Reflector 8.3打开,按F3,搜索字符串 “注册”,经过分析发现注册授权检测类ObpgLicChecker,其中的成员函数BaseCheck(),程序会多次调用进行注册检测,我们需要直接从源头解决。(也可以改if中函数的结果哦,后面有用到) 主要是移除一个if判断,并且在对类的私有成员赋值按成以后就返回,后面的垃圾代码就不用执行了。 打开reflexil,查看IL,直接删除掉不需要的判断,并在适当位置加入ret返回。修改好以后如上图。 下面顺便分析下哪些地方用到了这个类,选中这个类,Ctrl+R,打开分析窗口,直接展开到Used By,作者还是蛮上心的,基本上主要的功能处都有是否注册的判断,但是我们不怕,因为我们堵住了源头,一切高枕无忧。 已改以上一处以后,保存,不处意外,已经注册成功。 接下来我们做些美化,并查看一些其他代码,是否有值得关注的地方。 注册按钮,判断method_0()是否返回1,返回1,注册成功。 修改method_0()的返回值,直接给1. 网络KEY注册的按钮 IL修改: 改完的效果 最后:加个破解的LOGO。 字符串搜索:“如果您有” 修改location主要是让标签创建的时候移动下位置,好看点,因为我们改了label中的内容,就不对中了。选中,右键,Edit 修改标签单击事件,打开52破解论坛 修改结果: 至此,这个软件就完全破解完成。
三、MagicTable 这个软件给做机械制图的朋友,那真是牛逼哄哄啊。(因为我以前就是做大型机械结构件设计的,提取材料清单真的好方便) 老规矩,载入,查找“注册”字符串。 查看了下,发现会反复调用这个函数检测是否注册,跟第二个程序如出一辙。 改掉第一个判断。前面几个赋值完成就返回。 本来想加个LOGO给52,找了半天字符串都在资源里,就没改了,不知道怎么改,有人会的回帖哦,谢谢。(用HEX改就没试了) CAD相关的2个软件需要在CAD中用命令行打开哦。破解文件直接覆盖就可以了。请对准以下版本覆盖。
写教程打字上图不易,且行且珍惜。 大家多给点热心和CB。
老大,再次试验。下原文件安装后没打补丁的情况下。魔术表格点注册的位置能够跳出来提示要注册和试用几天,但是打过补丁后一点注册就跳出"JIT编译器受限制。。。"与上图一致,我想是否是系统的哪个文件安装少了,或是文件升级不足。另外一个原因是否是补丁文件是在WIN7下调试,若在XP系统下调试会解决此问题。求真像。 本帖最后由 taocitc 于 2015-10-15 11:26 编辑
只要修改他的判断,让他恒等于1就完了,不需要改其他地方,而且改完点注册不会假死。暂时没发现其他不良症状,64位win10可用
沙发。{:17_1055:} 嘿嘿。。占楼 感谢楼主破解分享了? 分析全面,教程详细, +1 能整net的都是高端……………… 顶一个 .net太高端 手里有个软件都半年了 自己没搞定 2937 发表于 2015-3-17 16:54
顶一个 .net太高端 手里有个软件都半年了 自己没搞定
发出来试试,呵呵。不一定搞的定。 本帖最后由 2937 于 2015-3-17 17:29 编辑
无痕软件 发表于 2015-3-17 17:16
发出来试试,呵呵。不一定搞的定。
http://yun.baidu.com/share/link?shareid=1068659811&uk=1899703784&third=0
要搞定了真的谢谢你呢 你肯定能搞定 感谢发布原创作品,吾爱破解论坛因你更精彩. 感谢分享.技术贴.