logo资料库

labview超级强大的硬件加密技术.pdf

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
LabVIEW开发技术丛书 深 入 浅 出 软 件 加 密 技 术
目 录目 录 引言—献给刚步入加密领域的工程师 获取系统的硬件信息 生成系统ID和激活码 后记 1 2-3 4-6 7
引言—献给刚步入加密领域的工程师 自己辛辛苦苦做出来的软件轻轻松松被人盗版了,就像叶圣陶先生的小说《多了三五斗》中丰收 了却高兴不起来的农民一样——闭上眼睛就是天黑。所以,加密是一个软件工程师保护自己辛勤 劳动成果的必备技术(开源软件和有其它盈利模式的软件除外)。 从技术角度来说,天下没有破不了的软件,只是破解难度不一而已。从经济角度来看,只要破解 的成本高于使用正版软件的成本,那么破解的工作便不会有人去做了——除非是纯技术兴趣。 当前市面上比较流行的软件保护技术有:序列号、软件狗和绑定系统硬件信息三种:序列号保护 法常见于网络上的共享软件,破解比较容易。软件狗是一个安装在并口、串口等接口上的硬件电 路,同时有一套使用于各种语言的接口软件和工具软件。复杂的软硬件技术结合在一起使破解非 常难,许多有商业价值的软件一般都用软件狗来保护。绑定系统硬件信息是用户在安装完软件后, 获得一个与系统硬件信息(CPU ID,硬盘序列号等)相关的代码。开发商通过这个软件生成一个激 活码,用户输入激活码后便可正常使用软件了。 相比之下,序列号属于纯软件方法,破解比较容易;软件狗是软硬结合的方法,破解很难,但需 要购买商业化的软件狗,费用高;绑定系统硬件信息的方式,安全性不错,而且不需要额外软件 狗的费用。 图 1.1 绑定系统硬件信息技术 下面的章节中,本文将针对绑定系统硬件信息技术,先讲述如何获得系统硬件信息,然后讲述生 成系统 ID 和激活码的方法,最后给出一个完整的范例演示程序。 1 系统硬件信息系统id激活码
获取系统的硬件信息 到哪里去找硬件信息 一套基于计算机的自动化系统必定包含许多硬件,比如 CPU、硬盘、网卡、GPIB 卡、数据采集 卡、模块化仪器等等。 为了方便管理,厂家会给这些硬件一个唯一的标识号(id),或者序列号(SN),如图 2.1 所示。如 果厂家也提供相关的访问函数,我们就可以获得硬件的唯一标识号。 图 2.1 硬件序列号 获取 NI 硬件序列号 NI 公司硬件设备的序列号可以通过属性节点查知,如图 2.2 所示。 图 2.2 用属性节点获取 NI 硬件序列号 关于数据采集卡,GPIB 卡的硬件信息请参考范例程序 GetDAQSN.vi 和 GetGPIBSN.vi。 2
获取计算机硬件信息 计算机的硬件信息通常包括:CPU ID,硬盘序列号,MAC 地址和 BIOS 信息。这些信息由于涉 及硬件访问,需要调用许多底层函数,具体技术细节请参考 Skyremember 在 CSDN 发表的文章 《获取网卡 MAC、硬盘序列号、CPU ID、BIOS 编号》。本文将获取硬件信息的函数做成了 GetHWInfo.dll,方便在 LabVIEW 下调用,如图 2.3 所示。 图 2.3 Get CPU ID 其余硬件信息,请参考范例程序 GetBIOSInfo.vi,GetHDDSN.vi 和 GetMAC.vi 3
生成系统 ID 和激活码 当获取系统硬件信息后,下一步就是生成系统 ID 和激活码。从理论上来说,生成系统 ID 就是找 出一个算法 F1,使得 SystemID = F1 (HardwareInfo);生成激活码就是找出一个算法 F2,使得 ActivationCode = F2 (SystemID)。激活的过程就是找出一个算法 F3,使得 SystemID = F3 (ActivationCode),或者找出两个算法 F3+F4,使得 F3(SystemID) = F4(ActivationCode)。 最后激活过程的算法越复杂,其破解难度越高。在计算机行业,已经有许多成熟的加密解密算法 了,大家可以根据具体需要选用。 本文为了大家理解方便,将采用简单且直观的加密解密算法。 生成系统 ID 在数学中,有很多可逆的算法,比如乘和除,傅里叶变换和反傅里叶变换,交织和节交织,调制 和解调等等。选用可逆算法可以降低激活算法的设计难度,当然,如果加密算法功底深厚的话, 可以选用不可逆的算法。 由于硬件信息大多数由大写字母和数字组成,本文设计的可逆算法思路是:以十迚制数 69 为对 称点,找出硬件信息字符的镜像字符,比如 0 的镜像字符为 Z,由此形成的字符串作为系统 ID, 如图 3.1 所示: 图 3.1 生成系统 ID 通过该算法,由 NI 硬件序列号 EAB2F3 生成的系统 ID 为 EIHXDW,如图 3.2 所示。 4
图 3.2 系统 ID 当然,我们还可以把集中算法混合在一起,构成更加复杂的算法。 生成 USB-Key 激活码 给客户激活码的方式有很多种,本文推荐将激活码以二迚制流的方式写入 U 盘,以 USB-Key 的形式给客户。系统在运行时,USB-Key 必须存在,否则系统不能运行。 本文算法的设计思路是:先把 SystemID 转换为二迚制流,然后以 code.act 文件名(文件名可自 取)保存到 U 盘,如图 3.3 所示。当然,可以增加一些使二迚制流复杂化的算法,比如交织,那 么在解算二迚制流的时候,就需要增加对应的解算算法,比如解交织。 图 3.3 USB-Key 形式的激活码 做好了 USB-Key 形式的激活码后,就可以把这个 USB-Key 交付给客户了。 检测 USB-Key 本文检测 USB-Key 的设计思路是:首先需要把二迚制流读出,然后恢复出 SystemID,并与当 前系统硬件的信息做比较,如所示。 5
图 3.4 Check Dongle 完整加密程序演示 本文所有的代码包含在随附的演示程序中 Encryption.lvproj,如图 3.5 所示。 图 3.5 Encryption.lvproj 在运行 Demo_GenerateUSBKey.vi 程序时,需要先根据需求调用相应的硬件信息函数,然后制 作 USB-Key。制作好 USB-Key 后,再运行 Demo_CheckDongle.vi 即可。 6
分享到:
收藏