软件加密才能和挂号机制,软件珍爱及破解战略

The Methods of Software Protection and Attack◎郭 勇 孔宝根/空军工程大学软件保护法分为软保护和硬保护两大类,相应地,对软件保护的破解法也可分为对软保护破解和对硬保护破解两大方面。本文通过对软件保护和破解技术的介绍,对软件安全问题提出几点看法。随着计算机逐渐普及,软件业也得到了迅速的发展,软件开发者为了维护自身以及软件购买人的利益,保护科研成果、技术和版权,有必要对软件进行加密保护。而另有一些软件人员为提高自己的编程水平或其他目的,会针对出现的保护方式进行跟踪分析,找出相应的方法或制作出破解工具软件破解软件的保护。这样,随着软件业的发展,相互对立的软件保护技术和破解技术也发展壮大了起来。软件保护策略通常软件发行有两种方式,一种是由磁盘发行,一种是由用户在互联网下载。在网上免费下载的一般都是试用软件,软件试用期过后,通过时间、功能等限制促使想继续使用的用户去注册购买。用户付款后,软件公司把注册号或注册文件等提供给用户,使用户得到正版软件。试用软件也可分为两类,一类是软件中有实现所有的功能的源代码,只是因未注册而在时间或功能上有限制,可以网上注册的软件通常属于此类,另一类是软件中没有受限功能部分的源代码,注册以后软件公司再提供该部分源代码。对于应用软件常用的保护法有软保护和硬保护两种。软保护指通过软件运行程序本身防止解密而进行限制性保护,硬保护指在运行程序外加载的硬件式保护。1.软件的软保护软件的软保护一般有下面几种类型。时间限制保护这种保护是利用一些API时间函数,计算软件程序启动时间或装载时间或运行次数,当超出时间限之后,程序自动结束运行或取消运行功能来提醒用户注册。常用的API时间函数有:设置计时器函数SetTimer()、系统启动计时函数GetTickCount()、获取当前时间函数GetSystemTime()、获取本地时间函数GetLocalTime()、获取文件创建时间函数GetFileTime菜单功能限制保护这种程序菜单或窗口中部分选项用灰色表示功能禁用。相关的API函数有:允许或禁止菜单条目函数EnableMenuItem()、允许或禁止窗口函数EnableWindow注册文件保护注册文件是一种利用文件来注册软件的保护方式。一般是一个小的纯文本文件或包含不可显示字符的二进制文件,其内容是一些加密过或未加密的数据。相关的API函数有:从文件中读出数据函数ReadFile()、打开和创建文件函数CreateFile()、以二进制模式打开指定的文件函数_lopen()、根据文件名查找文件函数FindFirstFile警告窗口保护在程序启动或退出时弹出来或者在软件运行时随机或定时地弹出来的提示注册的窗口。相关的API函数有:MessageBox()、MessageBoxEx()、Message Beep()、DialogBoxParam()、Show Window()、CreateWindowEx文件加壳保护为保护软件将可执行程序或程序中的某一段进行加密、压缩,在程序运行时再把加密压缩部分解密解压,解密解压的程序就是所谓的"壳"。软件加"壳"有专门的加壳工具,但几乎每一种新的加壳软件诞生不久,总会有相应的脱壳软件出现。为防止有人用软件跟踪分析、调试工具进行手动脱壳,程序加壳时会采用一些反跟踪、反调试技术。另外,在光盘发行的有安装程序的软件中,还有安装程序序列号保护法。在程序安装时,要求输入产品序列号。软件注册号检验是软件中给出注册窗口,注册码输入后要经过程序检验,如果输入了正确的注册码,便可解除上述的种种限制。RN验证分为两种,一种是通过RN本身来验证注册码的正确性,即注册形式为"XXXXXX-XXXXXX" ,这种格式注册码中一定要有一个"-",自身来验证就是使用"-"前面的数字变换处理后得到的值一定要等于"-"后面的数字变换处理后所得的数值,如果相等则认为是正确的注册码。另一种形式是软件将输入的序列号和用户名等信息运算变换之后,对结果进行比较判断,完成序列号正确性验证。简单地说,软件验证序列号的过程就是验证用户名等信息和序列号之间或序列号前部和后部之间的数学映射关系的过程。2.软件的硬保护磁盘检查保护最早的磁盘保护是检查KeyDisk软盘,软件运行时,要求放KeyDisk到软驱,程序通过检查KeyDisk中的加密磁道来确认用户是否合法。保护措施主要是防止非法拷贝正版软盘,方法之一是在软盘上作特殊标记。特殊标记有软标记和硬标记之分,软标记是通过修改磁盘基数表的某些参数,格式化出一些存放软件需加密部分的特殊的磁道,使得一般用户利用DOS的Copy和Diskcopy命令无法拷贝保密的内容。硬加密是通过在软盘上人为损坏某磁区,将其作为特殊标记通过一小段程序与软件程序联系起来,再对程序加"壳",使其他人无法复制出同样的软盘。KeyDisk软盘加密技术有:激光孔加密、电磁加密、掩膜技术、磁道软标记加密等,也可以使用硬盘加密法加密。用光盘发行的软件程序第一次安装时,要检查光驱中是否有正版光盘才能运行。正版光盘中有程序运行所需的关键数据,这些数据放在特定的光轨中,使用盗版盘会因没有这些数据而导致运行失败。光盘保护同样注重反拷贝、反刻录功能,现行的保护法有:光盘狗技术,通过识别光盘上在压制生产时自然产生的特征来区分是否原版盘,在翻制光盘时该特征无法提取和复制;CPPM技术,通过在盘片的导入区放置密钥来对光盘保护;CD_Protector软件加密技术,用可执行文件上的外壳判断运行的光盘上是否有加密后产生的轨道,将光盘内容拷到硬盘上不能使用,只有通过安装才行;FreeLock加密数据光盘,在正常的数据轨道后加上一个坏轨或多个与正常轨交替出现的坏轨,使目前大部分刻录软件因无法判别来源光盘的格式而拒绝复制;隐藏目录技术,用刻录软件和十六进制编辑器将存放保密文件的目录隐藏起来,使其在Windows和DOS下均不能进入此目录,只有通过一个有口令的程序调用才能进入。软件狗保护软件狗是安装在并行口、串行口等接口上的硬件电路,使用软件时对软件狗进行询问,有正确响应的软件狗联接时才能运行。软件狗技术加密强度大、可靠性高,在保护软件开发者利益、防止软件盗版方面起了很大作用。软件狗技术的发展经历了多次更新换代。第一代软件狗通过短接并行口的某两根线,或者再加上一些电阻、电容、二极管等实现;第二代软件狗采用逻辑门电路跨接在并行口上,并采取适当的措施尽量避免软件狗和打印机之间的相互干扰;第三代软件狗的核心芯片是EEPROM,主机通过并行口直接读写EEPROM以实现对加密信息的存取;第四代软件狗以微控制器和EEPROM为核心器件,又称微狗,它具有一定的智能,应用灵活性和抗破解能力都得到了很大提高。破解软件的保护的策略1.针对加软保护的软件的破解软保护技术在验证注册号时,可以直接用标志位判断(如jz 00xxxxxx,如果ZF=1则转移到00xxxxxx指令处),也可以用比较判断指令,汇编语言的比较指令有cmp、test和cmps三个,与标志位一起使用完成判断。软保护的软件破解有两种方法,一种是在注册窗口添入假的注册码,用软件跟踪调试工具对正确的序列号进行拦截。一般设断点的函数为:GetDlgItem, GetDlgItemText, Hmemcpy (仅仅Windows 95/98 ),GetTabbedTextExtent, GetWindowText, lstrcmp, lstrlen。进入待解程序领域后,可以跟踪到判断指令或指令组合,用十六进制编辑工具更改判断后的转移指令,那么,只要输入一个fake RN,程序便认为正确,注册成功。另一种方法是取消软件的限制,用软件跟踪调试工具对实现限制的API函数进行修改。加壳软件经软件分析工具分析确认后,可以使用对应的脱壳工具自动脱壳,也可以用软件跟踪调试工具手动脱壳。2.针对加硬保护的软件的破解破解软盘保护一种是通过静态分析和动态跟踪切断特殊标记与应用程序之间的联系;一种是使用拷贝仿真软件拷贝或仿真软盘,该类软件有:软盘超级磁道分析拷贝软件SCS V4.0L、加密盘复制软件KingCopy2000 Pro、磁盘仿真软件Simu97、Windows环境下磁盘仿真工具WDST等。 破解光盘保护,一是用UltraEdit等十六进制编辑器分析SETUP程序,查找光盘序列号;二是用IsoBuster等光盘刻录软件浏览光盘上的隐藏文件,或用File Monitor监视加密光盘中文件运行情况发现隐藏目录,拷贝所需文件;三是用虚拟光驱软件(Vcdrom、Daemon Tool或虚拟光驱2000)把加密光盘做成虚拟光盘文件,模拟光盘;四是用专用的可以拷贝加密光盘的光盘拷贝工具(DiscJuggler或CloneCD)拷贝光盘。破解软件狗的方法主要有硬件方法和软件方法两种。软件狗的硬件破解方法是仿制软件狗的硬件电路,对付一些简单的软件狗比较有效。软件破解方法主要是软件模拟和跟踪分析。软件模拟是使用I/O拦截软件记录下受保护软件与软件狗之间交互的数据,制成模拟软件,用模拟软件代替软件狗。软件模拟方法只能对付软件狗和受保护软件间通信数据不变的情形,如果通信数据有随机性就失效了。跟踪分析方法有静态分析和动态跟踪等方法。静态分析方法是用反汇编、反编译工具对受保护软件进行逆向分析,找出访问软件狗的代码并进行相应的修改。动态跟踪法是用调试分析工具控制受保护软件的整个运行过程,找出它与软件狗交互部分的代码并进行修改,跳过对软件狗的检测或使检测结果无效。静态分析和动态跟踪常常是相互配合使用的。软件安全的一般性建议因为有着利益的驱使,软件业中总会存在着保护与破解的斗争,这是盾与矛的斗争,保护与破解技术在斗争中相互促进、共同发展提高。虽然从理论上说,几乎没有破解不了的保护。但是如果一种保护技术的强度强到足以让破解者在软件的生命周期内无法将其完全破解,这种保护技术就可以说是非常成功的,即软件是安全的(这里的安全是指软件保护安全,不涉及软件是否存在漏洞和软件是否对其他软件或网络造成侵害)。基于此点,提出以下几点建议。软件保护:共享软件应使用软保护的组合方式进行保护,试用软件尽量使用不完全代码方式,光盘发行的软件应进行反拷贝加密,大型商用软件要使用新开发的软件狗加密。编程技术:要将密码学等信息安全新技术融入软件编程中,尽量多利用新科研成果(如改进的加密算法、新水印加密技术等)。编程人员:应当遵守程序员道德规范,应该提倡合作精神,相互学习、相互帮助、相互促进、共同发展。法律法规:要完善法律制度,使软件业发展规范化,加强人们的知识产权意识和法制观念。结束语计算机网络的面世将人类带入了信息互联时代,也随之带来了计算机安全和网络安全问题,而最终的问题是软件的安全问题。软件安全涉及面较广,本文只就其中一方面做了粗浅论述,但随着软件业的发展,技术的提高、法制的完善一定会带来软件的更大限度的安全。

