如何安装和使用obfuscar?

How to install and use obfuscar?

我刚刚完成我的 C# 项目 (WPF),但现在我在使用 "obfuscar" 时遇到问题(如果更容易使用,欢迎使用其他应用程序)。

当然我已经在互联网上寻找它了,但没有找到文档 "for newbies"...

我也尝试使用 github 提供的 obfuscar 提供的 BasicExempleExe,然后还有一些问题:

请问有人能帮上忙吗?我现在做的不是什么大项目,但我想学习怎么做,从昨天开始我什么都不懂,这就是为什么我终于决定post这里

  1. 下载 Obfuscar.Console.exe 你可以从Nuget下载,然后解压obfuscar.versionnumber.nupkg,找到exe。
  2. 除 exe 外,创建 一个 输入文件夹 和一个 输出文件夹 。将 BasicExemple.exe 放入 输入文件夹 .
  3. 除exe外,创建纯文本文件(例如config.xml),内容可以很简单:

    <?xml version='1.0'?>
    <Obfuscator>
      <Var name="InPath" value=".\input folder name" />
      <Var name="OutPath" value=".\output folder name" />
      <Module file="$(InPath)\BasicExemple.exe" />
    </Obfuscator>
    
  4. 运行 cmd,cd到exe所在目录,然后运行 Obfuscar.Console.exe config.xml

  5. 输出文件夹将包含处理后的二进制文件。

来自 PowerShell 作为管理员:

PS> Install-Package Obfuscar

这会将 Obfuscar.Console.exe 可执行文件放在目录中:

C:\Program Files\PackageManagement\NuGet\Packages\Obfuscar.2.2.9\tools

相应地更改目录名称中的版本号。

我刚刚为 Obfuscar 创建了一个扩展配置文件并想分享它。

可用参数的完整列表here

<?xml version='1.0'?>
<Obfuscator>
  <Var name="InPath" value="." />
  <Var name="OutPath" value=".\Obfuscator_Output" />
  <Var name="KeepPublicApi" value="false" />
  <Var name="HidePrivateApi" value="true" />
  <Var name="RenameProperties" value="true" />
  <Var name="RenameEvents" value="true" />
  <Var name="RenameFields" value="true" />
  <Var name="UseUnicodeNames" value="true" />
  <Var name="HideStrings" value="true" />
  <Var name="OptimizeMethods" value="true" />
  <Var name="SuppressIldasm" value="true" />
  <Module file="$(InPath)\MyApplication.exe" />
</Obfuscator>

我在 Visual Studio 的 Post 构建事件中将其设置为 运行。

  1. 将 Obfuscar NuGet 包添加到您的解决方案中。
  2. 将 obfuscar.xml 文件添加到您的项目并更改复制到输出目录:总是。 有关 XML 示例,请参阅 vinsa 在此线程上的 post。我必须在 "InPath" 变量中包含我的项目的完整路径。然后被混淆的文件夹在 bin/[debug / release].

  3. 在 Visual Studio post 构建事件中输入:“$(Obfuscar)” obfuscar.xml

为了在 .Net Core 2.1 控制台应用程序上使用它,您可以这样做:

1 - 通过在控制台中执行以下命令安装 Obfuscar window:

dotnet 工具安装 --global Obfuscar.GlobalTool --version 2.2.18

(您可以在此处查看最新版本:https://www.nuget.org/packages/Obfuscar.GlobalTool

2 - 将一个 XML 文件添加到你想要混淆的名为 obfuscar.xml 的项目中,其中包含以下内容(来自@vinsa 的回答):

<?xml version='1.0'?>
<Obfuscator>
<Var name="InPath" value=".\bin\Release\netcoreapp2.1\linux-arm\publish" />
<Var name="OutPath" value="$(InPath)\ReadyForDeployment" />
<Var name="KeepPublicApi" value="false" />
<Var name="HidePrivateApi" value="true" />
<Var name="RenameProperties" value="true" />
<Var name="RenameEvents" value="true" />
<Var name="RenameFields" value="true" />
<Var name="UseUnicodeNames" value="true" />
<Var name="HideStrings" value="true" />
<Var name="OptimizeMethods" value="true" />
<Var name="SuppressIldasm" value="true" />
<Module file="$(InPath)\YourProject.dll" />
</Obfuscator>

3 - 最后,右键单击您的项目,然后单击“属性”、“构建事件”,然后在 Post-构建事件文本框中添加以下行:

if $(ConfigurationName) == Release obfuscar.console .\obfuscar.xml

必须将这些设置用于 .NET MVC 网络应用程序(非核心)。在不更改 Public 和 Private API 变量的情况下,我收到了默认文档错误。假设 运行 从 NuGet 在解决方案根目录的“packages”中创建文件夹。

<?xml version='1.0'?>
<Obfuscator>
  <Var name="InPath" value="..\..\..\MyWebApp.WebApp\bin\" />
  <Var name="OutPath" value="..\..\..\MyWebApp.WebApp\bin\obfuscar" />
  <Var name="KeepPublicApi" value="true" /><!--Keep true for web app.-->
  <Var name="HidePrivateApi" value="false" /><!--Keep false for web app.-->
  <Var name="RenameProperties" value="true" />
  <Var name="RenameEvents" value="true" />
  <Var name="RenameFields" value="true" />
  <Var name="UseUnicodeNames" value="true" />
  <Var name="HideStrings" value="true" />
  <Var name="OptimizeMethods" value="true" />
  <Var name="SuppressIldasm" value="true" />
  <Module file="$(InPath)\MyWebApp.DataAccess.dll" />
  <Module file="$(InPath)\MyWebApp.Helpers.dll" />
  <Module file="$(InPath)\MyWebApp.Models.dll" />
  <Module file="$(InPath)\MyWebApp.WebApp.dll" />
</Obfuscator>

Autmate Obfuscar in Publish 过程

(在 .net 5 中测试)

在您的 solution/project 根目录中安装 Obfuscar Global Tool as .Net Tool 全局或本地:

dotnet new tool-manifest
dotnet tool install --local Obfuscar.GlobalTool

obfuscar.xml 放在您的项目根目录下。然后在项目文件(.csproj)中添加以下内容

  <Target Name="Obfuscation" AfterTargets="Build" Condition=" '$(Configuration)' == 'Release'">
    <Exec WorkingDirectory="$(TargetDir)" Command="obfuscar.console $(ProjectDir)obfuscar.xml" />
    <ItemGroup>
      <DistFiles Include="$(OutDir)Obfuscated\**\*.dll; $(OutDir)Obfuscated\**\*.exe" />
      <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
        <RelativePath>%(DistFiles.RecursiveDir)%(DistFiles.Filename)%(DistFiles.Extension)</RelativePath>
      </ResolvedFileToPublish>
    </ItemGroup>
  </Target>

或使用 ComputeFilesToPublish 目标(未测试好)。

obfuscar.xml 文件:

<?xml version="1.0" encoding="utf-8" ?>
<Obfuscator>
    <Var name="InPath" value="." />
    <Var name="OutPath" value="$(InPath)\Obfuscated" />
    <AssemblySearchPath path="C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App.0.5" />
    <Module file="$(InPath)\dependencyToObfuscate.dll" />
    <Module file="$(InPath)\mylibraryToObfuscate.dll" />
</Obfuscator>

参考more about obfuscar configuration file (obfuscar.xml).

注意:此解决方案不适用于 dotnet 5 单文件输出发布.

希望对您有所帮助。感谢任何更好的解决方案。我在 windows.

的 asp.net 核心 5 项目中对此进行了测试