问题标签 [smartassembly]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
116 浏览

asp.net-core - 如何使用 SmartAssembly 使用 Razor Pages 混淆 ASP.NET Core 应用程序?

我试图用 SmartAssembly 混淆我的 Razor 应用程序,但我遇到了问题。

我的应用程序中有很多 Razor (cshtml) 页面,它们都包含对项目中许多不同类型的引用。这是一个问题,因为 cshtml 文件在部署期间没有编译,并且混淆过程不会影响它们。这会导致大量 TypeLoadExceptions 和 MissingFieldExceptions,因为在运行时编译 cshtml 文件时,其中的 C# 代码引用了原始的非混淆类型。

我尝试启用PrecompileBeforePublish希望它将 C# 与 HTML 分开,以便它可以由 SmartAssembly 处理,但页面似乎没有在构建中编译。

SmartAssembly 中是否有启用 Razor 支持的设置,或者我可以对我的 ASP.NET Core 项目做一些事情以使混淆成为可能?

ASP.NET Core 版本:3.1 SmartAssembly 版本:7.5

0 投票
0 回答
219 浏览

c# - 如何将 SmartAssembly 8 与 .NET 3.1+ 单文件可执行文件 (.EXE) 发布一起使用,而不是最终得到捆绑的、未混淆的依赖项?

SmartAssembly有一种使用单文件可执行文件* (EXE) (在 .NET Core 3 中引入)的官方方法,以便使用其混淆工具进行发布。

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

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

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

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

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

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