软件Software狗[Dongles]的加密和解密技术

  此篇文章将从基础开始从了解软件Software狗工作原理到手工制作软件Software狗到介绍软件Software狗以前和现行保护措施其次是在现行基础上如何改进使其保护功能更加完善而后将从软件Software和硬件方面详细讲解软派和硬派高手是如何解密软件Software狗全文中我将引用大量例子以便您能够很好理解

  本人不是做计算机专业所学知识非常浅薄只能边学习边请教并且只能利用业余时间完善此文章所以我会对其不断修改[我不想每篇文章都单独发帖这样影响版面美观相关东西整理总结下就好了]力求全面、详细、完整

  软件Software狗[Dongles]

  1、认识软件Software狗[首先我对软件Software狗作简单介绍在后面我们将对各种软件Software狗加密和解密做详细讲解]

  软件Software狗是插在微机并行口上个软件Software保护装置它包括主机检查和密钥(也称加密盒)两部分主机检查就是前面说加密代码部分加密盒是用来存放密码般来说软件Software狗插在并行口上不会影响打印机正常工作常见软件Software狗加密盒外形如两个D行25针连接器倒接在公头(DB25/M)插在并行口上母头(DB25/F)可接打印机相当于原来并行口整个软件Software狗硬件电路板就在这约5厘米见方加密盒子里

  电路板上公头(DB25/F)的间管脚是对应、直接相联结以保证并行口作用不变存储密码或起信号加密变换作用器件及其它辅助元件就跨接在这25根线上面应用以特定方式跟他们沟通、核对除了某些设计不良情况的外般不会影响打印机正常工作打印机工作时也不会影响它们

  为了防止被非法复制所做加密保护措施般都包括两部分首先是要有保存密码数据载体即密钥;其次是夹杂在应用主机检查即加密代码密钥应该能保证不易被解密、复制;如般用磁盘做加密时加密部分无法用工具复制另外当检查用特殊思路方法去读密码时密码应该能很容易地被读出而不致影响应用正常执行当发现密码不对或密钥不存在时就让主机挂起、重新起动或采用被措施

  软件Software狗经历“时代”

  软件Software狗发展经历了好几代至2001年初就已发展到了第 4代

  第代是存储器型加密锁这是最有历史加密锁内部只有存储体厂商只能对锁进行读、写软件Software狗起信号加密变换作用器件最多只简单采用些电阻、 2极管等检查思路方法也比较简单很容易被人解密.常见有原金天地“软件Software狗”、深思洛克Keypro型、RainbowCplus等这种锁主要特点是厂商可以预先把自己保密数据设置到锁内然后在软件Software运行时随机读取这样防止了解密者通过简单重复并口数据来解密但解密者进步分析下数据规律就可以解决了这就是常说“端口”层数据分析这种加密锁原理非常简单是种正在被逐步淘汰产品但是其原料成本极低即使在很低价位也有很好利润加密厂商般都不愿放弃这种锁;而很多厂商由于成本原因又不得不采用因此这种锁仍有市场份额;

  第 2代是算法不公开加密锁硬件内部增加了单片机即所谓内置CPU厂商主要是利用算法功能进行加密加密锁通常还增加了些辅助功能比如倒计数器、远程升级等软件Software狗采用了低功耗TTLCOMS等逻辑元件在电路上做了些加密工作检查时也要比第代软件Software狗多道手续解密难度自然也增加了常见有深思洛克“深思Ⅰ”型彩虹天地SuperPro、微狗ALADDINMemoHASP等利用单片机软件Software和锁的间数据通讯建立了个保密协议数据都是经过加密解密者就难以分析出数据内容和规律了因此对于这种锁数据分析就不是停留在“端口”层了解密者转向了“功能”层就是对软件Software中进行分析为了抵挡功能层数据分析这种锁来了个“软硬”兼施策略

   “软”是指驱动内反跟踪、外壳加密等等软件Software工作让解密者难以在功能层上仿真谁都靠是对操作系统、微机系统精确理解谁都无法决胜结果是加密驱动在不断更新、膨胀

   “硬”就是加密锁内算法功能这大大增加了解密难度这是掌握在加密者手中武器但是加密者只能设置算法参数即所谓内含多少种算法可选而算法内容并不知道这样就限制了厂商对算法使用要么预先记录算法结果然后在软件Software运行时核对(使用码表);要么在软件Software中至少变换两次然后比较结果是否如果解密者截获这些数据通过统计、分析就有可达到解密目

  第 3代加密锁即所谓“可编程”加密锁1999年初以北京深思洛克为代表推出了第 3代加密锁“可编程”加密锁概念推出是软件Software加密技术次进步“可编程”加密锁设计初衷是希望用户能够将软件Software中重要代码或模块“移植”到加密保护设备中运行使软件Software和加密锁实现真正无缝链接但由于成本限制早期推出几款“可编程”加密锁采用低档单片机给 “可编程”性造成了很大局限主要表现在:1、算法变换复杂度不够高2、指令编码空间较小3、空间较小这些局限性使得用户根本不可能利用“可编程”加密锁实现理想高强度加密方案 软件Software狗采用了PAL(Programmable Array Logic)、PEEL(Programmable Electrically Erasable Logic Device)、GAL(Generic Array Logic)等可编程器件但目前流行期间大概要算串行读写EEPROM(Serial Electrically Erasable PROM)了这些器件由于密码编制灵活性和制成密钥后在中插入检查方便性极大地增加了解密难度从使用角度来看PAL、PEEL、GAL等逻辑器件只能读取数据不能随时写入数据密码重新设置比较麻烦;而EEPROM芯片可随意读写用在软件Software狗上灵活性相当大譬如可以为每个软件Software狗单独设个密码以增加解密难度;另外从EEPROM器件电器性能上来说也非常适合做软件Software狗;因此这种器件在软件Software狗设计中获得了广泛应用是当时软件Software狗制作者首选芯片它象般RAM存储器样可读写(只不过读写是串行)即使断电后也能保存数据不变常用EEPROM型号是93C46它是64×16bit结构也就是说个93C46具有64个16位bit单元容量每次处理数据也都是16位93C46如Microchip、ATMEL、CSi等品牌93C46可以通过切换变为128×8bit或64×16bit两种模式这对软件Software狗制作来说就更灵活了其加密效果也更好当然也有人采用更大容量93C56、93C66或容量小93C06、93C26等EEPROM芯片软件Software狗是插在微机并行口上所以检查是通过并行口I/O地址去读写EEPROM具体读写方式跟硬件线路以及EEPROM时序有关因此检查针对某种硬件线路;但是这些大同小异大体上是差不多

  第 4代软件Software够在第 3代软件Software狗基础上加入个单片机芯片如PIC16C5X此芯片中存有特定算法可将读出密钥数据进行加密变换以对抗逻辑分析仪可以说软件Software狗发展到第 4代已经非常成熟了在此技术上各软件Software狗研制公司又加入自己电路设计形成了各自产品特色

  平时常见狗主要有“洋狗”(国外狗)和“土狗”(国产狗)这里“洋狗”主要指美国彩虹和以色列HASP“土狗”主要有金天地(现在和美国彩虹合资叫彩虹天地)、深思、坚石来说“洋狗”在软件Software接口、加壳、防跟踪等“软”方面做得没有“土狗”好但在硬件上绝对“无法”pj(应当说pj难度非常大):而“土狗”在“软”方面做得绝对称得上世界第许多技术如噪音、自检测、算法可变、码表变换等等可以说都很先进而在硬件上不及国外只要稍有单片机功力都可复制

  现在狗技术发展很快针对区别应用场合有区别类型如:

  强劲狗:自由定义算法高强度加密方案

  微狗: 面向单片机环境高强度加密方案

  USB狗: USB接口微狗全兼容产品

  软件Software狗:面向单机环境低成本加密方案

  网络狗:面向网络环境加密方案

  卡式狗:面向网络环境加密方案

  软件Software狗采取了各种加密技术目前较先进加密技术有以下几种:

  AS技术:API和SHELL外壳加密结合即使外壳被破坏加密依然不能正常运行

  反跟踪:

  a.数据交换随机噪音技术:有效地对抗逻辑分析仪分析及各种调试工具攻击

  b.迷宫技术:在入口和出口的间包含大量判断跳转干扰动态改变执行次序提升狗抗跟踪能力

  抗共享:可从硬件对抗并口共享器由开发商选择是否共享狗

  口令: 可由软件Software开发商设置32位口令口令将不能对存储区进行读写

  时间闸:某些狗内部设有时间闸各种操作必须在规定时间内完成狗正常操作用时很短但跟踪时用时较长超过规定时间狗将返回结果

  单片机:硬件内置单片机固化单片机软件Software保证外部不可读从而保证狗不可仿制

  存储器:提供20字节掉电保持存储器供开发商存放关键数据、配置参数等信息

