我试图用“产生单个文件”选项来混淆编译我的.exe 6项目后获得的一个.NET文件,问题是没有混淆器对它进行处理,我想知道是否有人知道为什么?
谢谢你的答复
发布于 2022-04-21 11:08:49
您必须混淆主应用程序dll,它位于“obj\ application \net6.0-windows\win-x64”文件夹中,并将混淆的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时,存档中的应用程序代码将被混淆。
发布于 2022-06-12 13:58:27
滑冰者混淆器保护.NET 6程序集。它支持发布输出是DLL文件的.NET 6项目(框架相关的部署)。当发布输出是一个调用.NET 6.0DLL(自包含部署)的EXE文件时,最终的DLL也必须被混淆。可以构建两种类型的.NET 6.0应用程序:
框架-依赖于部署。顾名思义,框架依赖部署()依赖于目标系统上存在共享系统范围的.NET 6版本。由于.NET 6已经存在,所以您的应用程序也可以在安装.NET 6之间进行移植,您的应用程序只包含自己的代码和.NET 6库之外的任何第三方依赖项。FDD包含可以使用命令行中的dotnet实用程序启动的.dll文件。例如,dotnet app.dll运行一个名为app的应用程序。
自给部署:与FDD不同,不依赖于目标系统中共享组件的存在。所有组件(包括.NET 6库和.NET 6运行时)都包含在应用程序中,并且与其他.NET 6应用程序隔离。SCDs包括一个可执行文件(如Windows上用于名为app的应用程序的app.exe ),它是特定于平台的.NET 6主机的重命名版本,以及一个.dll文件(如app.dll),它是实际的应用程序。.NET 6应用程序开发遵循了自带部署 (SCD)的概念。让我们看看最后的二进制文件是在WindowsFormsApp项目的输出文件夹中编译的。

您可以在输出文件夹中看到两个主程序集: WindowsFormsApp.exe,WindowsFormsApp.dll,这对文件表示.NET 6自给部署 (SCD)概念。该Windows应用程序的最后输出包括WindowsFormsApp.exe可执行文件(它是特定于平台的.NET 6主机的重命名版本)和WindowsFormsApp.dll库文件,后者是实际的应用程序。因此,WindowsFormsApp.exe可执行文件是应用程序的启动程序,并在exe中编译了必要的预定义.NET 6实用程序。理想情况下,exe文件是跨平台的可执行文件。可执行文件是在机器代码中编译的二进制文件。此文件无法解压缩,不需要混淆。
最后,您必须专注于WindowsFormsApp.dll程序集保护。阅读溜冰者如何获得.NET 6源代码的说明
发布于 2022-09-12 14:12:10
将.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)。
https://stackoverflow.com/questions/71005311
复制相似问题