http://blog.csdn.net/wangpei421/article/details/42393095

http://www.cnblogs.com/tianguook/archive/2012/10/06/2713105.html

http://zhoufoxcn.blog.51cto.com/792419/163944

C#编写的代码如果不进行一定程度的混淆和加密,那么是非常容易被反编译进行破解的,特别是对于一些商业用途的C#软件来说,因为盯着的人多,更是极易被攻破。现今很多用C#编写的项目,做出的产品,都会遇到这种情况:C#的代码辛辛苦苦写出来之后,一个反射工具,就可以完全显露出来,这样会是个什么结果,不说被反射出来照搬功能,就是注册和加密的那一部分都会被轻易拿到,所以就必须使用代码混淆器。

C#的代码混淆器有很多了,比如Dotfuscator、xeoncode、foxit等等。这些混淆器大多是需要注意的,使用效果各不相同。普通的代码混淆器只是把私有字段和变量转换成随机码,如果是小程序,还可以猜一猜,如果是比较大的程序,猜起来可就不会那容易了。高级一点的是混淆成不可阅读的字符,这样的混淆后的代码干脆就比机器码还难懂,基本上是翻译不出来了。但这些代码混淆器都有一定的风险,即混淆后的代码实然无法正常调用了。

这里介绍的是DotfuscatorPro_4..7750版本,安装 Dotfuscator 好 打开界面,有几个需要配置的地方: Options、Input、Rename、String Encryption、Build,其他的默认即可,下面一一讲解。 

Settings->Global Options

这是全局配置选项,把 Disable String Encryption 设为 NO,即启用字符串加密;检查 Disable Control flow、Dsiable Renaming 也为 NO,即保证控制流和混淆功能打开,其他默认。如下图:

Input 选项

选择你需要混淆加密的 dll、exe文件,其中Library不要勾选,否则有些类、变量等等不会混淆。

Rename 选项 

勾选“use enhanced overload induction”(使用增强模式),注意:不要勾选下方的“ Do not suppress on serializable types”,即序列化类型的变量不加密,否则编译后可能异常; “Renaming Scheme” 选择“Unprintable”(不可打印字符,即乱码),也可以选择其他如小写字母、大写字符、数字的方式。

String Encryption 选项

include里勾选需要字符串加密的工程文件exe、dll等。

Settings->Build Settings 选项

设置输出目标文件夹,点击上方的运行按钮即可重新生成新的 exe、dll文件了。

接下来来看一下一段简单的C#代码加密混淆后的效果:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

namespaceConsoleApplication1

{

    classProgram

    {

        staticreadonly

int
A = B * ; staticreadonly int
B = ; //const
int A = B * ; //const
int B = ; publicstatic void
Main(string[]
args) { Person
p = newPerson(); Console.WriteLine("A
is {},B is {} ",
A, B); } } publicclass Person { staticint age; } }
使用Dotfuscator进行代码混淆后 我们使用著名的反编译软件 Reflector 来查看,可以发现函数体内的代码已经看不到了,字符串也变成了乱码,函数名称也不可见了,效果图如下: 总结: Dotfuscator作为一款代码混淆的软件,具有很强的反编译功能,但使用时应注意以下几点: 如果你加密的dll、exe里有public类,需要被外部引用的话,那么引用这个public的相关dll、exe也要一起放到Dotfuscator Input 里,同时进行混淆加密,不然外部调用出错。
如果有public类,但是你不想照着第1点的方式做的话,可以勾选 Library 模式(input 里 展开项目,见下图),或者不选择 rename 选项,仅仅用 control flow 混淆(该种方式下会看见类名、函数名,但是看不到函数体)。
如果有public类,但是你也不想按照我的第一点、第二点的方法做的话,可以在rename选项里排除这些public的类名、方法名、属性名即可:使用 rename exclude 里左侧排除项目,或 右侧 正则排除方法。
当然如果你编写的软件不涉及商业用途的话,本着开源的思想,不推荐使用代码混淆器。使用代码混淆器存在一定的风险,在使用前最好做好相关代码备份。

