标题：加密狗
简介
软件开发者可以通过接口函数和软件狗进行数据交换（即对软件狗进行读写），来检查软件狗是否插在接口上；或者直接用软件狗附带的工具来加密自己EXE文件（俗称"包壳"）。这样，软件开发者就可以在软件中设置多处软件锁，利用软件狗做为钥匙来打开这些锁；如果没插软件狗或软件狗不对应，软件将不能正常执行。 
加密狗是为软件开发商提供的一种智能型的软件保护工具，它包含一个安装在计算机并行口或 USB 口上的硬件，以及一套适用于各种语言的接口软件和工具软件。加密狗基于硬件保护技术，其目的是通过对软件与数据的保护防止知识产权被非法使用。
其实，要是以编程的思想来看，就是在一个小存储工具里，添加了一个.KEY的文件，这样，先要访问KEY才能访问某些东西。加密狗外观图(3张)
加密狗的外观图。[1]
工作原理
加密狗的工作原理：
加密狗通过在软件执行过程中和加密狗交换数据来实现加密的.加密狗内置单片机电路(也称CPU)，使得加密狗具有判断、分析的处理能力，增强了主动的反解密能力。这种加密产品称它为“智能型”加密狗.加密狗内置的单片机里包含有专用于加密的算法软件，该软件被写入单片机后，就不能再被读出。这样，就保证了加密狗硬件不能被复制。同时，加密算法是不可预知、不可逆的。加密算法可以把一个数字或字符变换成一个整数，如DogConvert(1)=12345、DogConvert(A)=43565。下面，我们举个例子说明单片机算法的使用。比如一段程序中有这样一句：A=Fx(3)。程序要根据常量3来得到变量A的值。于是，我们就可以把原程序这样改写：A=Fx(DogConvert(1)-12342)。那么原程序中就不会出现常量3，而取之以DogConvert(1)-12342。这样，只有软件编写者才知道实际调用的常量是3。而如果没有加密狗，DogConvert函数就不能返回正确结果，结果算式A=Fx(DogConvert(1)-12342)结果也肯定不会正确。这种使盗版用户得不到软件使用价值的加密方式，要比一发现非法使用就警告、中止的加密方式更温和、更隐蔽、更令解密者难以琢磨。此外，加密狗还有读写函数可以用作对加密狗内部的存储器的读写。于是我们可以把上算式中的12342也写到狗的存储器中去，令A的值完全取决于DogConvert()和DogRead()函数的结果，令解密难上加难。不过，一般说来，加密狗单片机的算法难度要低于一些公开的加密算法，如DES等，因为解密者在触及加密狗的算法之前要面对许多难关。
发展过程
随着解密技术的发展，单片机加密狗由于其算法简单，存储空间小，容易被硬件复制等原因，正逐渐被市场所淘汰。以北京彩虹天地信息技术股份有限公司为首的国内加密狗厂商研发出稳定性更好、存储空间更大（最大为64K）、有效防止硬克隆的第四代加密狗——“智能卡”加密狗以其独创的“代码移植”原理，已经被国内大型商业软件开发商如擎洲软件、金蝶、用友、CAXA、广联达、神机妙算、鲁班……所采用。
以世界上第一款智能卡加密锁——精锐IV为例，简单介绍一下“代码移植”原理。
“代码移植”加密原理为一种全新的、可信的软件保护模型，工作原理为：软件中部分代码经过编译，“移植”到加密锁硬件内部，软件中没有该段代码的副本。
在这套软件保护方案中，PC端应用软件的关键的代码和数据“消失”了，被安全地移植到精锐IV型加密锁的硬件中保护起来。在需要使用时，应用软件可以通过功能调用引擎来指令精锐IV运行硬件中的关键代码和数据并返回结果，从而依然可以完成整个软件全部的功能。由于这些代码和数据在PC端没有副本存在，因此解密者无从猜测算法或窃取数据，从而极大程度上保证了整个软件系统的安全性。简言之，精锐IV提供了一套可信的解决方案，从理论上保证软件加密的安全。
编程语言
加密狗可以保护的编程语言是随着计算机的硬件及操作系统的发展而不断变化的。 　
上世纪80年代，个人计算机主要为AT、286等机型。个人机的操作系统主要是DOS，企业服务器的操作系统主要使用Novell的Netware。开发加密狗保护软件的工程师需要通过修改DOS的INT21、INT10方法加密DOS下的EXE文件，或者通过提供特定的API的方法，为Turbo C、Fortran、basic等编程语言提供加密。某些时候开发加密狗保护软件的工程师使用可能会使用DOS的DEBUG直接编写.COM文件。
此后个人机的操作系统经历了Windows、Windows 95 、Windows2000、Windows NT、XP等升级换代，保护EXE文件的手段也从DOS驻留程序，变为编写VXD、SYS等方法。编程语言也涵盖了：MASM、Turbo C、VC、Watcom C for NetWare、Watcom C for x86、NDP C for x86、NDP FORTRAN、Visual Foxpro、Clipper、LISP for AutoCAD等数十种。
随着加密狗硬件处理能力的不断增强，计算机USB端口的普及，对软件的保护逐渐开始依赖于通用的加密算法，而不再只依赖于加密软件的加密编程技巧。使用动态链接库、控件等方式已经可以满足大部分编程工具软件的保护需求。加密狗厂家也就从逐一为不同的编程工具软件定制API中解放出来了。
运用案例
1、同望公路造价软件
2、广联达造价软件
3、未来造价软件（江苏）
4、清华斯维尔造价软件
5、神机妙算造价软件
6、鲁班造价软件
使用维护
解密技术排除法律和道德因素，就从学术角度来说是门科学。它与加密技术一样是相辅相成不断提高。
解密方法
1、硬件复制
复制硬件，即解密者复制Sentinel Superpro相同的加密锁。由于加密锁采用了彩虹公司专用的ASIC芯片技术，因此复制该加密锁非常困难，且代价太大。
2、监听
解密者利用并口监听程序，进行解密，其工作机制是：
监听程序，记录应用程序对并口发的查询串和加密锁发回的响应串。当移去加密锁时，如果程序再对并口发查询串确认身份时，监听程序返回所记录的响应串。程序认为加密锁仍然在并口上，是合法用户继续运行，应用程序也就被解密了。
3、 打印机共享器
将加密锁插在打印机共享器上，多台计算机共同使用打印机共享器上的一把加密锁。（后面简述对抗策略）
4、 DEBUG
解密者DEBUG等反编译程序，修改程序源代码或跳过查询比较。应用程序也就被解密了。
几种加密策略
1、针对上述监听和DEBUG问题解密方法，本人推荐充分利用加密狗开发商的API函数调用的加密策略：
a、 针对并口监听程序
1）对加密锁进行算法查询
&Oslash; 正确的查询响应验证
用户生成大量查询响应对，如200对。在程序运行过程中对激活的加密算法单元随机的发送在200对之中的一对“345AB56E”―――“63749128”。查询串“345AB56E”，哪么算法单元返回的正确的响应串应该是“63749128”，若是，则程序认为加密锁在并口上，是合法用户，继续运行，反之终止程序。
&Oslash; 随机非激活算法验证
对非激活的加密锁算法单元发随机生成的查询串，如：“7AB2341”，非激活算法单元只要是有查询就会有响应串。因此返回响应串“7AB2341”，在程序中判断响应串与查询串是否相同，如果相同，则证明加密锁仍然在口上。继续运行程序。
&Oslash; 随机激活算法验证
假设监听程序了解了上面的机制。即对非激活的加密算法需要发什么查询串则返回相同的响应串。对激活的加密算法单元发随机生成的查询串，如：“345AB56E”由于是激活算法响应串肯定与查询串肯定不等。所以假如返回响应串“7253ABCD”，在程序中判断响应串与查询串是否不同，如果不同，则证明加密锁仍然在并口上，继续运行程序。
上面三种加密策略在程序同时使用，相符相承，相互补充。即使监听程序记录下来我们的部分查询响应。
2） 分时查询
用户把查询响应对分组，如120对分为4组。每30对一组。头三个月使用第一组，第二个月三个月使用第二组以此类推，监听程序就算记录了头三个月。第二个月三个月以后程序仍然无法使用。
也可以再生成100对“临时委员”，每次运行随意抽出1对与以上分组结合使用。使记录程序在三个月内也无法记录完全。程序也无法使用。
3） 随机读写存储单元
为了防监听程序的策略是：程序在启动时，利用随机函数随机生成的一个数，假设是“98768964”。在指定的18#单元写入这个数。哪么我们在程序运行中，每调用一个功能程序前读取18#单元，数判定是否是写入的数“98768964”。因为每次写入的数是随机生成的，所以监听程序记录不到当次启动时写入的随机数，它返回的数肯定是一个不匹配的数。就此可判定是否是合法用户。Sentinel Superpro加密锁可以重复写10万次以上。也就是说每天写三次也可以使用一百年。
2、 针对打印共享器的加密策略
为了防打印共享器的策略是：程序在启动时，利用随机函数随要生成的一个数，假设是“7762523A”。在指定的34#单元写入这个数。哪么在程序运行中，每调用一个功能程序前读取34#单元，以判定是否是写入的数“7762523A”。以此判定是否是合法用户。因为每次写入的数随机生成的，同时使用打印共享器的其他非法用户的程序一进入也会写入一个不同的随机数。那么第一个用户的程序在校验是否是第一个用户写入的数时，就会被认为是非法的用户。所以在一个阶段也只是一个程序使用。（例如RAINBOW公司开的Sentinel Superpro加密锁可以重复10万次以上。也就是说每天写三次也就可以使用一百年。）
3、 针对DEBUG跟踪的加密锁的安全策略
1）分散法
针对DEBUG跟踪。在调用每个重要功能模块前，我们建议要对加密锁进行查询，校验身份。如果只在程序开始部分校验身份，DEBUG跟踪程序部分可以轻易的跳过校验部分，而一些不良用户可以在验证后可以将加密锁拔下用在其它计算机。
2）延时法
针对某一具体查询校验，都有三步骤：
&Oslash; 查询得到响应串
&Oslash; 比较响应串和查询串是否匹配
&Oslash; 执行相应的步骤
建议以上三个步骤要延时执行。最好鼗三步骤相互远离些，甚至放到不同的子程序或函数中。例如：执行“查询得到响应串” 后，相隔50执行“比较响应串和查询串是否匹配”。假如程序需要调用一个函数。那么就在这个函数里执行“执行相应的步骤”。这样程序更难于被破解。
3）整体法
将响应串作为程序中数据使用。
例如：有返回值“87611123”，而程序需要“123”这个数。可让“87611123”减去“8761000”得到“123”。这样一来任何对加密程序的修改都会使程序紊乱。
4）迷惑法
一般情况下的程序执行相应的验证步骤。验证是非法用户就会退出。这样很容易被发现代码特征。于是知道是非法用户后继续执行一些无用的操作使程序紊乱。以迷惑解密者。
以上为现如今软件开发商使用硬件加密狗（加密锁）进行软件保护时可以使用的几种切实可行的几种加密策略。

