C# 反编译防范
C# 编写的代码通过VS编译器生成 dll 或 exe ,很容易被一些反编译工具查看到源码或对源码进行修改。
为防止代码被反编译或被篡改,我们可以进行一定的防范措施。但不能杜绝,因为DotNet编写代码运行必须编译成IL 中间语言,IL是很规则,同时也很好反编译。
反编译防范措施:
- 设置项目代码反汇编属性
- 混淆
方法一:防止 Ildasm.exe(MSIL 反汇编程序) 反汇编程序集
方法很简单在项目文件AssemblyInfo.cs中增加SuppressIldasm属性。

当项目中增加SuppressIldasm属性后在使用ildasm.exe反编译代码,会提示:"受保护的模块 -- 无法进行反汇编"

ildasm.exe 读取项目中包含 SuppressIldasm 属性就不对此程序集进行反编译。但ILSyp,Reflector等反编译工具针对程序集设置SuppressIldasm属性置之不理,一样可以反编译源码。
缺点:
可见SuppressIldasm 属性只针对ildasm.exe工具起效果,同时也能删除ildasm.exe工具的此项限制。参考:《去掉ILDasm的SuppressIldasmAttribute限制》
方法二:混淆
混淆原理:将VS编译出的文件(exe 或 dll)通过ildasm对文件进行重命名,字符串加密,移动等方式将原始代码打乱。这种方式比较常见。
VS2013 自带混淆工具:工具-->PreEmptive Dotfuscator and Analytics

但VS2013自带Dotfuscator 5.5 需购买激活才能使用全部功能。目前百度提供 DotfuscatorPro 4.9 破解版版本下载。
打开 DotfuscatorPro 4.9 主界面

Settings->Global Options 全局配置
常用功能配置:Disable String Encryption=NO 启用字符串加密

选择需混淆C#编译代码(dll 或 exe)
其中Library不要勾选,否则有些类、变量等等不会混淆;

Rename 重命名配置
常用功能配置: 勾选 = use enhanced overload induction 使用增强模式
重命名方案 Renaming Scheme = Unprintable (不可打印字符,即乱码),也可以选择其他如小写字母、大写字符、数字的方式。

String Encryption 字符串加密
勾选需要加密字符串文件(exe 或 dll)

可根据各自需求可进行其他相关配置。(如:control flow,Output,Setting ->Build Settings,Settings --> Project Properties等)
最后生成混淆文件 Build Project。

Build Project 生成混淆项目错误:
Could not find a compatible version of ildasm to run on assembly C:\Users\***bin\Debug\WindowsFormsApplication1.exe.??This assembly was originally built with .NET Framework v4.0.30319.
Build Error.
处理方法:
ILASM_v4.0.30319 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe
ILDASM_v4.0.30319 = C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\ildasm.exe [安装VS版本不同对应目录会有所变化]

混淆代码对比
未使用混淆工具,反编译出的源码:

使用混淆工具,反编译出的源码:

效果很明显,很难看出反编译代码所写的真正逻辑。
缺点:
C#代码通过混淆工具生成后,增加了很多转换过程。这使得反编译工具无法很直观看到源码真正逻辑。但源码代码过多转换会使软件本身运行效率降低,甚至会出现报错情况。
C# 反编译防范的更多相关文章
- java如何防止反编译
综述(写在前面的废话) Java从诞生以来,其基因就是开放精神,也正因此,其可以得到广泛爱好者的支持和奉献,最终很快发展壮大,以至于有今天之风光!但随着java的应用领域越来越广,特别是一些功能要发布 ...
- 检测微信小程序是否被反编译获取源码
众所周知,微信小程序的代码安全性很弱,很容易被别人反编译获取源码.我自己的小程序也被别人反编译拿到源码还上线了,非常无语. 既然客户端不好防范,服务端还是可以做点手脚的. 小程序的Referer是不可 ...
- java如何防止反编译(转)
出处: java如何防止反编译 一些防止java代码被反编译的方法 综述(写在前面的废话) Java从诞生以来,其基因就是开放精神,也正因此,其可以得到广泛爱好者的支持和奉献,最终很快发展壮大,以至于 ...
- DotfuscatorPro防止反编译&ILSpy反编译
DotfuscatorPro_4.9可以防止你的.NET软件被反编译,可以在一定程度上防止你的软件被反编译.现在很多软件都有被反编译的现象,虽然不能做到百分百的防范,但是你至少可以先做些技术上的处理, ...
- class-dump 反编译私有的库和应用
一.下载并安装class-dump 下载class-dump-3.5.dmg 点击下载 下载完成以后双击.dmg的文件,将里面的class-dump拷贝到/usr/local/bin 设置权限chm ...
- 反编译.NET工程
工具: 1. .Net Reflector 2. 远程桌面 步骤: 1. 远程桌面连接到服务器 IP,port,user,pwd 2. 打开 IIS 这里面就是所部属的网 ...
- 将JAR包反编译,修改后重新打包(转)
将JAR包反编译,修改后重新打包(转) 在学习和开发JAVA项目中,我们经常会用到第三方提供的一些jar.使用这些第三方工具包,可以提高我们开发的效率,缩短开发的时间.有的第三方工具,提供具体的 ...
- 反编译apk
一.反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源 ...
- Android安全攻防战,反编译与混淆技术完全解析(下)
在上一篇文章当中,我们学习了Android程序反编译方面的知识,包括反编译代码.反编译资源.以及重新打包等内容.通过这些内容我们也能看出来,其实我们的程序并没有那么的安全.可能资源被反编译影响还不是很 ...
随机推荐
- 阿里云3台机器搭建Hadoop HA服务
1 Mac电脑配置 阿里云配置机器 选择配置 按量付费 选择三台机器 2核8G
- c#中富文本编辑器Simditor带图片上传的全部过程(项目不是mvc架构)
描述:最近c#项目中使用富文本编辑器Simditor,记录一下以便以后查看. 注:此项目不是MVC架构的. 1.引用文件 项目中引用相应的css和js文件,注意顺序不能打乱,否则富文本编辑器不会正常显 ...
- kan
http://blog.csdn.net/yahohi/article/details/7427724 http://duanhengbin.iteye.com/blog/1706635 http:/ ...
- 三维dp
https://cn.vjudge.net/contest/245857#problem/C 代码: #include<iostream> #include<string> # ...
- mysql基本命令[转]
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...
- python日志和异常
“日志”转载:http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html "异常"转载:http://www.cnb ...
- linux内核中链表代码分析---list.h头文件分析(二)【转】
转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...
- 【转】Source Insight中文注释为乱码的解决办法
我网上查了一堆解决办法,但是都是2017年以前的,并且都是针对于source insight 3.5及以下版本的解决方案,软件版本都到4.0了,应该有新方法出现. 干货:Source Insight ...
- python httplib和urllib的性能比较
httplib代码: urlParseResult = urlparse(url) host = urlParseResult.hostname path = urlParseResult.path ...
- linux命令 dirname
功能: 获取给定路径的目录部分 利用man 查看dirname的说明如下: DESCRIPTION Output each NAME with its last non-slash co ...