3、操作指南   1、BITSHELL参数详细介绍说明

  BITSHELL可以用KEY环境变量来设定些参数这样可以简化使用过程设置思路方法如下:

  SET KEY=[SCHEMExx,][STAY,][CHECKOVL]

  BITSHELL各项参数意义如下:

  (1)参数SCHEMExx,若给出则依用户要求使用指定变形算法否则将随机抽取种加密算法BITSHELL2.0共有20种算法可选

  每种算法都有自己特点加密难度大但解码时间长这种算法适合加密重要代码不是特别大软件Software如算法 3和十 2;还有加密难度适中但解码速度快如算法适合加密大型软件Software

  每个用户可以根据自己特点选择如加密区别版本用区别算法加密区别用区别算法如选算法十 5可给出SCHEME15选算法十 9可给出SCHMEM19等依次类推

  (2)参数STAY用来选择在加密执行完毕后是否驻留监控默认值为不驻留监控

  如果加密FoxPro编译必须加参数SET KEY=STAY以监控覆盖模块

  (3)参数CHECKVOL如果被加密中有覆盖模块此参数是用来选择是否检查覆盖模块对于用CLIPPER编译出来软件Software加密时设置该参数非常有必要默认值不检查覆盖模块

  BITSHELL参数都是可选如果不设置都有相应默认值默认设置为:

  (1)SCHEME为随机挑选算法

  (2)不驻留检测(加密FoxPro编译软件Software设定为驻留检测)

  (3)不检查覆盖模块

  2、使用BITSHELL

  BITSHELL商品盘是加密用户可以将其安装在NOVELL网络服务器上使用源盘不能复制如果只是临时使用次也可不用安装将BITSHELL源盘放入软驱中直接使用思路方法:

  BITSHELL<源>[<目标>]

  如果不设置目标加密结果直接覆盖在源加密所用算法可用环境变量KEY来设置

  例如:①BITSHELL C:TEST.EXE

  ②BITSHELL TEST.EXE SAMPLE.EXE

  ③A:BITSHELL D:TEST.EXE C:TEST.EXE

  其中<源>是需要加密路径名源文件必须是可执行文件以COM或EXE为后缀如果缺省<目标>则直接在<源>上加密如果还想保留未加密就不要缺省<目标>并且保证源名和目标名区别

  [介绍说明]

  (1)BITSHELL系统本身是加密不能复制

  (2)经BITSHELL加密软件Software可以拷贝散发任意运行除非被加密有自己反拷贝介质

  (3)经BITSHELL加密软件Software不能还原为未加密状态

  (4)经BITSHELL加密软件Software无法跟踪无法反汇编

   4、BITSHELL高级窍门技巧

  1、源嵌入式保护措施

  软件Software开发者在其软件Software开发完成以后再在关键地方链入以下当链接成功后用BITSHELL.EXE将用户软件Software加密这套被加密软件Software运行时就可以检测该是否被解密修改以采取响应反击措施如拒绝执行等等

  用户可参考以下流程加密:

  (1)将自己软件Software(SAMPLE.C)编好调试通过

