Win8/WP store app的代码安全与混淆
我们在为Top App的技术支持过程中,一直有收到关于Windows 8 & Windows Phone商店应用的代码安全解决方案的询问。在这篇文章中,我简单地把我们收集到的信息做一个总结。所以很抱歉这篇文章并不是一个解决方案。
当前Windows Phone 8支持C#/VB.NET、C++来进行开发,而Windows 8 Store App则再多一个JS。
Windows 8 Store App
Win8 store app的package上传到store之后,只会在签名层面多一些处理,而不会牵涉到任何的代码保护或者混淆措施。所以我们在本地的app安装目录下,可以直接拿到.Net app的IL dll,或者直接用写字板就能打开HTML/WinJS app的代码。
微软没有官方的代码混淆解决方案或产品。我们有找到以下几个能够混淆Win8/WP store app (.NET)代码的第三方解决方案,不过比较遗憾的是这些都是收费应用,但基本都提供了试用版。其中第一家preemptive,好几代的VisualStudio中都集成了其Community Edition,但遗憾这个版本并不支持Win8/WP store app。这些第三方产品都不在微软的官方技术支持范围内,我们亦不保证能够完美运行,所以在上传您的app之前,希望多加测试。
- .NET Obfuscation (Marketplace/Professional edition) https://www.preemptive.com/products/dotfuscator/dotfuscator-for-marketplace-apps
- Eazfuscator.NET https://www.gapotchenko.com/eazfuscator.net
- Babel Obfuscator https://www.babelfor.net/
- Crypto Obfuscator For .Net https://www.ssware.com/cryptoobfuscator/obfuscator-net.htm
- Skater .NET Obfuscator https://rustemsoft.com/obfuscator_net.asp
而对于WinJS,理论上市面上提供javascript minify的工具都应该能够提供解决方案,我们有找到 jscrambler https://jscrambler.com/ 这个同样是第三方的产品能够支持Windows Store App,而且这是免费的。
而对于C++写的内容来说,由于在编译的时候已经把代码翻译成了机器码,所以相对来说逆向工程的难度要高的多。所以有个折衷的方案是把一些核心的不希望被反编译的代码或算法包装进C++ Windows Component在您的app中调用。
Windows Phone 8 app
而对于WP8 app,我们上传到Store的是经过我们本地编译的IL代码,IL本身是可以被轻易反编译的,然而最后用户通过Store下载部署到设备上的WP8应用程序集,是一种已经被服务器编译好了的、和machine code几乎已经是一个(编译)级别的MDIL程序集,显然这个程序集是无法被传统IL反编译工具如ILSpy等给破译的。所以,只要您的APP是WP8专属、且能够确保上传到Store之前源代码、编译好的程序包不被泄露,那么其实不必太过关心代码混淆。但是很遗憾这个feature没能在Win8平台上实施,我们也没有关于后续是否会在Win8平台上引入的消息。
更多关于WP8新程序集编译机制的文档资料参考:
- Windows Phone 8: Compile in the Cloud https://www.silverlightshow.net/items/Windows-Phone-8-Compile-in-the-Cloud.aspx
- Compile in the Cloud with WP8 https://blogs.msdn.com/b/msgulfcommunity/archive/2013/03/16/compile-in-the-cloud-with-wp8.aspx
- Deep Dive into the Kernel of .NET on Windows Phone 8 https://channel9.msdn.com/Events/Build/2012/3-005
- How to test the retail version of your app for Windows Phone 8 https://msdn.microsoft.com/en-us/library/windowsphone/develop/jj585401(v=vs.105).aspx
- Inside Compiler in the Cloud and MDIL https://channel9.msdn.com/Shows/Going+Deep/Mani-Ramaswamy-and-Peter-Sollich-Inside-Compiler-in-the-Cloud-and-MDIL
-Ranger