27

我刚刚完成了我的 C# 项目(WPF),但现在我遇到了使用“obfuscar”的问题(如果更容易使用,欢迎另一个应用程序)。

当然,我已经在互联网上寻找过它,但没有找到“新手”的文档......

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

  • 我看不到混淆器的安装文件,所以第一步我想我错过了什么?
  • 我在示例目录中看到了一个文件 obfuscar.xml。我了解该文件的用途,但我不知道它被称为什么级别。

可以请一些人帮忙吗?这不是我现在做的一个大项目,但我想学习如何去做,从昨天开始我什么都不懂,这就是我最终决定在这里发帖的原因。

4

7 回答 7

46
  1. 下载 您可以从 Nuget 下载的Obfuscar.Console.exe 然后解压缩 obfuscar.versionnumber.nupkg,并找到该 exe。
  2. 除 exe 外,创建1 个输入文件夹和 1 个输出文件夹。将 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. 输出文件夹将包含处理后的二进制文件。

于 2017-05-12T11:41:28.087 回答
25

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

可用参数的完整列表在这里

<?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>
于 2018-02-10T01:20:12.857 回答
14

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

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

dotnet tool install --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 - 最后,右键单击您的项目,然后右键单击属性,生成事件,并在生成后事件文本框中添加此行:

if $(ConfigurationName) == Release obfuscar.console .\obfuscar.xml
于 2019-02-08T14:39:37.553 回答
13

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

  1. 将 Obfuscar NuGet 包添加到您的解决方案中。
  2. 将 obfuscar.xml 文件添加到您的项目并更改 Copy to Output Directory: Always。有关 XML 示例,请参阅 vinsa 在此线程上的帖子。我必须在“InPath”变量中包含我的项目的完整路径。然后混淆的文件夹在 bin/[debug/release] 下。

  3. 在 Visual Studio 生成后事件中输入:“$(Obfuscar)”obfuscar.xml

于 2018-12-02T17:18:22.563 回答
2

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

<?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>
于 2021-03-12T20:40:33.423 回答
2

从 PowerShell 作为管理员:

PS> Install-Package Obfuscar

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

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

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

于 2017-09-27T10:38:25.533 回答
1

发布过程中的 Autmate Obfuscar

(在 .net 5 中测试)

在您的解决方案/项目根目录中将 Obfuscar Global Tool安装为全局或本地的.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\5.0.5" />
    <Module file="$(InPath)\dependencyToObfuscate.dll" />
    <Module file="$(InPath)\mylibraryToObfuscate.dll" />
</Obfuscator>

请参阅有关混淆器配置文件 (obfuscar.xml)的更多信息。

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

希望有所帮助。感谢任何更好的解决方案。我在 windows 上的 asp.net core 5 项目中对此进行了测试。

于 2021-10-27T20:15:31.500 回答