1.在编码过程中尽量使用
private/internal
关键词修饰
class、方法和字段名称,
只有内部和私有的才会被重命名
2.编码过程
尽可能少地使用public
修饰class、方法和字段名称,
public修饰后混淆编译将不会被重命名
3.避免使用反射和序列化,反序列化操作,
字段被重命名后可能会造成程序执行异常,
反射、序列化和反序列化会执行失败
4.添加生成事件,调用
Dotfuscator 进行代码混淆
if $(ConfigurationName)==Debug "C:/Program Files (x86)/Microsoft Visual Studio 14.0/PreEmptive Solutions/Dotfuscator and Analytics Community Edition/dotfuscator.exe" "$(ProjectDir)/bin/Dotfuscator.xml"
在每次生成成功会自动调用Dotfuscator,点击
生成项目
即可
5.使用打包工具innosetup,自动打包混淆后exe或动态库即可外发给客户或现场使用
混淆后的代码效果如下,全是无意义的字母,基本无法读懂,如果Dotfuscator是专业版的还可以混淆为不可见字符,根本无法编辑和查看
1.在编码过程中尽量使用private/internal关键词修饰class、方法和字段名称2.编码过程尽可能少地使用public修饰class、方法和字段名称3.避免使用反射和序列化,反序列化操作4.添加生成事件,调用Dotfuscator 进行代码混淆if $(ConfigurationName)==Debug "C:/Program Files (x86)/Microsoft Visual Studio 14.0/PreEmptive Solutions/Dotfuscator a
C#
编写的
代码
通过VS编译器生成 dll 或 exe ,很容易被一些
反编译
工具查看到源码或对源码进行修改。为
防止
代码
被
反编译
或被篡改,我们可以进行一定的防范措施。但不能杜绝,因为DotNet编写
代码
运行必须编译成IL 中间语言,IL是很规则,同时也很好
反编译
。
反编译
防范措施:
设置项目
代码
反汇编属性
.net是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由.net编译器 JIT 解释映象为本机
代码
并交付CPU执行。中间语言很容易被
反编译
,有必要研究下如何保护dll文件。
常见的
反编译
工具有很多,比如DotNetReflector就可以
反编译
IL ( Intermediate Language ,是指.NET包括
C#
在内编译后的中间语言)到
C#
。
纵观文献,常用的
防止
反编译
方法:强签名+混淆+加密。
强签名 强命名程序集,可以确保你的程序集唯一,而不被篡改、..