背景

.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机代码并交付CPU执行。中间语言很容易被反编译,有必要研究下如何保护dll文件 。

常见的反编译工具有很多,比如DotNetReflector 就可以反编译 IL ( Intermediate Language ,是指.NET包括C#在内编译后的中间语言)到 C# 。

纵观文献,常用的防止反编译方法:强签名+混淆+加密。

  • 强签名  强命名程序集,可以确保你的程序集唯一,而不被篡改、冒用等;即使相同名字的程序集如果签名也会不同。实现起来也很简单。

(1)为项目添加强名称方法:
1.右键单击项目,打开属性窗口;
2.在属性窗口里选择《签名》标签,选中为程序集签名的选项,在下拉列表里选择新建,如下图所示:

单击确定后,签名添加完成。

(2)为没有源码的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进行混淆的方法:
1.创建新工程,如下图所示:

2.选择要混淆的dll、exe文件,如下图所示

3.在属性里选择Library属性(很重要,因为我这里要混淆的是dll文件,如果不选中,混淆后将不能被正确调用!),如下图所示:

4.选择bulid标签,点击bulid按钮进行混淆。

我们也可以选择其它标签进行加密字符串、增加水印等操作,我这里加密工作用另外的方法,所以没有选择操作。

  • 加密

继续对混淆过的dll文件进行加密处理,进一步保护dll文件。
这里使用的加密工具是MaxtoCode。
打开软件后,切换到中文,可以看到非常简单,添加上dll文件后,直接点击执行加密就可以。其他选项比如:加密字符串、强名称等都很简单,大家一试就知道,而且MaxtoCode的帮助做的非常友好,一看就会使用。

加密后的dll文件比先前大了一倍,用Reflector.exe反编译后,发现dll文件加密的更彻底,因为主体函数内容都隐藏了。

通过以上三步,使您的dll文件可免于一般人的破解,当然,不可能绝对防止被破解。

C# : 软件加密机制以及如何防止反编译相关推荐

  1. java通过对.class文件字节码加密,不被轻易反编译出源代码,分析及其实现。

    java通过对字节码加密,不被轻易反编译出源代码. 分析: JVM运行java文件是通过加载.class文件实现程序运行的,而且这个过程被我们称为类加载机制. 执行加载这个动作的是类加载器(java. ...

  2. Android APK程序加密,防止被别人反编译

    作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-s ...

  3. Python代码加壳加密pyinstaller生成的exe反编译

    Python代码加壳加密反编译 phthon加壳 pyinstaller生成的exe反编译 加壳 pyinstaller 版本高于3.0 命令行: pyinstaller -F -key=xxxxxx ...

  4. .NET源码反编译和加密

    产品发布后,不得不面对源码加密的问题,一些人可能会想我发布一下,或者编译成成exe的就好了,其实在一些破解的软件下面,这些就变成源码了. 对于反编译,用了几款软件试了一下,推荐一款Reflector( ...

  5. Python反编译pyinstaller打包的exe文件 从0开始(未加密篇)

    因为pyinstaller方便.兼容性相对较好,所以我们会经常见到一些用pyinstaller打包的Python程序,在这里我们了解一下如何对这些打包好的exe文件进行反编译(即反编译出.py文件), ...

  6. java decompiler 3.11_Java反编译软件(DJ Java Decompiler)下载 v3.11.11.95官方版-第五资源...

    DJ Java Decompiler是一款十分实用的Java反编译软件,该软件可以将编译过的CLASS文件编译还原成为Java原始文件,并且不需要额外安装JVM(Java Virtual Machin ...

  7. [转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件)

    [转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件) 文章分类:Java编程 该软件无需安装,界面清爽. 转自:http://www.devdoc.org/index.php/a ...

  8. java的反射和反编译机制介绍

    <JAVA啃骨头>之 Java SE 章节 java的反射和反编译机制介绍 一 .什么是java反射机制 JAVA反射机制是指在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和 ...

  9. apk反编译工具使用方法 使用APKEditor V1.8旗舰版快速反编译安卓apk软件

    学习安卓开发经常需要分析别人的apk,通过了解别人怎么编写的代码从而快速提高自己的编程水平,所以就需要用到apk反编译软件将别人的apk文件反编译出来,这样就可以查看其代码了.反编译是一种程序逆向编译 ...

最新文章

  1. 9 Django 模型层(2)
  2. mybatis使用foreach实现sql的in查询
  3. App_GlobalResources、App_LocalResources (理论篇)(
  4. Fragment专辑(一):Fragment简介
  5. R语言数据挖掘实践——系谱聚类
  6. 倒戈了,转投简书 --------
  7. a113 智能音箱芯片方案_高通入局智能音箱,首款四核单芯片方案曝光
  8. windows环境下 安装gcc
  9. 学以致用十四-----打造一个简单的vim IDE
  10. 视觉在无人驾驶中的应用及分类_紫外光在机器视觉中的应用
  11. manage key mysql_mysql相关操作
  12. win10系统word软件变英文各类解决方法
  13. 从零开始搭建自己的vue组件库——01创建
  14. 【Linux】在终端中粘贴字符时头尾出现“0~“和“1~“的特殊字符
  15. 如何由普通用户权限获取root权限
  16. 离群值是什么意思_ESD—检验离群值
  17. Androd Camera Yuv Jepg bmp
  18. pppd详解_pppd命令使用详解
  19. C#动态创建lambda表达式
  20. 清明节海报设计软件测试,PS清明节海报设计教程

热门文章

  1. 专利学习笔记6:在线系统的登录方法
  2. CLIP(Learning Transferable Visual Models From Natural Language Supervision)
  3. Idel插件jrebel安装以及破解教程
  4. 【算法导论】生日悖论
  5. 阿里云服务器使用SMTP发送邮件
  6. markdown 斜体、加粗、公式起止符快捷键
  7. redis内存消耗详解
  8. error: variable '__this_module' has initializer but incomplete type错误解决
  9. mysql数据库表中插入中文字段时报错 ‘\xCD\xF5\xBB\xAA‘
  10. 【Unity3D进阶4-4】Unity3D AR的开发