代码混淆自动化方案探讨

1、             需求说明
.NET编译的IL文件未经混淆和加密很容易被反编译工具**,为了维护企业的利益,保护软件产品的版权和安全性,对程序集进行混淆和加密是很有必要的。
要求:
*只能混淆函数内部代码,要求保留函数名称
*可以采用命令方式执行混淆
*混淆之后存在相互依赖关系的程序可以正常运行
 
C#混淆工具很多,譬如:Dotfuscatorxeoncodefoxit等等,但是提供命令方式执行混淆的工具很少,在此就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混淆后再由其它项目引用编译是没有问题的。