zoukankan      html  css  js  c++  java
  • 保护.net中的dll文件(防止破解、反编译dll)

    .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文件可免于一般人的破解,当然,不可能绝对防止被破解。
  • 相关阅读:
    leetcode Convert Sorted List to Binary Search Tree
    leetcode Convert Sorted Array to Binary Search Tree
    leetcode Binary Tree Level Order Traversal II
    leetcode Construct Binary Tree from Preorder and Inorder Traversal
    leetcode[105] Construct Binary Tree from Inorder and Postorder Traversal
    证明中序遍历O(n)
    leetcode Maximum Depth of Binary Tree
    限制 button 在 3 秒内不可重复点击
    HTML 和 CSS 画三角形和画多边行基本原理及实践
    在线前端 JS 或 HTML 或 CSS 编写 Demo 处 JSbin 与 jsFiddle 比较
  • 原文地址:https://www.cnblogs.com/jordan2009/p/1855192.html
Copyright © 2011-2022 走看看