WPF与混淆器

时至今日,混淆依然是.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

时间: 2024-08-31 12:35:48

WPF与混淆器的相关文章

WPF“.NET研究”与混淆器

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

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

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

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

开源.net 混淆器ConfuserEx介绍

原文:开源.net 混淆器ConfuserEx介绍 今天给大家介绍一个开源.net混淆器--ConfuserEx http://yck1509.github.io/ConfuserEx/ 由于项目中要用到.net 混淆器,网上搜寻了很多款,比如Dotfuscator.xeoncode.foxit等等. 但大部分收费,当然也有破解版的,公司要求不能用盗版软件. 找了半天终于找到了ConfuserEX,用起来还行,就赶紧拿出来给大家分享下.   下载地址:https://github.com/yck

用dotfuscator混淆器混淆后的dll,怎么调用不了??急!

问题描述 用dotfuscator混淆器混淆后的dll,怎么调用不了??急!混淆后的dll里面的类名,方法名都变了,可是程序也调用不了这个dll了,要这样的混淆器有什么用呀.请教一下,怎么解决这个问题. 解决方案 解决方案二:还没混淆破解的人先把自己混淆了...解决方案三:估计是混淆的时候勾选了混淆方法名吧你在看看混淆的设置解决方案四:混淆本来就很多问题.你需要混淆exe关联这些dll.一般混淆的东西,你过多使用反射的情况下都有问题.解决方案五:引用1楼的回复: 还没混淆破解的人先把自己混淆了.