本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考。

  1、加密技术概述

  一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。

  对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。

  但是,软件的加密不同于数据的加密,它只能是“隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然机器可以“看见”这些明文,那么 Cracker,通过一些技术,也可以看到这些明文。

  于是,从理论上,任何软件加密技术都可以破解。只是破解的难度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了。

  所以,反盗版的任务(技术上的反盗版,而非行政上的反盗版)就是增加 Cracker 的破解难度。让他们花费在破解软件上的成本,比他破解这个软件的获利还要高。这样 Cracker 的破解变得毫无意义——谁会花比正版软件更多的钱去买盗版软件?

  2、密码学简介

  2.1   概念

  (1) 发送者和接收者

  假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者不能阅读发送的消息。

  (2) 消息和加密

  消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。

  明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。至于涉及到计算机,P是简单的二进制数据。明文可被传送或存储,无论在哪种情况,M指待加密的消息。

  密文用C表示,它也是二进制数据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些。然而,单单加密通常达不到这一点)。加密函数E作用于M得到密文C,用数学表示为:

  E(M)=C.

  相反地,解密函数D作用于C产生M

  D(C)=M.

  先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:

  D(E(M))=M

  (3) 鉴别、完整性和抗抵赖

  除了提供机密性外,密码学通常有其它的作用:.

  (a) 鉴别

  消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。

  (b) 完整性检验

  消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。

  (c) 抗抵赖

  发送者事后不可能虚假地否认他发送的消息。

  (4) 算法和密钥

  密码算法也叫密码,是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密)

  如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。

  更糟的是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。

  尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。

  现代密码学用密钥解决了这个问题,密钥用K表示。K可以是很多数值里的任意值。密钥K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用K作为下标表示),这样,加/解密函数现在变成:

  EK(M)=C

  DK(C)=M.

  DK(EK(M))=M.

  有些算法使用不同的加密密钥和解密密钥,也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下:

  EK1(M)=C

  DK2(C)=M

  DK2 (EK1(M))=M

  所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知道你使用的具体密钥,他就不可能阅读你的消息。

  密码系统由算法、以及所有可能的明文、密文和密钥组成的。

  基于密钥的算法通常有两类:对称算法和公开密钥算法。下面将分别介绍:

  云顶娱乐app官网,2.2   对称密码算法

  对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。

  对称算法的加密和解密表示为:

  EK(M)=C

  DK(C)=M

  对称算法可分为两类。一次只对明文中的单个比特(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64比特——这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个字符运算,可认为是序列密码对字符序列的运算)。

  2.3   公开密码算法

  公开密钥算法(也叫非对称算法)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。在这些系统中,加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。私人密钥有时也叫秘密密钥。为了避免与对称算法混淆,此处不用秘密密钥这个名字。

  用公开密钥K加密表示为

  EK(M)=C.

  虽然公开密钥和私人密钥是不同的,但用相应的私人密钥解密可表示为:

  DK(C)=M

  有时消息用私人密钥加密而用公开密钥解密,这用于数字签名(后面将详细介绍),尽管可能产生混淆,但这些运算可分别表示为:

  EK(M)=C

  DK(C)=M

  当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中应用有限。

  2.4   单向散列函数

  单向散列函数 H(M) 作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m .

  输入为任意长度且输出为固定长度的函数有很多种,但单向散列函数还有使其单向的其它特性:

  (1) 给定 M ,很容易计算 h ;

  (2) 给定 h ,根据 H(M) = h 计算 M 很难 ;

  (3) 给定 M ,要找到另一个消息 M‘ 并满足 H(M) = H(M’) 很难。

  在许多应用中,仅有单向性是不够的,还需要称之为“抗碰撞”的条件:

  要找出两个随机的消息 M 和 M‘,使 H(M) = H(M’) 满足很难。

  由于散列函数的这些特性,由于公开密码算法的计算速度往往很慢,所以,在一些密码协议中,它可以作为一个消息 M 的摘要,代替原始消息 M,让发送者为 H(M) 签名而不是对 M 签名 .

  如 SHA 散列算法用于数字签名协议 DSA中。

  2.5   数字签名

  提到数字签名就离不开公开密码系统和散列技术。

  有几种公钥算法能用作数字签名。在一些算法中,例如RSA,公钥或者私钥都可用作加密。用你的私钥加密文件,你就拥有安全的数字签名。在其它情况下,如DSA,算法便区分开来了??数字签名算法不能用于加密。这种思想首先由Diffie和Hellman提出 .

  基本协议是简单的 :

  (1) A 用她的私钥对文件加密,从而对文件签名。

  (2) A 将签名的文件传给B.

  (3) B用A的公钥解密文件,从而验证签名。

  这个协议中,只需要证明A的公钥的确是她的。如果B不能完成第(3)步,那么他知道签名是无效的。

  这个协议也满足以下特征:

  (1) 签名是可信的。当B用A的公钥验证信息时,他知道是由A签名的。

  (2) 签名是不可伪造的。只有A知道她的私钥。

  (3) 签名是不可重用的。签名是文件的函数,并且不可能转换成另外的文件。

  (4) 被签名的文件是不可改变的。如果文件有任何改变,文件就不可能用A的公钥验证。

  (5) 签名是不可抵赖的。B不用A的帮助就能验证A的签名。

  在实际应用中,因为公共密码算法的速度太慢,签名者往往是对消息的散列签名而不是对消息本身签名。这样做并不会降低签名的可信性。

  3    当前流行的一些软件保护技术

  3.1   序列号保护

  数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧。但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎是越来越大了。

  看看在网络上大行其道的序列号加密的工作原理。当用户从网络上下载某个shareware——共享软件后,一般都有使用时间上的限制,当过了共享软件的试用期后,你必须到这个软件的公司去注册后方能继续使用。注册过程一般是用户把自己的私人信息(一般主要指名字)连同信用卡号码告诉给软件公司,软件公司会根据用户的信息计算出一个序列码,在用户得到这个序列码后,按照注册需要的步骤在软件中输入注册信息和注册码,其注册信息的合法性由软件验证通过后,软件就会取消掉本身的各种限制,这种加密实现起来比较简单,不需要额外的成本,用户购买也非常方便,在互联网上的软件80%都是以这种方式来保护的。

  软件验证序列号的合法性过程,其实就是验证用户名和序列号之间的换算关系是否正确的过程。其验证最基本的有两种,一种是按用户输入的姓名来生成注册码,再同用户输入的注册码比较,公式表示如下:

  序列号 = F(用户名)

  但这种方法等于在用户软件中再现了软件公司生成注册码的过程,实际上是非常不安全的,不论其换算过程多么复杂,解密者只需把你的换算过程从程序中提取出来就可以编制一个通用的注册程序。

  另外一种是通过注册码来验证用户名的正确性,公式表示如下:

  用户名称 = F逆(序列号) (如ACDSEE)

  这其实是软件公司注册码计算过程的反算法,如果正向算法与反向算法不是对称算法的话,对于解密者来说,的确有些困难,但这种算法相当不好设计。

  于是有人考虑到以下的算法:

  F1(用户名称) = F2(序列号)

  F1、F2是两种完全不同的的算法,但用户名通过F1算法计算出的特征字等于序列号通过F2算法计算出的特征字,这种算法在设计上比较简单,保密性相对以上两种算法也要好的多。如果能够把F1、F2算法设计成不可逆算法的话,保密性相当的好;可一旦解密者找到其中之一的反算法的话,这种算法就不安全了。一元算法的设计看来再如何努力也很难有太大的突破,那么二元呢?

  特定值 = F(用户名,序列号)

  这个算法看上去相当不错,用户名称与序列号之间的关系不再那么清晰了,但同时也失去了用户名于序列号的一一对应关系,软件开发者必须自己维护用户名称与序列号之间的唯一性,但这似乎不是难以办到的事,建个数据库就可以了。当然也可以把用户名称和序列号分为几个部分来构造多元的算法。

  特定值 = F(用户名1,用户名2,...序列号1,序列号2...)

  现有的序列号加密算法大多是软件开发者自行设计的,大部分相当简单。而且有些算法作者虽然下了很大的功夫,效果却往往得不到它所希望的结果。

  3.2   时间限制

  有些程序的试用版每次运行都有时间限制,例如运行10分钟或20分钟就停止工作,必须重新运行该程序才能正常工作。这些程序里面自然有个定时器来统计程序运行的时间。

  这种方法使用的较少。

  3.3   Key File 保护

  Key File(注册文件)是一种利用文件来注册软件的保护方式。Key File一般是一个小文件,可以是纯文本文件,也可以是包含不可显示字符的二进制文件,其内容是一些加密过或未加密的数据,其中可能有用户名、注册码等信息。文件格式则由软件作者自己定义。试用版软件没有注册文件,当用户向作者付费注册之后,会收到作者寄来的注册文件,其中可能包含用户的个人信息。用户只要将该文件放入指定的目录,就可以让软件成为正式版。该文件一般是放在软件的安装目录中或系统目录下。软件每次启动时,从该文件中读取数据,然后利用某种算法进行处理,根据处理的结果判断是否为正确的注册文件,如果正确则以注册版模式来运行。

  这种保护方法使用也不多。

  3.4   CD-check

  即光盘保护技术。程序在启动时判断光驱中的光盘上是否存在特定的文件,如果不存在则认为用户没有正版光盘,拒绝运行。在程序运行的过程当中一般不再检查光盘的存在与否。Windows下的具体实现一般是这样的:先用GetLogicalDriveStrings( )或GetLogicalDrives( )得到系统中安装的所有驱动器的列表,然后再用GetDriveType( )检查每一个驱动器,如果是光驱则用CreateFileA( )或FindFirstFileA( )等函数检查特定的文件存在与否,并可能进一步地检查文件的属性、大小、内容等。

  3.5   软件狗

  软件狗是一种智能型加密工具。它是一个安装在并口、串口等接口上的硬件电路,同时有一套使用于各种语言的接口软件和工具软件。当被狗保护的软件运行时,程序向插在计算机上的软件狗发出查询命令,软件狗迅速计算查询并给出响应,正确的响应保证软件继续运行。如果没有软件狗,程序将不能运行,复杂的软硬件技术结合在一起防止软件盗版。真正有商业价值得软件一般都用软件狗来保护。

  平时常见的狗主要有“洋狗”(国外狗)和“土狗”(国产狗)。这里“洋狗”主要指美国的彩虹和以色列的HASP,“土狗”主要有金天地(现在与美国彩虹合资,叫“彩虹天地”)、深思、尖石。总的说来,“洋狗”在软件接口、加壳、反跟踪等“软”方面没有“土狗”好,但在硬件上破解难度非常大;而“土狗”在软的方面做的很好,但在硬件上不如“洋狗”,稍有单片机功力的人,都可以复制。

  3.6   软盘加密

  通过在软盘上格式化一些非标准磁道,在这些磁道上写入一些数据,如软件的解密密钥等等。这种软盘成为“钥匙盘”。软件运行时用户将软盘插入,软件读取这些磁道中的数据,判断是否合法的“钥匙盘”。

  软盘加密还有其它一些技术,如弱位加密等等。

  随着近年来软盘的没落,这种方法基本上退出了历史舞台。

  3.7   将软件与机器硬件信息结合

  用户得到(买到或从网上下载)软件后,安装时软件从用户的机器上取得该机器的一些硬件信息(如硬盘序列号、BOIS序列号等等),然后把这些信息和用户的序列号、用户名等进行计算,从而在一定程度上将软件和硬件部分绑定。用户需要把这一序列号用Email、电话或邮寄等方法寄给软件提供商或开发商,软件开发商利用注册机(软件)产生该软件的注册号寄给用户即可。软件加密虽然加密强度比硬件方法较弱,但它具有非常廉价的成本、方便的使用方法等优点。非常适合做为采用光盘(CDROM)等方式发授软件的加密方案。

  此种加密算法的优点

  ·    不同机器注册码不同。用户获得一个密码只能在一台机器上注册使用软件。不同于目前大多软件采用的注册方法,即只要知道注册码,可在任何机器上安装注册。

  ·    不需要任何硬件或软盘

  ·    可以选择控制软件运行在什么机器、运行多长时间或次数等

  ·    可让软件在不注册前的功能为演示软件,只能运行一段时间或部分功能。注册后就立即变为正式软件

  ·    采用特别技术,解密者很难找到产生注册号码的规律

  ·    在使用注册号产生软件(注册机)时可采用使用密码、密钥盘、总次数限制等方法

  ·    方便易用,价格低廉。

  这种加密还有以下特点

  1、 注册加密的软件,只能在一台机器上安装使用。把软件拷贝到其它机器上不能运行。

  2、 若用户想在另一机器上安装运行,必须把软件在这一机器上运行时的序列号,寄给软件出版商换取注册密码。当然应再交一份软件费用。

  3、 此加密方法特别适应在因特网上发布的软件及用光盘发布的软件。

  注释:

  1、“加密技术概述”部分内容参考了大学教材“密码学基础”。

  2、“当前流行的一些软件保护技术”部分内容参考了“加密与解密--软件保护技术及完全解决方案”一文。

本文由云顶娱乐app官网发布于云顶娱乐app官网,转载请注明出处:软件加密才能和挂号机制,软件珍爱及破解战略

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。