SAMPLE.C
#<stdio.h>

{
prf("This is my sample program! ");
}
  (2)在SAMPLE.C重要地方加密

SAMPLE.C
#<stdio.h>

{
/* Insert BITSHELL function call */
id (BL_ComeIn0)
{
prf("Error! ")
(255);

prf("Thin is my sample program! ");}
  (3)编译SAMPLE.C成为SAMPLE.OBJ后再将SAMPLE.OBJ和BLOBJ.OBJ链接成SAMPLE.EXE

  QCL /AL SAMPLE.C BLOBJ.OBJ

  (4)用BITSHELL加密键入命令执行:

  BITSHELL SAMPLE.EXE SALE.EXE

  软件Software加密过程完成了!

  如果被加密SALE.EXE被解密或修改就会提示然后退出

  2、使用BITSHELL须知

  请不要使用PKLITE,LZEXE或EXEPACK进行压缩商品

  建议高级语言设计者如有可能将所用设计语言启动代码作修改改变入口点避免被截获内部识别BITSHELL嵌入式模块最好采用随机

  加密时用环境变量指定参数生产批软件Software用同种变形算法软件Software有漏洞新版本软件Software可换种变形算法加密后文件放在硬盘上可提高加密速度超大文件加密后再用PKZIP等压缩后放入商品软件Software盘上

  3、注意事项

  (1)运行BITSHELL系统或运行经BITSHELL加密系统如果安装了驻留型调试跟踪器(如:Soft-ICEGameBuster等)请先拆除的否则将拒绝运行这样有跟踪解密嫌疑

  (2)使用BITSHELL加密商品软件Software开发者不要将BITSHELL系统盘上任何文件和信息以任何方式提供给最终用户不要将自己所用BITSHELL版本序列号和变形算法透漏出去

   5、系统提供可链接

  BL-ComeIn(BLOBJ.OBJ).........................[1]

  C语言介绍说明:

  extern unsigned long BL_ComeIn(void);

  介绍说明:

  利用这个可判断是否运行过反跟踪同时还返回PSP段地址和机器ROM检查和供用户步检查这是个和加密外壳相关这样可使用户和加密软件Software融为对PSP段地址和ROM检查和判断不要隔太近

  入口参数:无

  出口参数:如果出错返回 0FFFFFFFFH ;

  (DX:AX=0FFFFFFFFH)

  如果成功返回个无符号长字

  其中:

  低字节是ROM检查和高字是PSP段地址

  (AL=ROM检查和DX=PSP段地址)

  注意:ROM检查和计算思路方法:

  累加ROM(0xF000:0xE000)处开始字节长度为0x100

  获取PSP段地址思路方法:

  MOV AH,62H

  INT 21H

  BX就是该PSP段地址

  建议:

  不要每次运行都去检查该用适当频率、在关键地方这个

C Usage Example:
/*
* function:BL_ComeIn
*/
extern unsigend long far BL_ComeIn(void);
/* Error 0xFFFFFFFF,Success Return
* Lo Byte is checksum,Hi Word is PSP segment
*/
void My_BL_ComeIn
{
unsigned long ComeIn;
unsigned ROM_CheckSum;
unsigned PSPsegment;
ComeIn=BL_ComeIn
(ComeIn0xffffffff)
{
prf(" ERROR:not loaded from BITSHELL shell ! ");
{

{
ROM_CheckSum=ComeIn&0xff;
PSPsegment =ComeIn>>16;
prf("nBITSHELL _disibledevent=>dos(&inregs,$outregs);
prf("n This program PSP segment is %xh ",outregs.x.bx);
{
{
   5、个简单例子

  这里我们起看下经BITSHELL加密后情况

  采用个极简单例子用DEBUG生成个 TEST.COM文件:

C:>DEBUG
-A
876B:0100 MOV AL,0
876B:1012 MOV DX,260
876B:0105 OUT DX,AL
876B:0106 INT 20
8760:0108
-RCX
CX 0000
:8
-N TEST.COM
-W
Writing 00008 s
-Q
  用BITSHELL对TEST.COM进行加密:

C:>BITSHELL TEST.COM
BITSHELL(tm)Version 2.01
Copyrighe(c) 1989-1995 by Yellow Rose SoftWare Workgroup
Scheme 6 (CodeKey sht repeated)
9K
Total encryption size is 9K
Encryption completed successfully.
  再用DEBUG来看下加密后TEST.COM:

C:DEBUT TEST.COM
-R
AX=0000 BX=0000 CX=4CBC DX=0000 SP=00C0 BP=0000 SI=0000 DI=0000
DS=877C ES=877C SS=878C CS=878C IP=021C NV UP EI PL NZ NA PO NC
878C:021C FA CLI
-U
878C:021C FA CLI
878C:021D 8CCC MOV SP,CS
878C:021F 8ED4 MOV SS,SP
878C:0221 BC4D25 MOV SP,254D
878C:0224 9C PUSHF
878C:0225 51 PUSH CX
878C:0226 52 PUSH DX
878C:0227 56 PUSH SI
878C:0228 57 PUSH DI
878C:0229 55 PUSH BP
878C:022A 0E PUSH CS
878C:022B 1F POP DS
878C:022C 2E CS:
878C:022D 8C061000 MOV[0010],ES
878C:0231 2E CS:
878C:0232 C606480080 MOV BYTE PTR [0048],80
878C:0237 0E PUSH CS
878C:0238 07 POP ES
878C:0239 BEAD24 MOV SI,24AD
-U
...... ......
-Q
  可以看到经加密后TEST.COM文件变长了很多这是外面加了层外壳同时您也发现了加密后没法反编译;如果您再跟踪您又会发现加密后已经无法跟踪了如果您手头有Turbo Debugger或Soft-ICE等等它们也是无效

  看起来这是个比较好加密工具尤其是它提供可以嵌入源代码中跟软件Software狗配合起来达到内外结合加密效果大家不妨 |||||

  

  虽然加密思路方法那么多但是道高魔高随着加密技术发展解密技术也进步蓬勃发展起来目前可用于解密工具有SOURCE、DEBUG、SYMDEB、TURBO DEBUG、SOFT-ICE、TRW2000等等这些工具功能个比个强更何况还有那么多“专业”解密高手似乎任何加密技术到了他们手里都会迎刃而解说来说去您可能会想你仍然没有最终解决软件Software加密问题吗本来吗加密和解密就是对矛盾阶段优 只能看是哪方先亮出了新招谁都不敢说他加密思路方法别人破译不了或者说他能破译任何加密思路方法如此看来我们所做工作只在于尽量减少被解密可能性以赢得时间进行下开发

  软件Software解密就是要想办法把加密代码攻破具体到软件Software狗上即是找到检查然后干掉它因此如果我们在应用区别地方多做几次检查就可以让解密者浪费更多时间这对I/O速率很快软件Software狗来说是很方便不像软盘加密那样检查起来既费时又不方便

  个好员会把设计得简单易懂具有结构化但这也给解密者带来了方便所以不要写得太规则另外还要加上些“废话”以干扰解密者

  另外种不破坏结构化也不需要写“废话”就可以有效干扰解密者提高解密难度和复杂性思路方法是把子全部用宏改写这样汇编出串串很难看出结构指令进出堆栈数据和各种传递参数以及积存器暂存数存取相距很远嵌套很深分析起来很伤脑筋第 3代软件Software狗存取就是全部用这种思路方法写

Tags:  加密与解密 加密与解密第三版

延伸阅读

最新评论

发表评论