NET程序集反编译/破解
作者: Tomex Ou
.NET程序在执行时,会先编译成中介语言IL,再转成Native执行,因此中间IL阶段就很容易被反编译,甚至修改后达到程序破解目的。您可以参考文献#1文章比较原始码与IL的不同,当然,我们有更好的软件工具来达到那样的IL修改。不过是利用工具或反编译,多少得看懂一点IL码的区段起迄为宜,您可以使用VS内建的ildasm.exe来查看.NET Assembly的IL内容。VS预设安装会放在: C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe
ILDASM.exe可以调整Menu下的View选项,让IL码显示更多的讯息,提供判断之用。
[image|ILDASM|{UP}Program%2fNetReflector%2fIldasm.gif]
常见的IL特殊码如下(跟破解有关),其他的请查google。稍微看得懂IL码其实也蛮重要的,它可以藉由探知IL而改进上层C#/程序代码语法,避免不必要的执行呼叫或浪费。刚开始看会觉得IL码很不人性,看久就会宽心啦!
(((
* ret = return
* ldc.i4.1 = true
* ldc.i4.0 = false
)))
接下来,你可以使用文献#2的软件「Reflector for .NET]去打开欲探究的.NET Assembly
另外它有个plug-in工具Reflexil(文献#3)能让你直接修改IL为另存新档(免去文献#1文章的麻烦步骤)
[image||{UP}Program%2fNetReflector%2fReflector.gif]
Reflexil的使用教学可以参考文献#4,重点在于若你不知该怎么改IL起迄值,可以右键单击「Replaceall with code」直接在该method中改程序代码,再按「Preview IL」键即可帮你产生并替换掉该method内的所有IL值,这贴心功能在破解注册或验证函式中,相当好用。
[image||{UP}Program%2fNetReflector%2fReflexil.gif]
最重要的是,利用Reflexil改好IL值了,怎么产生新的Patched Assembly呢? 找了好久,才发现原来要在Reflector左边树状节点中,在该Assembly.exe或dll的根节点单击,Reflexil窗格才会显现Save As/Reload的按键。
以上是简易教学,应该足够让你心惊胆跳,原来.NET反编译/破解竟如此简单,令人得赶快寻求混淆(obfuscator)或加密软件来保护自己辛苦的劳动成果。这种破解别人/防护自己的矛盾心态很可议,在此纯粹介绍反编译软件,精神层面就不多说了。
(((
参考文献:
#[/montaque/archive//01/10/89464.html|使用 Ildasm,ILasm, Peverify 来 Crack 别人写的应用程序]
#[/roeder/dotnet/|Reflector for .NET]
#[/projects/reflexil/|Reflector Plug-in: Reflexil]
#[/KB/msil/reflexil.aspx|Assembly Manipulation andC#/ Code Injection]
)))