.NET Core单文件发布的混淆器

3
有没有一种混淆工具可以很好地处理 dotnet core 单文件发布后生成的 exepdb 文件?
我使用了dotnet core单文件发布命令:dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true。这很好地为我提供了两个干净的文件,一个exe文件和一个pdb文件,我能够将它们交给客户运行我的应用程序。
然而,我仍然担心它被反编译的能力。
我尝试在这两个文件上使用ILSpy和JustCompile,它们幸运地不能用这些工具反编译。那么我的文件是否安全呢?还是这些工具还没追上来?
如果是后者,有什么混淆工具可以用来保护这些文件吗?我尝试使用Obfuscar,但它无法针对单文件发布的输出,即exepdb文件。
有关此问题的任何建议或推荐要使用哪种混淆工具?

“工具还没有跟上来吗?”是的,没错。当前(3.x)的单文件基本上是一个压缩文件,其中包含您的程序集以及.NET Core运行时。第一次运行它时,它会解压到另一个目录中。尝试对该未压缩版本运行您的工具。 - omajid
但是压缩版本才是我将要交给客户的版本。如果我对未压缩的版本进行运行,例如使用Obfuscar,这只会给我其他未压缩的dll文件。但这不会影响单个文件发布输出,即我提供给客户的exe和pdb文件。 - Keisha W
我觉得你误解了我的意思:单个文件就是压缩版本。当你在客户端的机器上运行它时,它会自动解压缩。 - omajid
我理解你的意思,但为了明确起见。当应用程序运行并未压缩时,我无法访问客户端的机器。因此,我如何混淆我的文件,然后使用单个文件发布来压缩它们,然后在客户端的机器上运行时它将被混淆。是否有这样的解决方案呢? - Keisha W
哦,抱歉,我没有关于正确工具的答案。我只是想指出,当前工具在单次发布上无法正常工作并不一定意味着您的代码无法恢复。 - omajid
3个回答

4

声明:我在PreEmptive的Dotfuscator团队工作。

我们已经测试并验证了Dotfuscator Professional可以处理.NET Core 3和.NET 5中的这种情况。具体来说,您必须使用Dotfuscator Professional的MSBuild集成,这现在是我们推荐的新项目使用Dotfuscator Professional的方法。然而,在.NET Core或.NET 5上,Dotfuscator将不会更新.pdb文件,因此您将无法调试使用Dotfuscator的构建(例如Release构建)。您不应向不受信任的用户提供.pdb文件。


2
您可以手动解包自包含的.NET Core可执行文件,然后对其进行反编译: Can .Net Core 3 self-contained single executable be decompiled? 在将各个程序集压缩为单个文件之前,在构建过程中运行混淆器可能是可能的。如果添加了自定义MSBuild目标来执行混淆器,并使用BeforeTargets属性将其集成到构建过程的正确点,则可能会实现这一点。但我还没有详细研究.NET核心构建系统。

我在https://github.com/obfuscar/obfuscar/issues/301上做了一些工作。问题是尽管dll已经混淆,但在检查时仍然存在问题。当运行.exe后检查临时文件夹时,.dll仍未被混淆。 - lastlink
2
有进展了,终于可以在这里发布了。需要将其复制到 obj/Release 文件夹中,才能包含在单个发布文件中。 - lastlink

1
你可以使用Obfuscar。在目标编译后的obj目录中使用它,然后将混淆后的文件复制到目录中(替换原始文件)。

很多的漏洞。例如,它会混淆实现在您内部类中的“IDisposable.Dispose”,这会导致您的应用程序崩溃。 - huang
将混淆文件复制到目录中,我应该将文件复制到哪个目录? - UnAlpha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接