代码改变世界

月光博客 - 再谈软件保护中软加密和硬加密的安全强度

2011-12-06 11:01  Kevin.Wan  阅读(534)  评论(0编辑  收藏  举报

原文链接:http://www.williamlong.info/archives/2429.html 转载自月光博客

 

  在软件保护技术中一般存在两种主要的保护方式:不需要额外的硬件设备,完全由软件实现的方式和使用硬件加密锁的方式。往往前者被称作软加密方式;而后者被称作硬加密方式。普遍认为,硬加密方式的安全强度要大于软加密方式。

  但真的是这样吗?

   软件解密方法

  如同软件加密的方式千差万别,软件解密的办法也多种多样。但从根本上,无外乎三种主要手段:

  1. 逆向工程

  采用软件代码分析和跟踪的方法,找到软件中调用加密验证或判断验证结果的代码,并进行修改或替换,以绕过保护。

  2. 通讯欺骗

  在软件代码调用验证机制的通道上对通讯指令截取和分析,并通过修改或回放的方法欺骗软件,使之产生错误的判断。

  3. 指纹复制

  对软件进行加密认定的硬件信息或硬件本身进行复制。

  其中逆向工程的破解方法与底层采用何种加密机制的关系不大,破解难度主要由软件代码的复杂程度以及核心安全库的防护机制决定。下面主要分析通讯欺骗和指纹复制的破解方法对软加密和硬加密的难易程度。

  通讯欺骗

  通讯欺骗往往通过监视、修改及复制系统功能调用的结果来实现。它需要破解者有能力在不影响软件正常运行的情况下截获及修改与软件保护相关的系统调用。要能正常实现通讯欺骗,必须要满足以下几个条件:

  1. 有能力找到所有与软件保护相关的系统调用。

  这对硬加密非常容易——所有对加密锁硬件的IO操作;但对软加密则不太容易,任何系统调用,包括文件、注册表、系统信息、时间的调用都可能与软件保护操作相关。

  2. 能够分析了解系统调用的输入、输出参数所代表的意义,能够伪造返回结果。

  3. 能够在不影响系统及应用程序正常工作的条件下修改返回结果。

  设计精良的硬加密产品可以在软件代码和硬件加密锁之间构建所谓的安全通道,使得破解者虽然能够截获通讯命令,却无法分析得到其中的原始数据,也无法伪造通讯命令,从而基本无法进行通讯欺骗。

  对于软加密来说,破解者总是可以得到系统调用命令的原始数据,但要想在不影响系统以及应用程序功能的情况下修改系统调用结果则并不容易。一方面,破解者必须能够了解哪些系统调用与软件保护机制有关;另一方面,系统调用的结果并不总是容易截获——很多获取硬件指纹的命令基于系统中断调用;最后,修改系统调用结果在很多情况下将会影响系统和软件的运行,使得破解过程无法正常进行。

  从理论上来说,除非破解者能够营造一个有能力任意监视并改写所有系统调用结果的独立环境,否则将无法完全实现通讯欺骗,而这样做的工作要比逆向工程还要复杂,从而导致对软加密采用通讯欺骗的破解方法失去意义。

  从本质上来说,软加密基于系统功能调用,而硬加密基于对硬件本身功能的调用。因此软加密实现与系统本身的结合程度要比硬加密高得多。

  指纹复制

  软加密的安全指纹由所运行的软、硬件环境获取;而硬加密的指纹就是加密锁本身。与普遍的认知相反,对计算机运行环境指纹的复制要比想象中困难得多,而对加密锁硬件的复制则要比想象中的更容易也更危险。

  为什么计算机运行环境不容易复制:

  1. 有一些计算机硬件设备包含了唯一的ID,比如说CPU或者某些型号的硬盘,这些唯一ID是不可复制的。

  2. 包括硬盘分区序列号或网卡MID等都具有很好的唯一性。

  3. IP地址具有很好的唯一性,而伪造会导致系统网络通讯异常。

  4. 在局域网内部,机器名、用户名及内网IP地址都是很好的唯一特征。

  5. 根据操作系统及硬盘文件可以产生非常好的唯一特征。

  6. 最重要的是,要复制所有上述这些硬件和软件特征,其投入的成本不低。因此不具备大规模复制的可行性。

  关于硬件加密锁的复制:

  1. 主要的加密锁芯片都可以通过硬件剖片的方法读出内容,从而进行复制,包括智能卡芯片。这个过程的成本比通常想象的要低,因为破解者往往会租用专业设备而不需要自己购买。

  2. 破解者总是可以买到厂家的加密锁,并进行分析和改造。

  3. 破解者可能会通过加密锁的代理或开发商内部相关人员得到加密锁内部的算法相关数据,从而在无需硬件分析的情况下复制加密锁。

  4. 需要注意的是,加密锁复制的前期成本较高,但一旦形成复制能力,后期的平均复制成本则很低。

  结论

  精心设计的软加密实现方案可以在通讯欺骗和指纹复制的破解环节上提供足够高的安全性,使破解者转向通过逆向工程的方法破解软件。在这种情况下,软件的防分析及跟踪能力以及代码内部的加密技巧成为了安全系统的核心,底层基于硬加密还是软加密将不再影响系统的实际安全性。

   软加密的新技术及四大优势

  通过利用网络通讯和服务器认证,软加密方式在实际应用中可以获得比上述分析好得多的安全应用效果。

  所谓服务器认证,是指软件安全系统首次运行的时候在服务器端备案,存储客户端硬件特征,并获取开发商授权的过程。除了首次运行的激活过程外,服务器认证还可以在今后再次进行,以核查及升级授权内容。

  由北京比特安索公司开发的比特平台除了支持服务器认证技术,还提供了将授权运行于服务器系统之上的云授权保护方案。云授权采用客户端与服务器实时连接的验证方案,安全系统指纹始终依附在服务器上,因此具有更高的安全性。它与传统的软加密具有明显的区别,因此不在这里进行分析。

  集成了服务器认证的软加密方案具有硬加密不具备的四大优势。

  双因素验证

  无论是传统的硬加密还是软加密,安全验证都是单因素的,即基于加密锁或本机硬件指纹。集成了服务器认证之后,加密方案本身是双因素的:既与本机硬件指纹相关,又与服务器相关。

  双因素验证大大加强了系统整体的安全性,破解者无法通过破解其中的一个因素实现完整的盗版。它使新一代的软加密技术的安全性实质上超过传统硬加密成为现实。

  破解追踪

  世上没有绝对可靠的保护技术,而运行于客户环境的软件代码总是可以被跟踪和分析。与硬加密不同的是,实现双因素验证的软加密方案中很容易实现对破解应用的追踪。

  除非通过逆向工程的办法把所有与服务器通讯相关的代码完全替换——这个工作比软件破解本身的难度还要大——否则服务器将有可能对软件的破解拷贝进行追踪。以比特平台为例,通过设置授权模版的强制认证智能连接属性,客户端软件将定期或不定期地尝试与服务器进行连接验证,服务器因此可以发现是否有授权盗用的情况,并且可以根据相应的授权码找到盗用源头,解后进行封锁。

  也就是说,新一代的软加密技术本身通过服务器验证的机制,不再是单纯的本地安全技术。它是包含了本地安全与网络安全的综合性系统架构。

  补救措施

  软加密的一个明显优势是可以方便地推出对破解版本的补救措施。

  当基于硬加密的应用程序被破解后,一般来说,为保证升级后的应用程序与旧版本程序使用的加密锁不兼容,软件开发商在应用升级的时候必须同时升级应用程序代码并提供新的加密锁。这样的升级措施需要很大的成本,开发商实际上往往无法实施。

  而软加密的补救措施是零成本的。

  同样以比特平台为例,当开发商发现现有版本被破解后,可以在平台上为现有产品添加新的特征项(即功能模块),或升级已有的功能算法;开发商相应地升级应用程序代码,制作升级补丁,并发送给合法用户。

  合法用户拿到升级补丁并升级应用程序后,应用软件可以自动连接到授权服务器进行算法更新并升级本地授权文件,从而完成升级。而盗版用户因为无法通过服务器验证而不能应用升级内容。破解者也必须再次实施破解才能使用新的功能。

  破解风险

  前面提到了,软加密与系统和使用环境的结合程度要比硬加密高得多。对于硬加密的破解版本使用者,除了软件本身可能会因破解不充分而存在问题外,使用者不存在任何其它使用风险,盗版使用的成本很低。

  对于软加密,盗版使用者往往需要为使用软件而更改系统设置,如网卡MIC地址或系统时间,而这些都会对整个系统及其它应用程序造成影响,从而提高盗版使用难度,增加使用成本。这些系统设置和负面影响使得盗版使用不可能大规模推广。

   效果为王

  使用软件保护技术或产品的目标是以最小的成本达成最佳的防盗版效果,其本身是一个系统性的工作,软件的整体安全性受系统中最薄弱部分的制约,并与实施难度、应用风险、危害程度等密切相关。

  新一代软加密技术以服务器验证为基础,其整体安全性已超出包括传统硬加密在内的单纯的本地安全技术,并显著降低了盗版使用的扩散范围,具有更好的实际安全效果。 

  此外,软加密特有的无物流、易管理以及授权灵活方案等众多特点,使用它成为互联网时代的最佳软件保护方案。