WPF“.NET研究”与混淆器

上海企业网站制作>

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

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

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

上海企业网站设计与制作lang="EN-US">

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

下面在窗体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

时间: 2024-09-28 06:33:53

WPF“.NET研究”与混淆器的相关文章

WPF与混淆器

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

&#106avascript代码混淆综合解决方案-&#106avascript在线混淆器

解决|在线 文章来源:javascriptOnlineObfuscator">http://www.BizStruct.cn/JavascriptOnlineObfuscator Javascript 代码混淆的目的 Javascript 是一种解释执行的脚本语言,主要应用于 Web 领域的客户端的浏览器中:由于 Javascript 解释执行的特性,代码必须明文下载到客户端,并且可以很容易的进行调试,使得 Javascript 代码的保护非常困难: 不同的人对 Javascript 代码

Javascript代码混淆综合解决方案-Javascript在线混淆器_javascript技巧

 文章来源:javascriptOnlineObfuscator">http://www.BizStruct.cn/JavascriptOnlineObfuscator Javascript 代码混淆的目的 Javascript 是一种解释执行的脚本语言,主要应用于 Web 领域的客户端的浏览器中:由于 Javascript 解释执行的特性,代码必须明文下载到客户端,并且可以很容易的进行调试,使得 Javascript 代码的保护非常困难: 不同的人对 Javascript 代码的保护有不

Stunnix C and C++ Obfuscator 3.8发布 代码混淆器

Stunnix C++XX-Obfus是一个C和C++源代码的代码混淆器.它可以将源代码转换为一个高度错位的形式,使竞争对手或客户非常困难地研究.分析或再利用,同时完整保留原代码的功能.它具有很多选项来控制代码隐藏的各个方面,并全力支持所有的语法结构. Stunnix C and C++ Obfuscator 3.8该版本可以忽略Git.Subversion和Mercurial的元数据目录,当正在创建项目或浏览目录时.已忽略名单上的目录.http://www.aliyun.com/zixun/a

加密加壳-Foxpro的混淆器,有哪一位大侠可以阐述明确一点????

问题描述 Foxpro的混淆器,有哪一位大侠可以阐述明确一点???? 针对FOXPRO的加密加壳的问题,本人很想采用混淆器来解决一些问题,现在关键的问题,程序中含有联网络服务器数据库的句柄,这一点很让人头痛,如果用一个加密文件或加密字段来存这个句柄的关键内容,是可以不会直接写出来,但,如果破解高手用里面的程序照样读出这个内容,然后再赋到一个变量里,不是照样可以显示出来,根本是无法保密的,请教高手大虾们,给个清晰的思路!不胜感谢了!!! 解决方案 devmiao 苏小喵 Ds Rxr 不要客户端直

关于强名称和混淆器问题

问题描述 Hi大虾,我现在程序需要保护起来,用强名称以后程序在运行时报错,类似assembly没有签名的错误,应为我的项目是多工程的,主程序没有签名,其他使用了.还有使用自带的混淆器后,资源文件访问错误.我的程序会动态访问资源文件,结果他把资源给混淆了,访问地方没有改,有遇到的吗 解决方案 解决方案二:遇到过类型的问题,我用了强签名,混淆之后,总是说强类型验证失败,不知怎么解决解决方案三:找第三方软件混淆加密吧,很多的.

在Eclipse的ProGuard(混淆器)设置里,Proguard Keep Expressions的表达式是怎么样的

问题描述 在Eclipse里的ProGuard(混淆器)设置里,ProguardKeepExpressions的表达式是怎么样的,我要将指定的几文件给过滤掉,不被混淆,应该怎么写这个表达式?或者谁有ProGuard中文版的使用手册发上来也行,谢谢! 解决方案 解决方案二:举例:-keepclasseswithmemberspublicclasstkl.client.TKLApp{publicstaticvoidmain(java.lang.String[]);}解决方案三:Proguard混淆J

foxpro-能否就FOXPRO混淆器如何混淆举个好的例子???

问题描述 能否就FOXPRO混淆器如何混淆举个好的例子??? 是不是将文字加到一个加密字段或加密的文件里,再读来,那混淆后的语名,真的要分析出就这么一段,会有那么难吗,能否举个例子 nHdl= SQLStringConnect("Driver=Sql Server;Server=61.14.6.224;database=a0223112;uid=a0223112;pwd=55555") 解决方案 不要客户端直接连服务器,那样很危险,而且就算加密程序,只要用网络抓包工具一运行,就看到密码

服务器-OXPRO的无法真正的加壳,或加密,有网络大虾建设,用混淆器.....

问题描述 OXPRO的无法真正的加壳,或加密,有网络大虾建设,用混淆器..... 对FOXPRO的无法真正的加壳,或加密,有网络大虾建设,用混淆器,而我的程序里又有联接网络服务器的句柄,如果被解开,是不是还是一点效果都没用呢!这种混淆器又怎么实现呢! 解决方案 是不是将文字加到一个加密字段或加密的文件里,再读来,那混淆后的语名,真的要分析出就这么一段,会有那么难吗,能否举个例子 解决方案二: 混淆器只是让代码难阅读,难懂,并不是保护不被破解.联结网络服务器的句柄,运行时动态生成,这样解开也是不能