加密狗

原创 2007年09月27日 09:01:00

13.2  加 密 狗

一些商务管理软件,为了防止盗版,经常使用加密狗将软件加密。下面的两个实例将介绍如何将密码写入加密狗及利用加密狗来设计加密程序。

实例420 密码写入与读出加密狗

实例说明

在使用加密狗时,需要向加密狗中写入或读取数据。例如,将密码写入或读取加密狗,如何实现呢?运行本例,在文本框中设置密码后,单击【写入】按钮,即可将设置的密码写入加密狗,成功写入后,单击【读出】按钮,即可将写入的密码读出并显示在文本框中。如图13.4所示。

文本框: 图13.4  将密码写入加密狗技术要点

在购买加密狗时,厂家通常会附带有开发手册和一张光盘。开发手册中介绍了加密狗的使用方法和开发资料。本例使用赛孚耐信息技术有限公司的加密狗产品,该产品提供了.NET中非托管的类库,来完成加密狗的数据读写功能。下面介绍有关加密狗的类库中的读写函数。

  ● DogWrite 函数

该函数将pdogData指向的数据写入加密狗中,从DogAddr地址开始写入,到DogBytes地址停止。

函数声明如下:

    [DllImport("Win32dll.dll", CharSet = CharSet.Ansi)]

    public static unsafe extern uint DogWrite(uint idogBytes, uint idogAddr, byte* pdogData);

参数说明如下。

l     idogAddr:对软件狗读写操作时用户区中的首地址。取值范围为0~99。

l     IdogBytes:对软件狗读写操作时的字节长度。读写时取值范围为1~100,并且与idogAddr之和不能超过100。

l     pdogData:指针型变量。指向读写操作或变换的数据缓冲区。

l     返回值:0表示操作成功,其他值是错误码。

  ● DogRead函数

该函数从加密狗中的idogAddr开始的存储区读出数据,存入pdogData指定的缓冲区,读出字节数为idogBytes。切记,缓冲区大小要足够长。

函数声明如下:

[DllImport("Win32dll.dll", CharSet = CharSet.Ansi)]

    public static unsafe extern uint DogRead(uint idogBytes, uint idogAddr, byte* pdogData);

参数说明如下。

l     idogAddr:对软件狗读写操作时用户区中的首地址。取值范围为0~99。

l     idogBytes:对软件狗读写操作时的字节长度。读写时取值范围为1~100,并且与idogAddr之和不能超过100。

l     pdogData:指针型变量。指向读写操作或变换的数据缓冲区。

l     返回值:0表示操作成功,其他值是错误码。

 注意以下几点。

在使用这个函数之前,必须将随加密狗附带的安装程序安装完整,并将安装目录下的Win32dll.dll文件复制到系统目录下。例如:

在Windows 2003下将安装目录下的“/SafeNet China/SoftDog SDK V3.1/Win32/Win32dll/HighDll/ Win32dll.dll”文件复制到“C:/WINDOWS/system32/”文件夹中。

实现过程

(1)新建一个项目,命名为Ex13_03,默认窗体为Form1。

(2)在Form1窗体中,主要添加两个Button控件,用于执行向加密狗数据的写入与读出数据,添加两个TextBox控件,分别用于填写向加密狗中写入的数据和显示读取加密狗中的数据。

(3)主要程序代码。

设置加密狗类,并且完善加密狗的读写功能,代码如下:

[StructLayout(LayoutKind.Sequential)]

//这个类用于读写加密狗

public unsafe class Dog

{

    public uint DogBytes, DogAddr;  //设置加密狗字节长度和起始地址

    public byte[] DogData;  //设置数据的长度

    public uint Retcode;

    [DllImport("Win32dll.dll", CharSet = CharSet.Ansi)]

    public static unsafe extern uint DogRead(uint idogBytes, uint idogAddr, byte* pdogData);

    [DllImport("Win32dll.dll", CharSet = CharSet.Ansi)]

    public static unsafe extern uint DogWrite(uint idogBytes, uint idogAddr, byte* pdogData);

    public unsafe Dog(ushort num)

    {

        DogBytes = num;

        DogData = new byte[DogBytes]; //设置数据的长度

    }

    public unsafe void ReadDog()

    {

        fixed (byte* pDogData = &DogData[0])

        {

            Retcode = DogRead(DogBytes, DogAddr, pDogData);  //将数据读出加密狗

        }

    }

    public unsafe void WriteDog()

    {

        fixed (byte* pDogData = &DogData[0])

        {

            Retcode = DogWrite(DogBytes, DogAddr, pDogData); //将数据写入加密狗

        }

    }

}

