在软件开发领域,保护软件免受未经授权的使用是一个长期存在的问题。本文将介绍一种系统架构,旨在防止软件被非法分发和使用。将探讨该系统的架构、授权密钥的创建、安装和验证过程,以及如何通过加密和混淆技术提高软件的安全性。
该系统的设计目标是防止软件被非法复制和分发。为了实现这一目标,需要确保:
授权密钥是软件授权保护系统中的关键组成部分。将使用n位块反馈加密技术来加密授权密钥数据,并在存储前对其进行加密。这种加密技术的原理是:
schar[0] XOR pchar[0] = dchar[0]
for each i > 0, schar[i] XOR pchar[i] XOR dchar[i-1] = dchar[i]
解密过程与加密过程相反。为了使授权密钥看起来更专业,还对数据进行了从16进制到32进制的转换,使用修改后的字符集来表示大于9的值。
授权密钥的安装过程需要与微软的安装工具或其他自定义安装程序集成。将讨论如何在第三部分实现这一点。
验证安装的有效性、指定授权功能和评估期都与存储在密钥中的数据有关,这将在第二部分和第四部分详细讨论。
系统的逻辑架构如下所示:
该架构图展示了系统的最终逻辑设计。随着系统功能的成熟,它发展成了这种结构。共享功能位于静态链接库中,包含加密函数以及存储/检索系统。其他组件相对简单,通常将参数转换为内部结构,并调用共享库中的一个或多个函数。
COM接口如下所示。由于COM接口可以使用多种公开工具进行检查,因此参数名称故意含糊。虽然这没有代码混淆那么强大,但由于总共有3个接口,认为混淆并不值得麻烦。
BSTR NbbfCLib.Create(LONG lID1, LONG lID2, LONG lID3);
bool NbbfVLib.Validate(LONG lID1, LONG lID2, LONG lID3);
LONG NbbfVLIb.Elapsed(LONG lID1, LONG lID2);
如上所述,安装密钥功能是一个标准的DLL,具有导出的函数。这些函数如下所示:
void InstallMSI(MSIHANDLE hInstall);
bool InstallDirect(LPSTR lpstrKey, LONG lID1, LONG lID2);
将在讨论每个组件的具体功能时了解每个参数的含义。
作为一种补充,记得有一天早上在淋浴时“发现”了这种算法,准备去上班。当看到不是第一个想到它的人时,显然很失望,但鉴于密码学通常的难度,暗自高兴没有看起来像个彻底的白痴。根据维基百科的条目,这种类型的密码(在某些地方也称为密码块链接)是由IBM在1976年开发的,并以“通过块链接进行消息验证和传输错误检测”(美国专利4074066)的标题获得专利。
密码本质上是这样工作的。将使用schar表示源(未加密的)字符,pchar表示类似密码的覆盖字符,dchar表示密码操作完成后的字符。
XOR schar[0] and pchar[0] to get dchar[0]
For each i > 0, XOR schar[i] and pchar[i] and dchar[i-1]
解密过程与加密过程完全相反。