C#防止反编译的更多相关文章

  1. class-dump 反编译私有的库和应用

    一.下载并安装class-dump 下载class-dump-3.5.dmg  点击下载 下载完成以后双击.dmg的文件,将里面的class-dump拷贝到/usr/local/bin 设置权限chm ...

  2. 反编译.NET工程

    工具:       1.  .Net Reflector       2.   远程桌面 步骤: 1. 远程桌面连接到服务器 IP,port,user,pwd 2. 打开 IIS 这里面就是所部属的网 ...

  3. 将JAR包反编译,修改后重新打包(转)

     将JAR包反编译,修改后重新打包(转)   在学习和开发JAVA项目中,我们经常会用到第三方提供的一些jar.使用这些第三方工具包,可以提高我们开发的效率,缩短开发的时间.有的第三方工具,提供具体的 ...

  4. 反编译apk

    一.反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源 ...

  5. Android安全攻防战,反编译与混淆技术完全解析(下)

    在上一篇文章当中,我们学习了Android程序反编译方面的知识,包括反编译代码.反编译资源.以及重新打包等内容.通过这些内容我们也能看出来,其实我们的程序并没有那么的安全.可能资源被反编译影响还不是很 ...

  6. Android安全攻防战,反编译与混淆技术完全解析(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/49738023 之前一直有犹豫过要不要写这篇文章,毕竟去反编译人家的程序并不是什么值 ...

  7. apk反编译工具

    反编译工具: apktool:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar:将apk反编译成Java源码(classes.dex转化成jar文件) jd-gui:查看APK中 ...

  8. 反编译apk时遇到的问题

    第一次尝试反编译的时候遇到如下问题:Input file (ganzhou) was not found or was not readable 百度之后说是apktool版本2.0以上,编译命令变了 ...

  9. Java反编译代码对齐

    使用反编译的代码作为jar包源码进行调试时,经常会遇到的情况是反编译后的源码之在注释里包含行号,但是与代码所在行经常对应不上.这个时候,就有必要对代码进行对齐了. ​ public class Reo ...

  10. apk 反编译

    http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 标签: android ...

随机推荐

  1. Python的平凡之路(14)

    一.什么是HTML HTML(Hyper Text Mark-up Language ) 即超文本标记语言,是 WWW 的描述语言,由 Tim Berners-lee提出.设计 HTML 语言的目的是 ...

  2. Android 数据库管理— — —添加数据

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  3. 手机支持USB功能、驱动文件对应关系

    手机支持USB功能: 1.UMS(USB MASS Stronge) : 连接PC作为存储盘使用 2.ADB : 用于调试 3.MTP :连接PC作为存储盘使用(win XP需要安装WMP10 以上 ...

  4. centos6.3安装MySQL 5.6(转)

    1.下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 选择“Source Code”, 用已经注册好的oracle账户登录后才能 ...

  5. 1.6jdk + eclipse + pydev搭建Python开发环境

    直接在1.6jdk的eclipse上用install new software的方法安装插件,会找不到安装好的插件.pydev官网还提供一种zip直接解压插件到eclipse文件夹下的dropins文 ...

  6. C++调用V8与JS交互

    C++访问JS函数 C++部分: /** * COMPILE foo.js AT THE FIRST COMMAND PROMPT TO RUN foo.js */ #include <v8.h ...

  7. iOS应用性能调优好文mark

    http://www.cocoachina.com/ios/20150408/11501.html

  8. [解决方案] pythonchallenge level 6

    查看页面代码,知道找zip www.pythonchallenge.com/pc/def/channel.zip,查看zip下的readme.txt知道从90052,跑一遍知道要收集zip的comme ...

  9. target和currentTarget的区别

    target在事件流的目标阶段:currentTarget在事件流的捕获,目标及冒泡阶段.只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的 ...

  10. 初学SQL常用到的一些指令

    一.库 查看有哪些库:show databases; 进入某个库:use 库名; 新增库:create database atm; (atm为库名) 删除库:drop database if exis ...