最近公司winphone应用有oem(企业定制版)给客户,为了安全就研究了下代码混淆。
大家可以参考下这个<<C#使用Dotfuscator混淆代码的加密方法>>。
一、注册
首先在Dotfuscator官网上(https://www.preemptive.com/my-account/evaluations?view=evaluations)下载个最新版本,点击here 会要求注册个账号,注册成功并填写 许可信息后会发一个邮件到注册邮箱中,里面有产品序列号(这个序列号只能在一台机子上使用,切记!),有14天的免费试用期。当前最新版本为4.10.1。
二、创建项目
第一次打开软件需填写序列号,然后创建个项目
还有一点在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71下若有这两项要删除要不会报错。我同事电脑上没有这,我有,然后生成总不成功,删除就好了,为了安全搞个备份吧。
三、Input选项
将xap项目中引用的dll右键(exclude assembly from package)去掉,只保留主项目。上面的Newtonsoft.Json.dll不去掉怎样都不行,要不混淆失败,要不生成的xap不能部署(错误类型:Newtonsoft.Json.dll were not resigned. You will need to sign these dotfuscated assemblies manually.;
WARNING: Newtonsoft.Json has non-input Friend Assemblies and is not in Library Mode; internal members may be renamed or pruned. References from non-input Friend Assemblies to the internal members of Newtonsoft.Json may no longer be valid)。
四、Settings选项
将去掉的dll命名空间添加到不更改名称选项中(exclude),type和method也要加上。
“Renaming Scheme” 选择“Unprintable”(不可打印字符,即乱码),也可以选择其他如小写字母、大写字符、数字的方式。
但改为unprintable可能会引发错误(会报“eval_”什么的错误),我改的是数字
六、 String Encryption 选项
全选即可
七、其他的选项选择默认,然后保存、编译即可(第一次保存时会要求保存个项目操作xml文档,编译成功后会在原始xap相同路径中会生成个名为Dotfuscated的文件夹,里面有混淆成功的xap文件和混淆具体内容的map.xml文件)
当过期后重新注册,重新获得sn;还要在C:\Documents and Settings\All Users\Application Data\PreEmptive Solutions\Dotfuscator Professional Edition Evaluation\4.0中删除Dotfuscator.dat继续使用14天。
突然遇到Dotfuscator加密应用闪退现象,花了几天才发现原因:第三方控件不要使用系统事件,否则加密会报错!
如
在c4fToolkit里面加个手势事件(ManipulationStarted),加密后应用会闪退
xmlns:c4fToolkit="clr-namespace:Coding4Fun.Phone.Controls;assembly=Coding4Fun.Phone.Controls" <c4fToolkit:Tile ManipulationStarted="goback_Manipulate" Width="0" Height="70" Title="" Click="goback_Click" > <Image Grid.Column="0" Source="/images/back.png" Stretch="None" RenderTransformOrigin="0.682,0.044" Margin="-44,0,-58,0" /> </c4fToolkit:Tile>
<StackPanel Grid.Column="0" ManipulationStarted="goback_Manipulate" > <c4fToolkit:Tile Width="0" Height="70" Title="" Click="goback_Click" > <Image Source="/images/back.png" Stretch="None" RenderTransformOrigin="0.682,0.044" Margin="-44,0,-58,0" /> </c4fToolkit:Tile> </StackPanel>