代码混淆
大家都知道,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
鼓励一下
赞完再走