调用加密狗类,进行加密狗的读写功能,代码如下:

        private void button1_Click_1(object sender, EventArgs e)

        {

            Dog dog = new Dog(100);

            dog.DogAddr = 0;        

            dog.DogBytes = 10;   

            string str = textBox1.Text;

            for (int i = 0; i < str.Length; i++)

            {

                dog.DogData[i] = (byte)str[i];

            }

            dog.WriteDog();

            MessageBox.Show("密码已成功写入加密狗!", "成功提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);

            textBox1.ReadOnly = true;

            button1.Enabled = false;

            button2.Enabled = true;

        }

        private void button2_Click_1(object sender, EventArgs e)

        {

            Dog dog = new Dog(100);

            dog.DogAddr = 0;       

            dog.DogBytes = 10;   

            dog.ReadDog();

            if (dog.Retcode == 0)   //开始读加密狗数据

            {

                char[] chTemp = new char[textBox1.Text.Length];

                for (int i = 0; i < textBox1.Text.Length; i++)

                {

                    chTemp[i] = (char)dog.DogData[i];

                }

                String str = new String(chTemp);

                textBox2.Text = str;

            }

            else

            {

                textBox2.Text = "2:" + dog.Retcode;

            }

            textBox1.ReadOnly = false;

            button2.Enabled = false;

            button1.Enabled = true;

        }

 注意:本程序所使用的代码为不安全代码,正常编译是无法通过的,那么需要设置开发环境允许运行不安全代码,设置步骤为:在菜单栏中选择“项目”/“属性”/“生成”子菜单,在“生成”选项卡中选中“允许不安全代码”选项即可。

举一反三

根据本实例,读者可以开发以下程序。

*  利用加密狗加密自己的软件。

*  利用加密狗设计控制计算机使用的程序。

实例421 使用加密狗进行身份验证

实例说明

在程序开发过程中,对于一些机密的数据,开发人员需要将其有效的保护起来。例如,对于用户的密码,如果从数据库中验证用户密码,很容易被非法人员发现甚至破解。本例实现了利用加密狗进行身份验证。实例运行结果如图13.5所示。

文本框: 图13.5  使用加密狗进行身份验证技术要点

本例的关键是从加密狗中读取数据,可以使用ReadDog函数实现。有关该函数的介绍请参考实例“密码写入与读出加密狗”中的“技术要点”部分。

实现过程

(1)新建一个项目,命名为Ex13_03,默认窗体为Form1。

(2)在Form1窗体中,主要添加两个Button控件,用于数据验证和退出程序,添加两个TextBox控件,分别用于输入用户名称和密码。

(3)主要程序代码。

        private void button1_Click(object sender, EventArgs e)

        {

            Dog dog = new Dog(100);

            dog.DogAddr = 0;       

            dog.DogBytes = 6;           

            dog.ReadDog();

            if (dog.Retcode == 0)

            {

                char[] chTemp = new char[6];

                for (int i = 0; i < 6; i++)

                {

                    chTemp[i] = (char)dog.DogData[i];

                }

                String str = new String(chTemp);

                if (textBox2.Text==str)

                {

                    MessageBox.Show("OK");

                }

                else

                {

                    MessageBox.Show("error");

                }

            }

        }

举一反三

根据本实例,读者可以实现以下功能。

*  利用加密狗设计加密软件。

*  使用加密狗控制用户使用权限。

 

西门子insight3.9 ,西门子insight3.10 (Siemens楼宇自控系统APOGEE Insight) 高级版加密狗补丁文件使用说明,QQ 14866768

补丁文件如下:   第一次打开补丁文件,需要进行简单配置:     main.exe文件就是insight的主文件,如果你是默认安装的话,那么main.exe文件位置在c:\insi...
  • zhw309
  • zhw309
  • 2012年03月15日 15:32
  • 8727

DAM2+加密狗克隆方法

DAM2+加密锁在原有DAM2基础上研发的一套更安全、更方便的先进软件保护产品, DAM2+ 型加密锁为标准的 HID 设备, 操作系统直接支持,因此无需安装硬件驱动,直接连接到计算机的 USB 端口...

历史文章之深思4 rockey5 rockey6 新一代加密狗乱弹

历史文章之深思4 rockey5 rockey6 新一代加密狗乱弹 作者:大老  所属组织:=BCG= =[DCG]= 本人作品:《文件加密狗检测工具 2.1》    《教你如...
  • qdsw123
  • qdsw123
  • 2013年07月23日 18:34
  • 1182

加密狗

加密锁"(也称加密狗)最早由彩虹天地开发,现在已成为软件加密行业的代名词。加密锁是一种插在计算机并行口上的软硬件结合的加密产品(新型加密锁也有usb口的)。一般都有几十或几百字节的非易失性存储空间可供...
  • blncle
  • blncle
  • 2011年11月06日 21:57
  • 461

短信猫和加密狗

因为远程监控项目的需求中提到了短信通知的要求,所以要购买短信猫硬件,3个月前还一无所知,现在已经基本学会使用短信猫了。         随着对短信猫的不断了解和实验,发现短信猫可以发送access数...

简易加密狗实现

// SimpleDog.h: interface for the CSimpleDog class. // /////////////////////////////////////////////...
  • josh_wu
  • josh_wu
  • 2013年07月08日 11:21
  • 651

usb加密狗破解原理及方法介绍

http://bbs.pediy.com/showthread.php?t=69415 本文介绍的是软件加密狗破解的一般思路和方法。做为软件开发者,研究好软件加密的确很重要,不过也很有必...
  • xumm_td
  • xumm_td
  • 2013年03月17日 10:15
  • 1328

加密狗的介绍

编辑本段简介   加密狗是外形酷似U盘的一种硬件设备,正名加密锁,后来发展成如今的一个软件保护的通俗行业名词,"加密狗"是一种插在计算机并行口上的软硬件结合的加密产品(新型加密狗也有usb口的)。一...

K3PLM13.0加密狗驱动(N)_50用户补丁

PLM帮助企业规范设计开发流程,构建跨部门协同团队,保证技术资料及时、正确提交及全面安全共享,减少等待、重复动作、库存的浪费,实现信息化系统的一体化集成。企业通过实施PLM提高企业核心竞争力,缩短产品...

模拟美萍加密狗--Rockey2虚拟狗(三)

几经挣扎,我最终还是选择了虚拟设备的方法来模拟Rockey2加密狗。HID.DLL劫持+API劫持的办法技术上虽然简单些,但太繁琐了,不仅要转发大量的函数,还要Hook好几个API,向我这么懒的人可干...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:加密狗
举报原因:
原因补充:

(最多只允许输入30个字)