WinRT C#代码混淆

来源:互联网 发布:大学新生入学指南 知乎 编辑:程序博客网 时间:2024/04/29 08:36

        众所周知,C#代码是极易被反编译的,所以当一些工程有涉及到公司知识产权的代码时,我们就有必要对代码进行混淆。因为我这段时间在研究win8,所以接下来讲讲windows store application 中C#代码混淆的方法。

        前一部分都是扯调研过程中碰到的一些坑,如果只想找到解决方法,可以直接跳到解决方案一节查看。

 

        通过搜索,发现大家推荐的比较多的代码混淆工具是Dotfuscator,但是这个工具是收费的,费用较高且没有试用版本。当然网上也有相应的破解版本,但大都是很老版本的破解,而按照官网上的升级描述,只有4.9.8000 Beta及以后的专业版本才支持windows  store application,即对appx文件进行混淆,所以这些破解版本并不适合我们。综合考虑,现阶段只能暂时放弃了这个工具。

        之后再次到微软的论坛上查询,找到了Onfuscation这篇文章,其中介绍了几种混淆的方式,经过筛选,选择了其中的BabelObfuscator。根据官网中的介绍,这个混淆工具在6.0.0.0就开始支持windows store application。

        但是不得不说,我还是在这个工具上栽了跟头。我能够正常的执行完全部操作,并且已经生成了混淆后的windows  store application文件,即appx文件。并且安装后一般功能也能正常使用。但是我们的程序有一个特殊的地方,就是我调用了一个C++的DLL,而恰恰是这个DLL给我们带来了问题,只要执行到这个DLL的方法调用,我们的程序就崩溃。在查看使用文档没有找到解决方法后,又一次不得不放弃了这个工具。

        当然,BabelObfuscator这个工具对一般的C#代码是可以正常混淆的,按照其官方文档说明,即使是多个DLL调用也可以使用,只是我调用的一个C++的DLL,所以出错(当然也不排除我没有找到正确的方法)。所以我还是把使用方法整理一下,也许这个工具对其余的程序会成功。

        具体的使用方式在使用文档中有介绍,安装目录下有使用手册,同时也可以查看在线文档Download forthe latest PDF user's guide。并且界面方式看起来也非常容易入手,所以我就不做过多的介绍。

        在这里重点提一下在使用其中有两个地方我们需要注意:

        1、如果直接使用命令行,需要注意所要混淆的appx文件是否是全部可以混淆的,如我们的文件中包含了C++的native文件,这样就不能够直接混淆。我采用的方式是直接通过界面完成,在其中只选择需要混淆的部分exe/dll文件。

        2、混淆后的appx文件是没有经过数字签名的,需要重新进行数字签名,按照使用文档中的说明,是要使用pfx的签名方式的,具体的pfx文件在工程目录的根目录下,当然发布版本的证书也是一样的,同样的方式也适合发布版本。

        添加证书方式可见:

        Signingan app package 

        SignTool (SignTool.exe) 

        命令示例

        C:\ProgramFiles (x86)\Windows Kits\8.0\bin\x64>SignTool.exe sign /v /fd SHA256/a /f TemporaryKey.pfx BabelOut\WinRTBDBroweser_1.0.0.30_ARM.appx

 

   

 解决方案:

        前面的内容只是写了下自己在查找解决方式的时候碰到的一些坑,还没有列出真正合理的解决方案,所以还需要继续进一步调研解决方案。

        在微软的论坛中我找到了Obfuscatea metro style app这篇文章,这篇文章中介绍了很多方式,各个工具我都试了下,大体有xenocode(没有找到winRT下的实现方法)、Eazfuscator.NET,Skater .NET Obfuscator(免费版不支持win8)、CryptoObfuscator(免费版不支持win8)。

        多次尝试这些工具后,发现Eazfuscator.NET可以正常使用并且使用方法简单,不过这个工具是个付费工具,我们只能有一个月的试用期,但这已经基本能够满足我们的需求了。

        这个工具的使用方法很简单,只需要将要混淆的工程拖进这个工具中即可。

        添加混淆时加到右边“√”,清除混淆时拖到左边“X”,具体如下

         


        操作方式如下图:

        

 

        当然,我们在使用的过程中也遇到了坑,但最终还是将其解决。问题如下:

        在我们的工程中引用了一些只在debug下使用的工功能,而没有将其明确指定为只在debug下执行,这样在正常情况下不会出问题,但一旦我引入Eazfuscator.NET.exe时,在进行release编译时就会出错。具体的解决方法就是明确指出只在debug下使用这些调用。

        至此,我们就能够正常的进行windowsstore application C#的代码混淆了。

 

原创粉丝点击