软件背景
2013年，莫氏兄弟高价在出售“加密狗”抢票软件获利的同时，还与票贩子勾结，按照票贩子的订票需求，使用“加密狗”在网上大量圈票后，与票贩子约定时间，在网上退票的同时使用“加密狗”抢票。
违法利用
  2013年2月初，北京铁路警方打掉一个套购倒卖火车票犯罪团伙，抓获涉案人员25名。该团伙开发销售“加密狗”抢票软件1011套，并在网上大肆套购、高价倒卖火车票，已查实的非法获利超过140万元，涉及全国29个省区市。
铁道部公安局有关负责人介绍，2013年年初网上出现大量集中退票，最高一日可达22.4万张次。经分析判定，这一异常现象与不法人员利用抢票软件套购、退票有关；已查破的两起网络倒票案件显示，倒票团伙均购买并使用“加密狗”软件在网上抢票后加价倒卖。据此，铁路警方顺藤摸瓜，分别在杭州、佛山将高价贩卖“加密狗”的莫氏兄弟抓获。
莫氏兄弟与倒票人员勾结，按照其订票需求，使用“加密狗”在网上大量圈票，然后约定集中退票时间，让倒票人员使用“加密狗”抢票。莫氏兄弟每张票收取50元到数百元的好处费。经查实，各地返给莫氏兄弟的好处费达上百万元。
因为案情重大，铁道部公安局立即成立专案组，统一部署侦办工作。截至2013年2月4日，在杭州、北京等地抓获涉案人员25名，关闭设在长沙的“加密狗”网络服务器，切断了其倒票牟利渠道，追缴“加密狗”软件325套，缴获电脑、银行卡、手机等一批作案工具。[1]
软件议论
IT法律专家、中国政法大学知识产权中心特约研究员赵占领表示，普通用户使用抢票软件帮助自己购票，既不存在倒卖的营利行为，也没有破坏计算机信息系统，法律上并不存在问题。但是如果利用软件大量抢购车票然后高价倒卖，则破坏了正常的购票及其管理秩序，违反了铁道部打击倒票的相关规定，情节严重的涉嫌构成刑事犯罪。[2]​