首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET 6混淆

.NET 6混淆
EN

Stack Overflow用户
提问于 2022-02-06 08:12:06
回答 3查看 3.4K关注 0票数 3

我试图用“产生单个文件”选项来混淆编译我的.exe 6项目后获得的一个.NET文件,问题是没有混淆器对它进行处理,我想知道是否有人知道为什么?

谢谢你的答复

EN

回答 3

Stack Overflow用户

发布于 2022-04-21 11:08:49

您必须混淆主应用程序dll,它位于“obj\ application \net6.0-windows\win-x64”文件夹中,并将混淆的dll复制到路径中。

下面是一个使用Obfuscar的工作示例。这些行位于.csproj文件中。

代码语言:javascript
复制
    <Target Name="Obfuscation" AfterTargets="AfterCompile" Condition="'$(PublishProtocol)'!=''">
        <Exec Command="&quot;$(Obfuscar)&quot; obfuscar.xml" />
    </Target>
    <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(PublishProtocol)'!=''">
        <Exec Command="COPY &quot;C:\Users\Application\obj\Release\net6.0-windows\win-x64\Obfuscated\Application.dll&quot; &quot;C:\Users\Application\obj\Release\net6.0-windows\win-x64\Application.dll&quot;" />
    </Target>

之后,当您发布单个文件exe时,存档中的应用程序代码将被混淆。

票数 2
EN

Stack Overflow用户

发布于 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源代码的说明

票数 0
EN

Stack Overflow用户

发布于 2022-09-12 14:12:10

将.NET应用程序发布为单个文件时,实际代码位于DLL文件中。EXE文件只是一个启动程序。

回到混淆的问题上,我们的想法是在编译器将程序集放置到中间目录之后将其模糊化。例如,如果使用ArmDot,只需编写:

代码语言:javascript
复制
<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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71005311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档