SmartAssembly有一种使用单文件可执行文件* (EXE) (在 .NET Core 3 中引入)的官方方法,以便使用其混淆工具进行发布。
我们遵循了这种方法。简而言之,他们使用了一种聪明的,我不会说'hack',而是将混淆的程序集注入 MSBuild / 发布过程(通过目录)的“方法” 。$(ProjectDir)\obj
这似乎有效,因为它会生成一个按预期执行的 .EXE 文件。
我们遇到的问题是,当我们在二进制级别检查生成的单个可执行文件时,我们发现它似乎包含主要程序集引用的依赖项副本(应该通过 SmartAssembly 合并和混淆)以未混淆的形式!这个结果违背了使用混淆器的目的。
有人以这种方式成功使用过 SmartAssembly 吗?
更新:这里有一个示例项目说明了这个问题(这个示例项目是针对 .netcoreapp3.1 构建的,所以这不是 .net5.0 特定的问题)。此示例是一个依赖于类库的控制台应用程序。混淆项目设置为混淆类库并将其合并到控制台应用程序中。
此图像显示了单个 EXE 文件的十六进制转储的一部分,其中包含一个应该被混淆的字符串。事实上,EXE 包含整个类库的原样。
最后,如果您构建并运行示例,它会尝试打印一个混淆类型的名称和一个混淆字符串,该字符串作为它的混淆类型出现。我们在这一点上的结论是这个问题很可能是由发布过程将未混淆的依赖项重新添加回 .EXE 文件引起的。