1、
需求说明
.NET
编译的IL
文件未经混淆和加密很容易被反编译工具破解,为了维护企业的利益,保护软件产品的版权和安全性,对程序集进行混淆和加密是很有必要的。
要求:
*
只能混淆函数内部代码,要求保留函数名称
*
可以采用命令方式执行混淆
*
混淆之后存在相互依赖关系的程序可以正常运行
C#
混淆工具很多,譬如:Dotfuscator
、xeoncode
、foxit
等等,但是提供命令方式执行混淆的工具很少,在此就Net Reactor
软件进行研究。
2、
测试环境
操作系统:Windows 7
运行环境:.net FrameWork 3.5/4.0
混淆工具:.net reactor 5.0
3、
工具介绍
3.1
主要功能简介
.net reactor
的知识产权保护功能
- NecroBit技术保护
- 本地代码生成
- 源码混淆处理
- 控制流混淆处理
- 字符串加密
- 反篡改
- 源码加密与压缩
- 相关性合并
- 保护应用程序及其动态链接库
.net reactor
强大的许可授权管理功能
- .net reactor 可以为您的软件创建试用版
- 设置过期日期
- 为软件限制一个安装后的可用天数
- 限制用户数
- 限制调用的有效期
- 限制试用版的部分功能
- .NET Reactor可以轻松的将试用版转化为完整版
.net reactor
软件授权方式
- 永久授权(无失效期限)
- 时限限制(比如,对外租借软件)
- 使用次数限制(如将软件作为一种服务)
.net reactor
的软件开发工具包
将许可授权系统整合入您的应用中,扩展其授权功能
自定义扩展方式的许可授权函数
3.2 界面截图
3.3
参数命令
-file< file>
混淆的目标文件
-targetfile
< file>
生成的目标文件
-q[uiet]
是否显示消息框
-compression [1/0]
压缩生成文件,节约磁盘空间
-merge [1/0]
合并程序集
一个集成的系统发布的dll
可能上百个,不好维护和关联,那么可以把同一个模块的或者全部dll
合并为一个dll
,这样方便管理。
-embed [1/0]
嵌入程序集
嵌入与合并不同,把
dll
嵌入到
exe
中,是把
dll
作为
exe
的嵌入式的资源,
dll
本身还是存在的,
exe
就相当与一个容器。
-snkeypair
< file>
签名文件
-antitamp
[1/0]
防止被黑客篡改
-suppressildasm
[1/0]
抑制反编译工具的使用
4、
IL
文件混淆批处理
4.1
安装
Net Reactor 5.0
下载安装包,指定安装目录,解压即可。
4.2
环境变量设置
点击:计算机-
属性-
高级系统设置-
环境变量-
新建
添加环境变量:名称:NetReactor
值:.net reactor
安装目录
4.3
执行脚本文件
脚本内容如下:
%是否显示运行命令,若需要显示请删除下面一行%
%@echo off%
%脚本运行目录%
Set sRunDir=%CD%
%输出目录%
Set sExprotDir=%sRunDir%\混淆程序集
IF NOT EXIST "%sExprotDir%" MD "%sExprotDir%"
E:
cd %NetReactor%
for %%a in ("%sRunDir%"\*.exe) do dotNET_Reactor.exe -file "%%a" -suppressildasm 0 -obfuscation 1 -q -stringencryption 1 -targetfile "%sExprotDir%\<AssemblyFileName>"
for %%a in ("%sRunDir%"\*.dll) do dotNET_Reactor.exe -file "%%a" -suppressildasm 0 -obfuscation 1 -q -stringencryption 1 -targetfile "%sExprotDir%\<AssemblyFileName>"
pause
=========================
操作说明:
将.bat
脚本文件拷贝到bin(IL文件存放目录)
目录下双击执行;
输出成果为bin
目录的【混淆程序集】子目录中,参数可以自己更改;
5、
示例
5.1
程序集目录
目录:E:\
工作\
代码混淆研究\
测试程序集
5.2
源程序运行界面
5.3
执行过程界面
5.4
输出成果文件
5.5
成果文件运行界面
可正常运行:
5.6
反编译界面
从示例可以看出:
混淆工具对源IL文件进行的混淆,对函数内部代码进行了混淆隐藏,添加了无用的随机类和函数。混淆后的成果文件能正常运行,但是无法被反编译工具进行破解。
备注:
VS2008编译的DLL,当勾选Anti ILDASM选项后,混淆后的DLL的关联的引用程序集会莫名其妙的多一个重复的信息且版本为6555.6555.6555.0,导致VS2015引用后项目代码编译报异常。个人觉得是混淆工具的某个BUG,因为VS2015编译的同版本dll混淆后再由其它项目引用编译是没有问题的。