如何将 SmartAssembly 8 与 .NET 3.1+ 单文件可执行文件 (.EXE) 发布一起使用,而不会以捆绑的、未混淆的依赖项结束?

问题描述

smartassembly official method 使用 single-file executables* (EXE)(在 .NET Core 3 中引入)以便使用他们的混淆工具进行发布。

我们采用了这种方法。简而言之,他们使用了一种聪明的方法,我不会说'hack',而是将混淆的程序集注入到 MSBuild/发布过程中的'方法' (通过 $(ProjectDir)\obj 目录)。这似乎有效,因为它会生成一个按预期执行的单个 .EXE 文件

我们遇到的问题是,当我们在二进制级别检查生成的单个可执行文件时,我们发现它似乎包含依赖项副本主要程序集引用(应该通过 smartassembly 合并和混淆)以未混淆的形式!这个结果违背了使用混淆器的目的。

有人以这种方式成功使用过 smartassembly 吗?

更新:有一个示例项目 here 说明了这个问题(这个示例项目是针对 .netcoreapp3.1 构建的,所以它不是 .net5.0 -特定问题)。此示例是一个依赖于类库的控制台应用程序。混淆项目设置为混淆类库并将其合并到控制台应用程序中。

This image 显示单个 EXE 文件的十六进制转储的一部分,其中包含一个应该被混淆的字符串。事实上,EXE 包含了整个类库。

最后,如果您构建并运行示例,它会尝试打印混淆类型的名称和混淆字符串,该字符串作为其混淆类型出现。我们目前的结论是,这个问题很可能是由于发布过程将未混淆的依赖项重新添加回 .EXE 文件所致。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)