众所周知,原生的NSIS打包出来的安装包,是可以轻松的被7z解压的,待安装文件以及NSIS脚本、插件、甚至UI资源包全部都可以一览无余;虽然解压出来的脚本可读性不是很强,但完全不影响分析安装过程的逻辑,甚至有部分脚本可以直接复制出来使用!
我们网站的第一个示例,因为在这方面没有做特殊处理,也是可以被如此解压的。
想想自己或者公司团队花了很多时间精心设计安装界面,被别人轻松提取,用在他处,是不是很痛心呢?
研发人员,加班熬夜在安装包中做了一些控制逻辑,本想限制一下安装行为,但被解压后,脚本逻辑完全暴露在他人面前,是不是感觉有点自欺欺人?
以下是解包普通NSIS安装包的过程:
可以看到,插件和NSIS脚本都被解压了出来,整体来说有如下问题:
我也因为这个而被困扰多时,好在现在已经找到了解决方案,其实我们要解决的有两个问题:
在nsNiuniuSkin的安装包打包解决方案中,我们对NSIS的压缩方式进行了调整,避免了被7z的解压,同时我们对UI资源包进行了高强度的加密,以确保安装包资源的整体安全。
接下来看看我们的新版本是如何解决相关问题,同时来看看新版本打出来的安装包是否真的安全吧!
这个比较简单,我们应用了新版本的增强型NSIS脚本编译器,能够调整打包后的exe的压缩方式,使得7z无法识别具体的压缩算法,自然也就无法解压了。 以下以我们的nsNiuniuSkin界面在线设计引擎的安装包为例,来看看是否真的能够防止被解包:
为什么要把这个单独提出来说呢? 原因是因为NSIS安装包程序,在启动的时候,会自动在系统的%tmp%目录下创建一个临时目录,其中存放了安装包用到的插件;同时,我们nsNiuniuSkin的安装包方案中,也会将安装过程中用到的许可协议和UI资源包存放到这个临时目录中。
这样一来,如果在打开安装包程序后,到%tmp%目录下,就能看到安装包使用过程中所依赖的插件和资源了。
以下是我们nsNiuniuSkin界面在线设计引擎的安装包启动时的临时目录下的文件列表:
可以看到一个名为skin.zip文件,这个其实就是我们用来存放安装包图片和界面配置脚本的资源包;你可能要问了,这不是已经暴露了么?
别急,试着解压一下,你会发现无法解压:
高强度密码保护:
这是由于我们在打包的时候,针对生成的zip包进行了密码加密,同时在安装包启动时,在内存中解密资源包,然后提取资源来进行渲染显示;同时,我们使用的密码是每次打包时随机生成的uuid作为密码,在NSIS脚本本身安全的前提下,坦率地讲,我自己也不知道这个安装包的资源包要如何解密出来。
说起来也是有点尴尬,自己的打包,居然自己都解不出来;不过,既然要追求安全,我觉得这个就应该如此!
加密的逻辑并不会对安装包的运行性能有任何影响,您也可以直接下载体验一下。如果您感兴趣,可以帮忙试着解压提取下,顺便给我反馈一下还有哪些不足,我好改进!
http://www.leeqia.com/download/NSNiuniuSKin_DuiDesigner_Setup.exe
在安装包的制作和应用中,其功能性与美观当然是第一位的,但安全性也是一个不可忽视的点,如果您刚好对安装包的安全性有要求,然后刚好看到了这一篇文章,咱们的故事就开始了!
在安装包安装过程中,精美的UI往往能让客户对所安装产品的印象更加深刻,更能体现出软件服务商在用户体验上的专注与用心! 希望我们的努力,能够让安装包制作再容易一点,再快乐一点!
愿天下没有难做的安装包!