前言

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

但实际情况真的是这样吗?我们从常用的软件破解方法入手,具体分析一下软加密和硬加密的安全强度以及破解风险。

一、软件解密方法

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

  • 逆向工程:采用软件代码分析和跟踪的方法,找到软件中调用加密验证或判断验证结果的代码,并进行修改或替换,以绕过保护。
  • 通讯欺骗:在软件代码调用验证机制的通道上对通讯指令截取和分析,并通过修改或回放的方法欺骗软件,使之产生错误的判断。
  • 指纹复制:对软件进行加密认定的硬件信息或硬件本身进行复制。

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

1.1. 通讯欺骗

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

  • 能够找到所有与软件保护相关的系统调用。这对硬加密非常容易——所有对加密锁硬件的IO操作;但对软加密则不太容易,任何系统调用,包括文件、注册表、系统信息的调用都可能与软件保护操作相关。
  • 能够分析了解系统调用的输入、输出参数所代表的意义,能够伪造返回结果。
  • 能够在不影响系统及应用程序正常工作的条件下修改返回结果。

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

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

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

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

1.2. 指纹复制

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

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

  • 有一些计算机硬件设备包含了唯一的ID,比如说CPU、BIOS和硬盘,这些唯一ID是不可复制的。
  • 包括硬盘分区序列号或网卡MID等都具有很好的唯一性。
  • IP地址具有很好的唯一性,而伪造会导致系统网络通讯异常。
  • 在局域网内部,机器名、用户名及内网IP地址都是很好的唯一特征。
  • 根据操作系统及硬盘文件可以产生非常好的唯一特征。
  • 最重要的是,要复制所有上述这些硬件和软件特征,其投入成本高,因此不具备大规模复制的可行性。

关于硬件加密锁的复制:

  • 主要的加密锁芯片都可以通过硬件剖片的方法读出内容,从而进行复制,包括智能卡芯片。这个过程的成本比通常想象的要低,因为破解者往往会租用专业设备而不需要自己购买。
  • 破解者总是可以买到厂家的加密锁,并进行分析和改造。
  • 破解者可能会通过加密锁的代理或开发商内部相关人员得到加密锁内部的算法相关数据,从而在无需硬件分析的情况下复制加密锁。
  • 需要注意的是,加密锁复制的前期成本较高,但一旦形成复制能力,后期的平均复制成本则很低。

1.3. 软加密方案总结

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

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

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

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

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

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

2.1. 双因素验证

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

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

2.2. 破解追踪

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

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

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

2.3. 补救措施

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

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

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

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

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

2.4. 破解风险

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

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

三、效果为王

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

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

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

再谈软件保护中软加密和硬加密的安全强度相关推荐

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

    原文链接:http://www.williamlong.info/archives/2429.html 转载自月光博客 在软件保护技术中一般存在两种主要的保护方式:不需要额外的硬件设备,完全由软件实现 ...

  2. 软件加密保护中加密狗软加密跟硬加密的安全强度

    在软件保护技术中一般存在两种主要的保护方式:不需要额外的硬件设备,完全由软件实现的方式和使用硬件加密锁的方式.往往前者被称作"软加密"方式:而后者被称作"硬加密" ...

  3. Unity教程之再谈Unity中的优化技术

    这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的" ...

  4. 软加密 vs. 硬加密

    前言 软加密指不需要额外硬件的软件保护方式,一般采取序列号或许可证文件的授权方式.通常软加密方案采用与计算机软硬件特征绑定的方式,如CPU.BIOS.硬盘.MAC.计算机名.用户名等.软加密这个概念其 ...

  5. 再谈C#中的委托和事件

    写在最前 我相信全网关于委托和事件的文章和概述,大家应该已经读过很多篇.但是就我的观察来看,大多数文在讲述这方面概念时,都会用烧开水和狗叫主人的例子来讲述事件怎么工作,这样比喻固然与生活联系紧密,但看 ...

  6. NET Core微服务之路:再谈分布式系统中一致性问题分析

    前言 一致性:很多时候表现在IT系统中,通常在分布式系统中,必须(或最终)为多个节点的数据保持一致.世间万物,也有存在相同的特征或相似,比如儿时的双胞胎,一批工厂流水线的产品,当然,我们不去讨论非IT ...

  7. Word中软回车和硬回车

    一.word中硬回车(enter)与软回车(shift+enter). 在两个硬回车之间的文字自成一个段落,可以对它单独设置段落标记而不用担心其他段落受到影响.这也是我们习惯用硬回车的原因:排版方便. ...

  8. JVM系列之:再谈java中的safepoint

    文章目录 safepoint是什么 safepoint的例子 线程什么时候会进入safepoint safepoint是怎么工作的 总结 safepoint是什么 java程序里面有很多很多的java ...

  9. 再谈Java中的引用

    在JDK1.2之后,Java对引用进行了扩充,将引用分为强引用.软引用.弱引用和虚引用,这4中引用的强度依次减弱,这里说的引用强度是指引用关联的对象在发生垃圾回收之后是否还存在,具体如下: 强引用类似 ...

最新文章

  1. SAP MM 明明已经扩展供应商到采购组织下,采购订单里还是报错?
  2. android垂直排列元素_Android弹性布局(FlexboxLayout)
  3. python如何读取公共盘的文档_如何使用 Sphinx 给 Python 代码写文档 | Linux 中国
  4. 使用Log4j为项目配置日志输出应用详细总结及示例演示.
  5. [BZOJ3781]小B的询问
  6. Debian、Ubuntu源码编译制作安装包(一)
  7. 贝叶斯集锦:MCMCpack包
  8. 在窗体创建时显示窗体
  9. java环境安装菜鸟教程_Linux菜鸟教程(一:JDK安装和java环境配置)
  10. ../bin/testCurveFitting 出现的错误以及解决办法
  11. 奥比中光深度摄像头_奥比中光:确认iPhone X前置3D深度摄像头采用结构光方案...
  12. linux文件名格式,ASM文件名格式
  13. dubbo暴露出HTTP服务
  14. 微信生成海报 服务器性能,微信小程序生成清晰海报
  15. OpenGauss/MogDB调用C FUNCTION 范例
  16. html实时获取树莓派温湿度,在树莓派上获取美国天气预报
  17. hive后台启动_将Hive Thrift server 添加到服务后台运行
  18. 香港银行开户过程需要注意些什么
  19. 使用免费引流脚本,如何突破引流难的困境
  20. 欧拉操作系统(openEuler)简介

热门文章

  1. 基于Java简单的弹珠小游戏
  2. 学习大数据的第29天——Linux指令的学习以及一些面试题
  3. From 表单临时存储
  4. 弱电工程综合布线施工经验总结
  5. 基于PHP的高效协同办公管理系统
  6. Kubernetes Pod 获取真实 IP 地址
  7. 如何配置在线视频服务器参数?
  8. Ctrix的文件launch.ica文件无法打开的解决办法
  9. 【C++编程语言】之C++对象模型和this指针
  10. 大一大学计算机考试考什么,大学计算机一级考试考什么 考试时间