如何编译加密保护.net中的dll文件
2012-08-01 17:59
351 查看
如何编译加密保护.net中的dll文件(防止破解、反编译dll)
2012-03-07 11:21
http://hi.baidu.com/seriawei/blog/item/2662af1a12fb0c1d5aaf5339.html
2012-03-07 11:21
.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译,所以研究下如何有效的保护dll文件。 我大致的方法为 :强签名+混淆+加密。 强签名 强命名程序集,可以确保你的程序集唯一,而不被篡改、冒用等;即使相同名字的程序集如果签名也会不同。 强签名很简单 为项目添加强名称方法: 1.右键单击项目,打开属性窗口; 2.在属性窗口里选择《签名》标签,选中为程序集签名的选项,在下拉列表里选择新建,如下图所示: 3.打开新建签名窗口,输入签名的名称密码等内容,如下图所示: 单击确定后,签名添加完成。 为没有源码的DLL文件添加强名称 如果项目中引用了其他没有源码的dll文件,并且此dll文件是没有强名称的程序集,则编译时会出现类似 "Assembly generation failed -- 引用的程序集 'xxxxxxxxxxx' 没有强名称" 这样的错误。 我这里引用的是Interop.Scripting.dll程序集,它不是强名称的,则需要进行以下操作: 1.打开SDK 命令提示窗口; 2.创建一个新的随机密钥对: sn -k Interop.Scripting.snk 3.反编译目标程序集 ildasm Interop.Scripting.dll /out=Interop.Scripting.il 3.重新编译,附带强命名参数 ilasm Interop.Scripting.il /dll /resource=Interop.Scripting.res /key=Interop.Scripting.snk /optimize 4.验证签名信息 sn -v Interop.Scripting.dll OK,将生成的dll文件重新引入到项目中然后编译。 注:未签名的主程序可以引用已签名或未签名的程序集;而已签名的主程序不能引用未签名的程序集。(上述文章有相应解决办法) 混淆 混淆就是对编译生成的MSIL中间代码进行模糊处理,最简单的混淆是名称混淆,即将 命名空间名、类名、方法名、字段名等统统换成特殊符号或其它符号,目的就是让人看到晕为止,但是并不改变程序执行逻辑。 我这里使用的Dotfuscator进行混淆。 Dotfuscator混淆方法: 1.创建新工程,如下图所示: 2.选择要混淆的dll、exe文件,如下图所示 3.在属性里选择Library属性(很重要,因为我这里要混淆的是dll文件,如果不选中,混淆后将不能被正确调用!),如下图所示: 4.选择bulid标签,点击bulid按钮进行混淆。 我们也可以选择其它标签进行加密字符串、增加水印等操作,我这里加密工作用另外的方法,所以没有选择操作。 OK,混淆完成后,我们可以用Reflector.exe来反编译下混淆后的dll文件,可以对比源码看下效果。 加密 接下来我们继续对混淆过的dll文件进行加密处理,进一步保护dll文件。 我使用的加密工具是MaxtoCode。 打开软件后,切换到中文,可以看到非常简单,添加上dll文件后,直接点击执行加密就可以。其他选项比如:加密字符串、强名称等都很简单,大家一试就知道,而且MaxtoCode的帮助做的非常友好,一看就会使用。 加密后的dll文件比先前大了一倍,用Reflector.exe反编译后,发现dll文件加密的更彻底,因为主体函数内容都隐藏了。 通过以上三步,使您的dll文件可免于一般人的破解,当然,不可能绝对防止被破解。 |
相关文章推荐
- 介绍保护.net项目生成的dll文件如何防破解与反编译
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件(防破解、反编译)
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件(防破解、反编译)
- 如何保护.net中的dll文件
- 使用加密来保护你的Flash文件被反编译
- 如何把.js文件编译成dll供页面调用
- .net编译时一直提示引用了找不到的dll文件
- 如何把.js文件编译成dll供页面调用?
- .NET DLL 保护措施详解(非混淆加密加壳)
- 如何把js文件编译成dll供页面调用
- 如何将一个类(.cs)文件编译成.dll文件?