破解.NET程序

这次需要要破解的是一个医疗信息的管理系统

操作方法

  • 01

    首先,安装程序,在安装程序发现提示要安装.NET 1.0, 所以推断程序的编写语言为C#,安装后的程序文件如图所示:

  • 02

    由于推断为C#编写,所以安装完成后立马用反编译工具Reflector查看,如图所示:

  • 03

    可以看到命名空间及类名等都被混淆过了,看来是不能直接反编译,但是从上图中我们也可以看到其混淆工具为XenoCode.(尽管反编译出来可能没有多大作用,但出于对其代码的好奇一开始我还是把它给反编译出来了,得到一大堆文件名乱七八糟,类中的函数体大都为空实现的东西,不过后来还是证明这些还是有些用处滴) 于是,上网查找XenoCode的反混淆方法,尽管没有找到具体的方法,但也有不少收获,其中最大的收获就是运用C#的反射机制来提取程序函数的MSIL代码。 找到了提取MSIL代码的方法之后,接下来事必要找与注册试用之类有关的提示信息去定位检测试用版的函数过程,但是程序已经被混淆了,查找字符串也不是那么容易,这时还是互联网帮了大忙啊,找了大半天找到了一个可以查看C#混淆程序中字符串的工具DoNetStringSearch,程序运行后如图所示:

  • 04

    从这里我们找到了有关注册提示的字符串并且也可以知道是哪个类的哪个函数在做这些事情。 好了,竟然已经找到在哪里进行的注册信息检测的了,下面接下来的事情就是提取这个函数的MSIL代码了,互联网又一次帮了忙,找到了一个类库来帮助我做这件事情,这个类库名称叫SDILReader,编程是偶的强项啊,接下来二话不说写了个破烂程序将MSIL给提取出来了啊,下面是那段破烂的程序代码(偶以提取MSIL代码的字符串为目的,没有关注代码的可读性之类的):

  • 05

    好了,OK,最后那个字符串msil中的内容就是我们要的程序代码了, 分析上面代码我们可以得出,程序从注册表读出了四个加密值setting1,setting2,setting3,setting4并且解密之后分别将 1. setting1与x5016294158e82a1c.x1060241253fad742.x0607124d85f78745()返回的对象进比较,相等为true 2. setting2与x5016294158e82a1c.x1060241253fad742.x0607124d85f78745()返回的对象即setting1经过x5016294158e82a1c.x1060241253fad742::xfc163b673c29017d(str)处理后返回的对象进行比较,相等为true 3. setting3与”yes”进行比较,相等为true 如果以上三个比较都是相等的那么就表示注册成功。 到这里,我们已经很接近成功了,因为我们可以通过以上三个比较来得出 setting1,setting2,setting3三个的解密值,其中 setting1= x5016294158e82a1c.x1060241253fad742.x0607124d85f78745(); setting2=x5016294158e82a1c.x1060241253fad742::xfc163b673c29017d(setting1); setting3=”yes” 那么剩下的如果我们能找到他们的加密方法,将他们三个加密后再存回注册表那么我们的 破解就最终完成了。 这时那些被我反编译出来的空壳子发挥作用了,因为根据我翻译出来的伪代码我们可以知道 解密函数在哪个类里,那么可以猜测加密的函数也一定会在那个类里,经过几次的函数调用 的尝试终于被我找到了加密函数:x5016294158e82a1c.x1060241253fad742.x75ab8ead4c62ab63 就这样一个破解程序就完事了~是不是很有成就感

(0)

相关推荐