1

我有这个问题:

我制作了一个 C# WPF (.NET Framework 4.0) 应用程序,一切正常。现在我想混淆它。我尝试使用 Confuser。

问题是:

  1. 如果应用程序已发布,我可以看到主 exe 文件和 dll-s。所以我试图混淆exe。我应该把混淆的 .exe 生成文件放在哪里(我只混淆了主 exe 文件)。我的意思是 Confuser 创建了一个名为“Confuser”的文件夹,其中包含经过混淆的 exe。如果我双击混淆的 exe 以启动应用程序,通常它不起作用,我得到正常的应用程序粉碎窗口。我还尝试将原始 exe 文件(在 app 文件夹中)替换为经过混淆的文件(来自 Confuser 文件夹)。

  2. 如果应用程序已部署,我有 setup.msi 包或 setup.exe。在这种情况下我应该如何混淆?

谢谢,阿德里安

4

3 回答 3

3

对于大多数混淆器来说,所有基于 XAML 的平台(WPF、Silverlight、Windows Phone)都是相当有问题的领域。主要问题是 XAML 按名称引用类型和成员。难怪应用程序在混淆后经常无法工作:完整性破坏。

混淆器使用两种方法来保持输出组装之后的工作:

  1. 在 XAML 内容中搜索可能是类型或属性名称的所有内容,然后大致排除与这些名称匹配的所有成员。这并不能 100% 保证应用程序不会被破坏,同时由于分析不准确而使混淆覆盖率变差。这种方法仍然可以使您的应用程序免于中断。

  2. 执行与 XamlReader 类似的操作:加载 XAML 树并查找所有匹配的 CLR 类型和成员。重命名后,所有更改都与 XAML 同步。这种方法提供了最佳的可靠性和覆盖率(类型和成员在代码和 XAML 中都被重命名)。市场上有一些混淆器声称它们支持 XAML 重命名。您可能想尝试其中的一些。

还有一种解决方法。大多数混淆器支持条件混淆,允许手动排除特定类型和成员。您应该手动排除 XAML 以某种方式引用的所有类型和成员。这将需要一些时间,但通常有效。

于 2013-10-05T01:58:23.073 回答
0

首先,混淆主 .exe 文件并替换旧文件。然后将所有内容打包到安装程序中。

还要确保 xaml 中涉及的所有属性和类型都声明为公共的。或者告诉混淆器以某种方式忽略它们。

于 2013-09-30T07:34:55.327 回答
0

我会先尝试一个简单的控制台应用程序。确保您可以使用它。

然后我可能会开发一个简单的 WPF 应用程序。

WPF 和混淆的问题在于它依赖于反射。视图模型由名称绑定。可能是这个混淆器对此不敏感,或者您需要将其配置为忽略视图模型上的属性名称。

如果您有任何其他使用名称的反射,那也可能会破坏它。即使是一个Enum.Parse电话也可能被绊倒。也许您对 XML 进行序列化/从 XML 序列化,这也是它可能会中断的一点。

您可能希望显示应用程序崩溃的异常以帮助您进行调试,但我会通过简单的应用程序自己使用该工具来确定它如何解决上述问题。

于 2013-09-30T08:27:10.790 回答