破解繁星.NET代码生成器【异常跳转法】
由于论坛刚刚成立,转载几篇教程充实论坛。(2015年1月11日)开场白
此番逆向需用到“ILSpy(动态调试版)”,“.NET Reflector”以及其插件“Reflexil v1.6”!
繁星.NET代码生成器下载:http://suo.im/dug3a
文能提笔控萝莉,武能床前定人妻。前能近身压正太,后能提臀迎众基。
逆向笔记
1.打开软件,提示未注册!
2.果断寻找注册位置
3.用ILSpy打开该程序,依次找到FrmRegister下面的btnOk_Click函数!这个函数就是点击我们注册按钮的关键函数!
4.分析右边窗口里面的代码,发现函数体中调用RegisterHelper.RegisterGUID()进行判断,那么我们左键点击RegisterGUID这个函数,进到RegisterGUID这个函数内部!
5.在函数体中string[] array=xxxx这句下断点,然后运行程序
6.随便输入注册码“11111111111111111111111”,点击注册,程序会断在我们断点处!
7.F10单步往下跟踪,我们发现直接走到了catch这个段里面去了,接着就是result=fale,之后就是return result!
由此我们可以推测,如果我们把result=false,改成result=true,那么就意味着这个函数一直返回为true,岂不是就是注册成功了?
8.用Reflector打开程序,走到刚才这个RegisterGUID函数里面来,打开我们的插件Reflexil v1.6
9.将最下面ldc.i4.0修改为ldc.i4.1就相当于把false改成了true,我们保存修改之后的文件!
10.这里要注意:看看左边我们打开的程序集是MultiStar.comm,已经不再是主程序,别保存错了!
11.选中当前的程序集,右键,Reflexil v1.6==>Savea==>“MultiStar.Common.dll”(名字必须改成MultiStar.Common.dll,否则无效)
12.OK保存完毕,我们重新运行程序,到注册来随便输入注册码试试!哈哈,注册成功了!
13.如果到这里就成功了,那么证明我们的大脑太过于简单粗暴!重启程序后又是这么个情况,提示未注册还剩XXXX天,看来程序有重启验证!
14.继续请出我们的ILSpy,找到FrmMain下面的.ctor():void这个函数
15.我们在LogHelper.Debug("FrmMain初始化!");这句下断点,运行程序之后断在此处,单步往下跟踪!
16.通过调试代码,我们发现:如果num==0就会提示未注册,如果num不等于0,就会提示已注册!那么就简单了,我们让num永远不等于0,就达到了逆向之功效!
17.我们找找看是哪里在给num这个变量赋值,看到这一句int registerState = RegisterHelper.GetRegisterState(out num, out dateTime);左键点击GetRegisterState跟到GetRegisterState这个函数里面去!
18.发现上面有一句 state=int.Parse(array);这里就是给我们的num赋值的地方,咦,下面catch块中有一句state=0,意思就是如果程序异常,就会执行state=0!我们设想,如果程序一直异常,然后把state赋值为永远不为0,那么返回的时候num就永远不会是0,程序岂不是永远都是注册版了?
我们找到注册表“HKEY_CURRENT_USERSOFTWAREMultiStargencode”,乱修改,只要程序读取该内容,进行分割的时候分割不成功就会异常!
19.然后我们打开Reflector的插件Reflexil v1.6,定位到state=0这句,修改为ldc.i4.1然后保存!
20.最后运行看看我们的程序!No problem,变成了已注册了!
{:5_117:}大叔是怎么把吾爱的水印去掉的
.net教程确实好
学习了,很好的教程哇!
我想说NET什么时候可以动态调试了?
收藏了,慢慢研究
收藏下,以后慢慢研究{:6_223:}
恒大的诗词很强大。嘎嘎
多谢楼主的无私奉献,论坛需要你这样的大牛
收藏下,以后慢慢研究。多谢老大的转载。