转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
软件注册加密技术         ★★★★

软件注册加密技术

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3388 更新时间:2009/4/23 18:44:51
2、    使用激光穿孔法实现软件防复制加密

这种方法主要是利用程序设计中的“陷阱技术”来实现的。基本设计思路是这样的:在软盘表面穿孔,使部分扇区遭到破坏,这是物理损坏,无法用工具软件修复。设计者在开发软件以前,用通用的检测工具对磁盘表面全面扫描,找到已被损坏的扇区,将它们记录下来,以后设计软件时,只要让软件判断这些扇区是否损坏就能判断软件是否已被复制。

对于生产少量的软件产品而言,这种方法不失为一种经济有效的加密方法,但是如果软件要被大量生产,这种方法就变得更加繁杂:每次穿孔的位置不一定一样,软件所要判断的扇区编号也不一样,实现相当困难,但设计思想是值得借鉴的。

3、    特殊磁道防复制加密技术

虽然激光穿孔技术能达到很好的防复制加密效果,但其实现过程是相当复杂的。特殊磁道防复制加密技术实现简单,也能够很好的对软件起到加密作用。为了简单起见,在此仅对软盘进行讨论。

平时我们所讨论的磁盘扇区都是指的数据区,其实一个扇区由标识区和数据区以及两个间隙组成,一些磁道(柱面)的ID信息被保存在非数据区中。在DOS系统启动的时候,软盘磁盘基数表被装载到起始地址为0000:0525的内存单元中,INT 13H的许多操作都是根据这一基数表来确定扇区大小的。那么,只要我们修改磁盘基数表,再用普通的INT 13H来操作磁盘,就能很容易的将软件密钥写到磁盘扇区间隙处。一般情况下,对于这种特殊扇区,磁盘控制器无法在磁盘上写出,这样,一般的复制程序也就无法将其复制,但在被加密的软件程序中可以将间隙处的密钥作为特殊扇区的一部分读出,判断密钥信息就可以确定软件是否已被复制。

以下是采用这种方法读取一个扇区长为4096B的数据区的例子,读取的是软盘的0面0道,读出的信息被保存在DS段偏移量为1000H的内存单元中。

C:\WINDOWS>debug

-e0000:0525

0000:0525  02.05   3F.01

-a100

1288:0100 mov ax,201

1288:0103 mov bx,1000

1288:0106 mov cx,0

1288:0109 mov dx,0

1288:010C int 13

1288:010E int 3

1288:010F

-g=100

特殊磁道加密是这样实现的:INT 13H AH=05H功能是根据BX所指向的内存单元的参数来对磁盘进行格式化的。上面已经提到,每个扇区都有一个ID,ID是由柱面号、磁头号和扇区字节长度组成,那么只要修改ID参数,并用这种奇特的参数格式化磁盘,就会产生特殊磁道。剩下的工作和对特殊扇区的操作相同:将密钥写入特殊磁道,就能实现软件防复制。下面是一个对360K、DSDD磁盘磁道格式化的C语言函数,其中trktbl数组存放的就是磁盘扇区的ID参数。

int fmt_trk (int dsk, int trk, int head)

{

       union REGS regs;

       struct SREGS sregs;

       char trktbl[36];

       int i;

       for (i=0;i<9;i++) {

              trktbl[i*4] = trk;

              trktbl[i*4+1] = head;

              trktbl[i*4+2] = i;

              trktbl[i*4+3] = 2;

       }

       regs.h.ah=0x05; regs.h.ch=trk;

       regs.h.dh=head; regs.h.dl=dsk;

       regs.x.bx=FP_OFF(trktbl); sregs.es=FP_SEG(trktbl);

       int86x (0x13, &regs, &regs, &sregs);

       return (regs.h.ah);

}

二、Windows系统下软件注册加密技术

1、利用Windows注册表实现软件注册加密

相信大多数软件都是采用这种方法来实现注册功能的。Windows系统注册表信息量相当大,几乎所有Windows系统和计算机系统配置信息都保存在注册表中。如果软件密钥被写入注册表,那么寻找密钥保存位置无异于海底捞针,不采用一定的技术(如线程跟踪等)是无法得到密钥的。

Windows系统注册表有六个主键:HKEY_CLASS_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG和HKEY_DYN_DATA。每个主键下面又分若干个子键,每个子键下又可新建子键和项,整个注册表呈树状结构。每个项都有名称和值,值可以是二进制、十进制、十六进制和字符串型。

用程序实现注册表的操作是相当简便的。以下Delphi程序段用以在HKEY_CURRENT_USER的子键Software下创建一个名为Arcobet的子键,并将字符串“ChenQingyang”写入该字符串中。

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Registry, StdCtrls;

type

  TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

上一页  [1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台