如大家所知,现在开发出一款软件产品较之前会容易很多,但是想要收获相应的效益,却很困难。就单说在这个盗版横行的年头,很有可能不是没人用你的软件,而是没有人用正版,因为盗版太便宜了也太容易获得了。这其实要考虑的最核心问题是:如何保护自己的软件,避免被破解,被非法侵入等安全问题。想要产生收益,最根本的就是做好加密措施。
一、软件安全的基本知识软件安全范围
软件生命周期:软件设计阶段、软件编码测试阶段、软件运维阶段;
软件环境要素:软件自身、开发者、软件开发环境、软件运行环境;
软件安全功能:防反汇编/反编译、防调试跟踪、防篡改、防盗版、防内存攻击、防API违规调用、防拒绝服务、可追踪。
软件安全知识体系
1.软件漏洞
- 漏洞原理:缓冲器溢出、SQL注入漏洞
- 漏洞挖掘:小作坊式的软件开发、赶进度的弊端、没有重视安全测试、安全思想淡薄、安全维护不完善
- 漏洞检测与防范:安全编码
2.恶意代码
- 恶意代码的机理:传统病毒、宏病毒、木马
- 恶意代码的检测:检测、消除、预防、免疫、数据备份及恢复、防范策略
3.软件保护
- 软件分析(破解):静态分析和动态分析
- 软件保护(反破解):防逆向分析、防动态调试、运行环境检测、反*箱、数据校验、代码混淆技术、软件水印
加密软件不像用密码加密文本,加密软件的特点是加密难而解密容易。
因为软件毕竟需要完整地运行,即使用了密码学的东西,可对应密码一定会在软件里出现,不存在猜密码的问题。
另外,想要加密的好,必然需要懂如何解密,或者说必然要了解透彻解密者是如何破解软件的,这就需要普通软件开发以外的知识和实践了,一般人没有这个时间和精力。
即使懂得了一些解密的知识,甚至还小试牛刀一把,但加解密这个行业,水平的差异特别明显。可能一个人自认为想出了特别好的主意来加密,可是在高手眼里,很可能几分钟就搞定,高手可以马上看出漏洞。
为什么总有黑客组织总会在一天内甚至几分钟内就把你的加密软件搞定。而被破解的软件不乏下狠功夫在加密上的,但命运是一样的,轻松被破解。
这个问题特别严重,很多公司都犯这个错误。就像寻找堆栈溢出漏洞一样,需要特别研究溢出机制才行,加密已经发展成了一个特别的领域,需要深入的研究才行。
软件保护产品和其他安全产品相比具有一定的特殊性,它所涉及的内容非常的广泛,从上层的应用软件、操作系统、驱动、硬件、网络等等,是一个综合的技术范畴,不能够单一的由某个方面来以偏概全的断定其安全与否。
1.基于硬件的保护方式
基于硬件的软件保护策略可以包含多种功能,主要有认证过程、数据加密、访问控制、唯一的系列号、密钥产生、可靠的数据传输和硬件识别。这些手段主要的目的是防止硬件被复制,有一些产品也支持许可证策略。基于硬件的保护可以具有很好的安全性。主要包括以下几种典型方式:
1.1 加密狗、加密锁(Special-purpose Dongles)
加密狗是一种智能性加密产品,又被称为加密锁。它是一个可以安装在并口、串口或USB接口上的硬件电路。在安全性上和基于软件的保护方式相比,具有更高的安全性,但是对于使用被保护软件的最终用户而言,就不得不被迫接收在自己的机器上安装相应的保护硬件和驱动程序,易用性上存在一定问题。同时和基于软件的保护方式相比,价格也比较高。
1.2 光盘、软盘保护
被保护软件的部分密钥可以放在可移动的软盘或光盘当中,只有当软盘或光盘存在的时候,被保护软件才可以运行,游戏软件经常采用此种方式。
其基本原理是,例如Macrovision SafeDisk工具,它是在光盘的光轨上隐藏一个密钥,而一般的光盘刻录机无法复制此密钥,通过此方法达到不可以复制光盘的目的,软盘使用的技术类似。
存在问题:如果一旦原盘被划坏或者毁坏,用户就无法继续使用软件,同时这种保护方式可以被黑客很容易的分析或跟踪找到判断代码处,通过修改可执行文件,跳过此段代码,达到破解的目的。而且有的加密光盘可用工作在原始模式(RAW MODE)的光盘拷贝程序来原样拷贝,比如用Padus公司的DiscJuggler和Elaborate Bytes公司的CloneCD等拷贝工具,所以此种保护技术的安全性并不是很高,但是由于其具有价格优势,目前还是有一些软件开发商使用此种技术来保护自己的软件。
2.基于软件的保护方式
基于软件的保护技术和基于硬件的保护技术相比,在价格上具有明显的优势,但是在安全性上和硬件相比还是相差很大,一般正式的商业软件都使用基于硬件的保护方式。基于软件的软件保护方式一般分为:注册码、许可证文件、许可证服务器、应用服务器模式、软件老化等。
2.1 注册码 (License Key)
软件开发商对一个唯一串(可能是软件最终用户的相关信息,例如:主机号、网卡号、硬盘序列号、计算机名称等),使用对称或非对称算法以及签名算法等方法产生注册码。然后需要用户进行输入(可以在软件安装过程或单独的注册过程)。当输入注册码后,被保护软件运行时进行解密,并和存储在软件中的原始串进行比较。存在问题:密钥隐藏在程序代码中,比较容易泄漏,同时黑客可以使用逆向工程,分析或跟踪找到判断代码处,通过暴力破解的方法进行破解。
2.2 许可证文件(License File)
和使用注册码类似,但是许可证文件可以包含更多的信息,通常是针对用户的一些信息。文件中可以包含试用期时间,以及允许软件使用特定功能的一些信息。被保护软件在运行时,将每次检查许可证文件是否存在。典型的方法是使用非对称算法的私钥对许可证文件进行签名,而公钥嵌在软件代码中。存在问题:可以通过修改系统时钟来延长使用试用期许可证,当许可证到期时,还可以重新安装操作系统,继续使用。同时黑客可以使用逆向工程,分析或跟踪找到判断代码处,通过暴力破解的方法进行破解。
2.3 许可证服务器(License Server)
主要适用于网络环境中,可以为多套被保护软件提供服务,例如一个网络许可证,可以限制并发最大用户数为10。当客户端被保护程序运行时,将占用一个用户数,退出时将释放出用户数,如果超过最大用户数,服务器将禁止多余的被保护程序运行。存在问题:一般必须面向企业级用户,黑客可以使用逆向工程,分析或跟踪找到判断代码处,通过暴力破解的方法进行破解。
2.4 应用服务器模式(Application Server Model)
所有程序代码存储在受信任的服务器端,最终用户不需要安装代码。典型应用为最终用户不需要安装软件,只需要使用浏览器访问服务器来使用被保护软件。一般游戏软件都是采用这种方式进行保护的。目前这种保护方式朝着两个方向进行发展,一个是瘦客户端程序,另一个是胖客户端程序。存在问题:此种程序受到服务器性能和网络带宽,以及扩展性,成本等因素的影响。
2.5 软件老化(Software Aging)
这是一种极端的软件保护方式[21],依赖于软件的定期升级更新,每次更新都将使老版本的软件功能不能继续使用,例如不兼容的文件格式。盗版者必须给他的用户经常升级。存在问题:经常升级造成很大的不便,如果可以自动化的进行此项工作,可以节省一部分精力。如果最终用户需要共享数据,将依赖于每个人都有最新版本的软件。这种保护方式并不适用于所有领域,例如:Microsoft Word可能工作的很好,但是如果是单用户的游戏程序将不适合。
3.关于深思软保上文提到的都是技术层面的保护方式,但正如文中所说,加解密这个领域是需要深入研究才能有成就的,这期间可能会分散企业很大的精力与物力,不如让专业的人做专业的事更为妥帖。企业专注于营收,加密公司专注于加密,选择靠谱的第三方加密公司便是重中之重。
北京深思数盾科技股份有限公司专注于软件授权保护、互联网授权服务和安全产品开发的创新性科技企业,引领软件授权保护产业进行了数次技术变革,目前是中国软件授权保护领域具有竞争优势的企业,全球超过 5000 家合作伙伴。
深思Virbox AIoT安全 依托于深思数盾多项专利和技术沉淀,面向智能算法、工业板卡、终端设备、车联网等行业提供“应用加固、License管控、业务数据管理”三位一体的安全解决方案,抵御终端安全风险。