推荐一个开源强大的 .NET 代码混淆神器

科技   2024-11-16 22:44   上海  


代码混淆

大家都知道,C# 代码在编译后生成的中间语言(IL)非常容易被反编译,几乎可以直接还原为可读的源代码。这对于一些对安全性要求较高的场景来说,存在较大的风险。

为了有效保护核心逻辑和关键业务代码,代码混淆是一种常用且必要的手段。通过对代码结构、变量名称和逻辑流程进行混淆处理,即使代码被反编译,也会变得极其难以理解,从而在一定程度上防止恶意逆向工程和知识产权泄露,提升代码的安全性和可靠性。

Obfuscar

今天推荐一个开源免费的 .NET 混淆神器,容易上手使用,在 Github 上拥有 2.4k 的 star,可以它还是很受欢迎的。

它使用了大量的重载,把 .NET 程序集中的元数据(包括方法、属性、事件、字段、类型和命名空间的名称)重命名为最小集,在大多数情况下只能通过签名来区分。

功能特性

  • 功能强大,开源免费,配置简单
  • 名称混淆, 隐藏您不想公开的类/方法/属性/事件名称
  • 支持字符串压缩
  • 支持 dotnet 全局工具
  • 支持多平台,Windows、macOS 和 Linux
  • 支持多框架, .NET, Xamarin, Unity,.NET Framework

简单示例

Obfuscar 的实现原理是,把元数据打乱在一组程序集中。它将所有内容重命名为可用于识别它们的最小名称集(给定签名和类型信息)。由于这些新名称比旧名称更短,因此它也大大缩小了可执行文件的大小,下面是一个例子

public ExampleUI( )
{
        InitializeComponent( );

        ClassX cx = new ClassX( "Some Text" );

        displayText.Text = cx.DisplayText;
}

该代码可以反编译(通过ILSpy )为:

public ExampleUI()
{
        this.InitializeComponent();
        this.displayText.Text = new ClassX("Some Text").get_DisplayText();
}

而混淆后,反编译后的代码是这样的:

public A()
{
        this.A();
        this.a.Text = new A.A("Some Text").A();
}

这是一个最简单的例子,Obfuscar 的更多功能可以通过配置实现。

.NET Core 全局工具

.NET Core 2.1 SDK引入了全局工具,从2.2.15版本开始,Obfuscar就可以作为全局工具使用。

要将 Obfuscar 安装为全局工具,请执行:

dotnet tool install --global Obfuscar.GlobalTool

安装完成后,您可以调用obfuscar.console来运行 Obfuscar。


项目地址:

https://www.obfuscar.com



鼓励一下

赞完再走


Dotnet 工具箱
定期分享 Dotnet 有趣,实用的工具和组件。
 最新文章