c# dll破解

一、准备

需要的软件:

Ildasm.exe:用来将dll,exe编译为IL文件

ilasm.exe:用来将IL文件编译回来dll或exe

这2个工具装好VS就有了(VS2005的可以处理2003的,反过来不行)

文本处理工具:

UltraEdit :http://www.crsky.com/soft/1469.html

EmEditorPro:http://www.crsky.com/soft/4278.html

根据不同情况需要使用上面不同的工具

其他工具:

Reflector.exe :http://www.pediy.com/tools/dotnet.htm

xenocode FOX: http://www.pediy.com/tools/dotnet.htm

修改过的Ildasm:http://www.pediy.com/tools/dotnet.htm

平时可以使用Reflector,有些特别的使用Fox方便。当处理一些版权保护的或经过特殊混淆的.net1.X时需要使用修改过的Ildasm

上面这些东东在用到的时候再具体说

.net的通常破解流程大致就是:

1,使用ildasm编译目标文件(exe/dll)为IL

2,去掉强名,使用ilasm反编译回来看看是否可正确运行

如果可以运行,那么基本都可以搞定(步骤3);如果不可以(步骤4)

3,查找IL文件中的限制进行修改再次反编译直到破解完成

4,查看IL文件是否还有其他限制找到并剔除

如果还是不能运行可能该死的东东不能使用通常的方法破解,具体问题具体分析了

二、示例

选择一个日程控件(下载:http://www.mediachase.com/ )

安装、运行后看看他的试用限制是怎么体现的

我们随便找一个页面运行看看效果Home/fullsample.aspx

我们看到,当没有注册时会出现警示语

(有些软件的试用提示是随机出现的,但不管怎么说,我们要破解一个软件时第一步就是要了解这个软件的限制是什么)

接下来我们尝试看看是否可以反编译

打开Ildasm.exe编译为IL文件

(Ildasm.exe默认在C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin )

我们用EmEditor打开IL文件并删除强名

删除强名,是使用反编译方法破解的必须步骤,只要使用了Ildasm编译就必须删除强名

灰色部分就是强名,全部删除并保存

接下来将IL编译回DLL

进入VS2005命令行(如果直接用cmd进入DOS因为环境变量的问题可能需要输入全路径)

切换到IL目录执行

ilasm /dll /resource=Mediachase.Web.UI.WebControls.res Mediachase.Web.UI.WebControls.il

执行成功(但不表示该控件可通过此方法破解)

我们还是回到VS刷新刚才打开的页面,发现没有出现错说,这基本上说明该控件是可以用这种方法破解的

接下来我们就要进入爆破点查找阶段

EmEditor打开IL文件

查找关键字,我们输入“This is” 找到了2个结果

接下来定位一下这个是在那里掉用的,我们往下翻页看到

是在Calendar::RenderContents中

打开Reflector.exe,读取DLL并定位 ,一共2处,并且都在同一个过程内

我们发现2个有个共同点,都是根据变量IsDemoVersion来决定是否输出警示语

那么我们现在有2条路

1直接删除警示语,那么自然就OK了

2,修改变量IsDemoVersion

我们选择2

点击Me.IsDemoVersion跳转 ,鼠标右击-Analyze

查看所有调用IsDemoVersion变量的地方

发现只有两处,一个是我们刚才停留的地方,还有一处,我们看看

我们看到,当实例初始化的时候IsDemoVersion被赋值True

并且我们也通过之前的不走步骤得出只有这一个地方是改变IsDemoVersion的

所以,我们只要把IsDemoVersion改为False就大功告成了

最后操刀

打开EmEditor并定位

找到对应位置,我们只要把True改为False(IL中是ldc.i4.1改为ldc.i4.0)

保存IL

重新dos编译

再次刷新页面

警示语不见了

总结:

  • 破解前首先要弄清软件的限制
  • 使用Ildasm破解时需要先删除IL中的强名
  • 在做IL修改时,善于利用的EmEditor的插件查找功能,他可以列出所有目标
  • 尽量在限制的根源突破,比如这次,可以直接删除字符串达到破解目的,可通过修改IsDemoVersion则更好一些,因为日后一些复杂的软件都有多个点,那时就必须重根抓起

你可能感兴趣的:(c# dll破解)