obfuscation tools
    
     .net 社区有很多混淆工具, 比如这个清单:
     
      https://github.com/NotPrab/.NET-Obfuscator
     
     
     比较有名的商业工具有 .NET REACTOR
     
      https://www.eziriz.com/
     
     ,
    
开源软件中, 最受欢迎的有:
- 
      obfuscar
 
 https://github.com/obfuscar/obfuscar
 
- 
      老版 ConfuserEx
 
 https://github.com/yck1509/ConfuserEx
 
- 
      
 (推荐)
 
 新版 ConfuserEx2
 
 https://github.com/mkaring/ConfuserEx
 
     obfuscar 验证 (弃用)
    
obfuscar 使用很简单, 但 github 上没有预编译的版本, 需要通过源码编译 Obfuscar.Console.exe 程序.
参考官方文档定制我们的混淆设置, 比如下面就是一个简单的示例.
Obfuscar.xml 文件
<?xml version="1.0" encoding="utf-8" ?>
<Obfuscator>
	<!--输入路径-->
	<Var name="InPath" value="." />
	<!--输出路径:加密混淆过的路径-->
	<Var name="OutPath" value=".\Obfuscator_Output" />
	<!--混淆代码的参数-->
	<Var name="ReuseNames" value="false" />
	<Var name="HideStrings" value="false" />
	<Var name="KeepPublicApi" value="false" />
	<Var name="HidePrivateApi" value="true" />
	<!--要混淆的模块-->
	<Module file="$(InPath)\test.exe">
		<!--SkipType跳过指定的类 Program是Main所在的类名-->
		<SkipType name="Program" />
		<!--SkipMethod 跳过指定的方法-->
		<SkipMethod type="Program" name="Main" />
	</Module> 
</Obfuscator>混淆使用命令:
net48\Obfuscar.Console.exe  Obfuscar.xml
     测试效果, 我的项目大量使用 dapper ORM, 经过 obfuscar 混淆后, 总是 crash.
      
    
     ConfuserEx2 验证(推荐)
    
首先说明的是, 我的程序是Winform 程序, 用的是 .net framework 4.8, 经过验证 ConfuserEx 和 ConfuserEx2 效果都很好, 这里仅介绍 ConfuserEx2 的使用.
     保护手段:
    
- ConfuserEx2 支持压缩 pack, 可以提高反编译的难度, 但经常被杀毒软件误报, 所以不建议使用.
- ConfuserEx1 也支持压缩 pack, 在我的电脑不会被杀毒软件报警, 但不确定其他杀毒软件是否会报警, 所以不建议使用.
- 
      不得不说混淆很有可能会引起程序异常, 尤其是对于匿名类的支持, 所以我仅仅选择了
 
 必要
 
 的保护措施, 经过实验和参考该项目的
 
 wiki
 
 , 分别是 ctrl flow, anti debug, anti ildasm, harden, 另外去除了 ConfuserEx 的 watermark , 这里最关键的是 ctrl flow.
- anti debug 保护是通过启动监控debug的线程实现的, 所以文档中建议不要对所有的assembly 进行 anti debug 保护, 仅仅对 main assembly保护, 已避免性能损失.
     项目文件
    
ConfuserEx2 提供GUI和CLI两种工具, 可以将混淆任务保存为项目文件, 下面就是我使用的项目文件.
<project outputDir="D:\my_workspace\test\src\bin\Debug\Confused" baseDir="D:\my_workspace\test\src\bin\Debug" xmlns="http://confuser.codeplex.com">
  <rule pattern="true" inherit="false">
    <protection id="ctrl flow" />
    <protection id="anti debug" />
    <protection id="anti ildasm" />
    <protection id="harden" />
    <protection id="watermark" action="remove" />
  </rule>
  <module path="test.exe" />
</project>
     GUI设置截图如下:
     
      
    
 
版权声明:本文为csdnharrychinese原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
