一起谈.NET技术,WPF与混淆器

简介: 时至今日,混淆依然是.Net程序的一道重要保护手段,而混淆器对WPF应用程序的支持是怎样的呢?我们今天就通过实例讲解一下。首先建立如下图所示的简单的用户界面:在界面代码中设置一些绑定属性:在后台代码中首先定义一个种族枚举,以便于在列表中使用:下面在窗体Window1类中定义以下属性:红圈处的代码功能是将种族枚举的全部值载入到种族列表属性中,这样就可以在前后台一直以统一、优雅的方式使用枚举,这是个不错的小技巧。

时至今日,混淆依然是.Net程序的一道重要保护手段,而混淆器对WPF应用程序的支持是怎样的呢?我们今天就通过实例讲解一下。

首先建立如下图所示的简单的用户界面:

在界面代码中设置一些绑定属性:

在后台代码中首先定义一个种族枚举,以便于在列表中使用:

下面在窗体Window1类中定义以下属性:

红圈处的代码功能是将种族枚举的全部值载入到种族列表属性中,这样就可以在前后台一直以统一、优雅的方式使用枚举,这是个不错的小技巧。

接下来在构造函数中直接硬编码一些属性的值,然后将自己作为自己的DataContext

玩魔兽的朋友们请勿喧哗….

现在编译并运行程序,可以看到数据被很好地反映到了界面上:

OK,接下来就是主角了,我们将以Dotfuscator Professional Edition 4.3 Evaluation为例来进行介绍。

打开Dotfuscator后直接新建项目,载入我们编译好的程序,然后直接进行混淆和输出,运行输出后的程序:

嗯,什么数据都没显示出来,为什么呢?

据我的理解就是,混淆器目前还没法解析及修改XAML文件,致使混淆后的后台代码与前台XAML界面描述不匹配,比如“{Binding 种族}”之类的语句根本无法与混淆后的代码关联,所以就全部都无法显示。

以下显示了部分混淆的映射结果:

其中灰色底色的项代表已被从程序中移除,其他的都有对应的混淆后的名称。

现在,要使混淆后的程序正常工作,我们就必须向XAML妥协。

你可能首先想到的是恢复上面被删除的那几个与界面相关的属性,但是我尝试过,那并不起作用。

而只要禁止对Window1类的混淆,问题就基本上解决了:

看看混淆的结果,大概能猜想出Dotfuscator是自动将禁止混淆的类的公共属性也加入到排除混淆行列的,那几个属性这次没有被移除:

但我仍无法解释为什么当只禁止混淆属性、不禁止混淆类时程序仍旧无法正常工作。

现在还有个问题,就是列表上显示的是混淆后的枚举名称,这很好处理,只要禁止混淆枚举的所有字段就好了:

现在程序已完全恢复正常了,但是这与未经混淆的程序也没有太大分别了,看看通过Reflector解析的混淆后的程序:

总结:混淆技术原本已经算是比较完善了,而现在,WPF又为之带来了新的挑战,我们只能期待各厂商能够尽快跟进,让WPF程序也能受到全面的保护,为其未来的广泛应用奠定基石。

本文的PDF版本下载:http://www.box.net/shared/abeeolbk72

源代码下载:http://www.box.net/shared/uqadhnhsua

目录
相关文章
|
6月前
|
缓存 C# 虚拟化
WPF列表性能提高技术
WPF数据绑定系统不仅需要绑定功能,还需要能够处理大量数据而不会降低显示速度和消耗大量内存,WPF提供了相关的控件以提高性能,所有继承自`ItemsControl`的控件都支持该技术。
|
8月前
|
C# Windows
WPF技术之图形系列Polygon控件
WPF Polygon是Windows Presentation Foundation (WPF)框架中的一个标记元素,用于绘制多边形形状。它可以通过设置多个点的坐标来定义多边形的形状,可以绘制任意复杂度的多边形。
455 0
|
8月前
|
C# Windows
WPF技术之RichTextBox控件
WPF RichTextBox是Windows Presentation Foundation (WPF)中提供的一个强大的文本编辑控件,它可以显示富文本格式的文本,支持多种文本处理操作。
346 0
|
1月前
|
XML 数据可视化 C#
C# .NET面试系列五:WPF
<h2>WPF #### 1. WPF 由哪两部分组成? Windows Presentation Foundation (WPF) 由两个主要部分组成: 1、XAML (eXtensible Application Markup Language) ```c# 这是一种基于 XML 的标记语言,用于定义用户界面的结构和外观。XAML允许开发人员使用声明性语法来描述应用程序的用户界面元素,而不是使用传统的编程方式。XAML 被广泛用于定义 WPF 窗体、控件、布局和动画。 ``` 2、Code-behind 文件 ```c# 这是包含与用户界面相关逻辑的代码文件。通常,开发人员可
74 4
|
8月前
|
存储 自然语言处理 C#
WPF技术之Binding
WPF(Windows Presentation Foundation)是微软推出的一种用于创建应用程序用户界面的框架。Binding(绑定)是WPF中的一个重要概念,它用于在界面元素和数据源之间建立关联。通过Binding,可以将界面元素(如文本框、标签、列表等)与数据源(如对象、集合、属性等)进行绑定,从而实现数据的双向传递和同步更新。
142 2
WPF技术之Binding
|
8月前
|
数据挖掘 数据处理 C#
WPF技术之DataGrid控件
WPF DataGrid是一种可以显示和编辑数据的界面控件。它可以作为表格形式展示数据,支持添加、删除、修改、排序和分组操作。
180 0
|
4月前
|
人工智能 机器人 C#
Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)
一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。
|
7月前
|
C#
WPF技术之动画系列-上下运动
本例子展现动画小球上下循环运动
125 0
|
8月前
|
前端开发 C# 容器
WPF技术之Command
WPF Command是一种在MVVM(Model-View-ViewModel)模式中用于处理用户界面交互的机制。它可以将用户界面事件(如按钮点击、菜单项选择等)与应用程序逻辑(命令处理)解耦,同时提供了一种便捷的方式来管理和执行命令
134 2
|
8月前
|
定位技术 C# UED
WPF技术之ScrollViewer控件
WPF ScrollViewer是WPF中常用的一个控件,它提供了滚动视图的功能,可用于显示超出容器可视区域的内容。ScrollViewer通常用于容纳大量内容的控件,以在有限的空间内显示这些内容,并允许用户通过滚动来查看隐藏的部分。
699 0