.net 混淆工具

  • Post author:
  • Post category:其他


obfuscation tools

.net 社区有很多混淆工具, 比如这个清单:

https://github.com/NotPrab/.NET-Obfuscator


比较有名的商业工具有 .NET REACTOR

https://www.eziriz.com/

,

开源软件中, 最受欢迎的有:

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 的使用.

保护手段:

  1. ConfuserEx2 支持压缩 pack, 可以提高反编译的难度, 但经常被杀毒软件误报, 所以不建议使用.
  2. ConfuserEx1 也支持压缩 pack, 在我的电脑不会被杀毒软件报警, 但不确定其他杀毒软件是否会报警, 所以不建议使用.
  3. 不得不说混淆很有可能会引起程序异常, 尤其是对于匿名类的支持, 所以我仅仅选择了

    必要

    的保护措施, 经过实验和参考该项目的

    wiki

    , 分别是 ctrl flow, anti debug, anti ildasm, harden, 另外去除了 ConfuserEx 的 watermark , 这里最关键的是 ctrl flow.
  4. 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 版权协议,转载请附上原文出处链接和本声明。