我正在尝试混淆使用“生成单个文件”选项编译我的.NET 6项目后得到的.exe文件,但问题是没有一个混淆器可以处理它。我想知道是否有人知道原因?
提前感谢您的回答。
我正在尝试混淆使用“生成单个文件”选项编译我的.NET 6项目后得到的.exe文件,但问题是没有一个混淆器可以处理它。我想知道是否有人知道原因?
提前感谢您的回答。
您需要混淆位于“obj\Release\net6.0-windows\win-x64”文件夹中的主应用程序dll,并将混淆后的dll复制到该路径。
这是使用Obfuscar的工作示例。这些行位于.csproj文件中。
<Target Name="Obfuscation" AfterTargets="AfterCompile" Condition="'$(PublishProtocol)'!=''">
<Exec Command=""$(Obfuscar)" obfuscar.xml" />
</Target>
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(PublishProtocol)'!=''">
<Exec Command="COPY "C:\Users\Application\obj\Release\net6.0-windows\win-x64\Obfuscated\Application.dll" "C:\Users\Application\obj\Release\net6.0-windows\win-x64\Application.dll"" />
</Target>
在发布单文件exe之后,您存档内的应用程序代码将被混淆。
当您将 .NET 应用程序发布为单个文件时,实际代码位于 DLL 文件中。EXE 文件只是一个启动器。
回到混淆,想法是在编译器将程序集放置到中间目录后立即对其进行混淆。例如,如果您使用 ArmDot,只需编写:
<Target Name="Protect" AfterTargets="AfterCompile" BeforeTargets="BeforePublish">
<ItemGroup>
<Assemblies Include="$(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)" />
</ItemGroup>
<ArmDot.Engine.MSBuildTasks.ObfuscateTask
Inputs="@(Assemblies)"
ReferencePaths="@(_ResolveAssemblyReferenceResolvedFiles->'%(RootDir)%(Directory)')"
SkipAlreadyObfuscatedAssemblies="true"
/>
</Target>
使用任何混淆器都可以采用相同的方法。 关键是要使用以下路径: $(ProjectDir)$(IntermediateOutputPath)$(TargetFileName)。
之后,混淆程序集(DLL)将被发布。