在软件保护技术中一般存在两种主要的保护方式:不需要额外的硬件设备,完全由软件实现的方式和使用硬件加密锁的方式。往往前者被称作“软加密”方式;而后者被称作“硬加密”方式。普遍认为,硬加密方式的安全强度要大于软加密方式。
但真的是这样吗?
一 软件解密方法
如同软件加密的方式千差万别,软件解密的办法也多种多样。但从根本上,无外乎三种主要手段:
1. 逆向工程
采用软件代码分析和跟踪的方法,找到软件中调用加密验证或判断验证结果的代码,并进行修改或替换,以绕过保护。
2. 通讯欺骗
在软件代码调用验证机制的通道上对通讯指令截取和分析,并通过修改或回放的方法欺骗软件,使之产生错误的判断。
3. 指纹复制
对软件进行加密认定的硬件信息或硬件本身进行复制。
其中逆向工程的破解方法与底层采用何种加密机制的关系不大,破解难度主要由软件代码的复杂程度以及核心安全库的防护机制决定。下面主要分析通讯欺骗和指纹复制的破解方法对软加密和硬加密的难易程度。
通讯欺骗
通讯欺骗往往通过监视、修改及复制系统功能调用的结果来实现。它需要破解者有能力在不影响软件正常运行的情况下截获及修改与软件保护相关的系统调用。要能正常实现通讯欺骗,必须要满足以下几个条件:
1. 有能力找到所有与软件保护相关的系统调用。
这对硬加密非常容易——所有对加密锁硬件的IO操作;但对软加密则不太容易,任何系统调用,包括文件、注册表、系统信息、时间的调用都可能与软件保护操作相关。
2. 能够分析了解系统调用的输入、输出参数所代表的意义,能够伪造返回结果。
3. 能够在不影响系统及应用程序正常工作的条件下修改返回结果。
设计精良的硬加密产品可以在软件代码和硬件加密锁之间构建所谓的“安