首先,我在此申明,此文并不是教别人突破限制,我们只是用学习的眼光看问题
大家都知道ILDasm是。NET程序的反编译工具,它是由Microsoft提供的反编译工具。
它可以直接把。NET程序反编译为IL文件及资源文件,这样即可以非常容易的让黑客进行修改,删除强命名,修改注册码算法等等。。。并且Ilasm再次编译,得到一个正确的,可发布的程序集
并且,这个功能是其它反编译器所不能替代的功能,因为ILDasm真的太重要了。也许有的朋友能理解,有的朋友不能理解,但没关系,我们今天的重点并不是这个。
这是一件不可思议的事,让软件没有了安全保障。幸亏有了XenoCode,它有一项功能即是 Anti ILDasm 。这是一个非常棒的功能,但它是怎么做到的呢?
其实,这是ILDasm的一个限制,当你在程序中制造某个标志后,那么程序集将不可以再被ILDasm反编译,ILDasm会提示您,这个程序集已经是一个被有版权的程序集,您不可能对其反编译。呵呵,我们最可爱的ILDasm会罢工?
我曾经找过相关资料,不过没有找到有什么最简单的方法让自己的程序集变成已有版权的程序集,XenoCode有这样做,不过我不想去分析它。如果有知道的朋友,请与我交流一下
那么我们今天的任务是什么呢?就是把罢工的ILDasm拉回来,让它继续为我们工作。
OK,分析一下吧:经过短暂的分析,让我出了一身汗。。。这样的版权保护有还不如无,一定误导了很多朋友。
为什么我这样说呢?因为我发现,想让ILDasm再次工作,比想象中的简单很多,这根本就档不住任何东西。请看下面我跟踪的代码:
2
3
4 00415FC6 E8 12470100 CALL ildasm.0042A6DD // 进入的主函数
5
6
7 0042AABD FF51 0C CALL DWORD PTR DS:[ECX + C] // 判断函数
8 0042AAC0 3BF7 CMP ESI,EDI
9 0042AAC2 75 0F JNZ SHORT ildasm.0042AAD3 // 关键跳转地址,改为JMP即可
10 0042AAC4 68 96010000 PUSH 196
11 0042AAC9 E8 8964FFFF CALL ildasm.00420F57
12 0042AACE E9 E3090000 JMP ildasm.0042B4B6
13
这已经很明显了,ILDasm只用了一个标志去阻止"已有版权"的程序集,而您只需要修改一个机器指令就可以畅通无阻的反编译任何程序集,并修改其内容再次编译
以上代码您可以自己修改,如果您不会,也可以到 http://files.cnblogs.com/Aiasted/ildasm.rar 下载一个已经修改好的版本。
XenoCode配合强命名的做法,可能从此将会消失
(注:我没有从事过任何。NET程序集的破解,仅仅是看过在ILDasm反编译出来的程序集可以去掉强命名一文,如果有对之处,请指正)