2013-09-30 95 views
0

我有这样的问题:C#.NET WPF混淆Confusere

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

的问题是:

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

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

Thankx, 阿德里安

回答

0

首先,你混淆您的主.exe文件,并替换旧的。然后你将所有东西都打包成安装程序

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

+0

但如果我混淆发布的应用程序中的exe(没有包装到安装程序),然后替换原来的exe文件,它不再工作。 –

0

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

然后,我可能会进展到一个简单的WPF应用程序。

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

如果您有任何其他使用名称的反思,也可能会打破它。即使一个Enum.Parse电话可能会被绊倒。也许你是从XML中分离出来的,这也是它可能破坏的一点。

您可能想要显示该应用程序崩溃的异常以帮助您进行调试,但是使用简单的应用程序自己可以轻松地使用该工具来了解它是如何解决上述问题的。

+0

我查看了Windows事件查看器,发现有“无法读取属性”或类似错误。我在appName.config文件中有一些设置。 –

+0

听起来像我是对的。 – weston

2

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

有由模糊处理采用两种方法,以保持后输出的装配工作:

  1. 搜索XAML内容的一切,这可能是一个类型或属性名称,然后大致排除无论如何匹配所有成员这些名字。这并不能100%保证应用程序没有被破坏,同时由于分析不准确而导致模糊覆盖率变差。尽管如此,这种方法可以避免您的应用程序中断。

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

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