C# : 软件加密机制以及如何防止反编译
背景
.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# : 软件加密机制以及如何防止反编译相关推荐
- java通过对.class文件字节码加密,不被轻易反编译出源代码,分析及其实现。
java通过对字节码加密,不被轻易反编译出源代码. 分析: JVM运行java文件是通过加载.class文件实现程序运行的,而且这个过程被我们称为类加载机制. 执行加载这个动作的是类加载器(java. ...
- Android APK程序加密,防止被别人反编译
作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-s ...
- Python代码加壳加密pyinstaller生成的exe反编译
Python代码加壳加密反编译 phthon加壳 pyinstaller生成的exe反编译 加壳 pyinstaller 版本高于3.0 命令行: pyinstaller -F -key=xxxxxx ...
- .NET源码反编译和加密
产品发布后,不得不面对源码加密的问题,一些人可能会想我发布一下,或者编译成成exe的就好了,其实在一些破解的软件下面,这些就变成源码了. 对于反编译,用了几款软件试了一下,推荐一款Reflector( ...
- Python反编译pyinstaller打包的exe文件 从0开始(未加密篇)
因为pyinstaller方便.兼容性相对较好,所以我们会经常见到一些用pyinstaller打包的Python程序,在这里我们了解一下如何对这些打包好的exe文件进行反编译(即反编译出.py文件), ...
- java decompiler 3.11_Java反编译软件(DJ Java Decompiler)下载 v3.11.11.95官方版-第五资源...
DJ Java Decompiler是一款十分实用的Java反编译软件,该软件可以将编译过的CLASS文件编译还原成为Java原始文件,并且不需要额外安装JVM(Java Virtual Machin ...
- [转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件)
[转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件) 文章分类:Java编程 该软件无需安装,界面清爽. 转自:http://www.devdoc.org/index.php/a ...
- java的反射和反编译机制介绍
<JAVA啃骨头>之 Java SE 章节 java的反射和反编译机制介绍 一 .什么是java反射机制 JAVA反射机制是指在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和 ...
- apk反编译工具使用方法 使用APKEditor V1.8旗舰版快速反编译安卓apk软件
学习安卓开发经常需要分析别人的apk,通过了解别人怎么编写的代码从而快速提高自己的编程水平,所以就需要用到apk反编译软件将别人的apk文件反编译出来,这样就可以查看其代码了.反编译是一种程序逆向编译 ...
最新文章
- 9 Django 模型层(2)
- mybatis使用foreach实现sql的in查询
- App_GlobalResources、App_LocalResources (理论篇)(
- Fragment专辑(一):Fragment简介
- R语言数据挖掘实践——系谱聚类
- 倒戈了,转投简书 --------
- a113 智能音箱芯片方案_高通入局智能音箱,首款四核单芯片方案曝光
- windows环境下 安装gcc
- 学以致用十四-----打造一个简单的vim IDE
- 视觉在无人驾驶中的应用及分类_紫外光在机器视觉中的应用
- manage key mysql_mysql相关操作
- win10系统word软件变英文各类解决方法
- 从零开始搭建自己的vue组件库——01创建
- 【Linux】在终端中粘贴字符时头尾出现“0~“和“1~“的特殊字符
- 如何由普通用户权限获取root权限
- 离群值是什么意思_ESD—检验离群值
- Androd Camera Yuv Jepg bmp
- pppd详解_pppd命令使用详解
- C#动态创建lambda表达式
- 清明节海报设计软件测试,PS清明节海报设计教程
热门文章
- 专利学习笔记6:在线系统的登录方法
- CLIP(Learning Transferable Visual Models From Natural Language Supervision)
- Idel插件jrebel安装以及破解教程
- 【算法导论】生日悖论
- 阿里云服务器使用SMTP发送邮件
- markdown 斜体、加粗、公式起止符快捷键
- redis内存消耗详解
- error: variable '__this_module' has initializer but incomplete type错误解决
- mysql数据库表中插入中文字段时报错 ‘\xCD\xF5\xBB\xAA‘
- 【Unity3D进阶4-4】Unity3D AR的开发