代码混淆自动化方案探讨

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混淆后再由其它项目引用编译是没有问题的。



猜你喜欢

转载自blog.csdn.net/xiangqiang2015/article/details/81046409
今日推荐