繁体   English   中英

如何安装和使用 obfuscar?

[英]How to install and use obfuscar?

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

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

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

  • 我没有看到 obfuscar 的安装文件,所以在第一步我想我错过了什么?
  • 我在示例目录中看到一个文件 obfuscar.xml。 我了解该文件的用途,但我没有看到它在什么级别被调用。

请问哪位大侠能帮帮忙吗?我现在做的项目不是很大,但是我想学习一下怎么做,昨天开始我什么都看不懂,所以我最终决定在这里发帖。

  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. 输出文件夹将包含处理后的二进制文件。

我刚刚为 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>

我将其设置为在 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

为了在 .Net Core 2.1 控制台应用程序上使用它,您可以执行以下操作:

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

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

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

从 PowerShell 作为管理员:

PS> Install-Package Obfuscar

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

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

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

必须将这些设置用于 .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>

Autmate Obfuscar 在发布过程中

(在 .net 5 中测试)

在您的解决方案/项目根目录中将 Obfuscar 全局工具安装为.Net 工具全局或本地:

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

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

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

或使用 ComputeFilesToPublish 目标:

  <Target Name="PublishObfuscarOutput" AfterTargets="ComputeFilesToPublish">
    ...
  </Target>

用 obfuscar 输出目录名称替换protected

obfuscar.xml 文件示例:

<?xml version="1.0" encoding="utf-8" ?>
<Obfuscator>
    <Var name="InPath" value="." />
    <Var name="OutPath" value="$(InPath)\protected" />
    <Module file="$(InPath)\mylibrary.dll" />
</Obfuscator>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM