易语言编写龙脉NOX加密锁程序教程Word格式文档下载.docx
《易语言编写龙脉NOX加密锁程序教程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《易语言编写龙脉NOX加密锁程序教程Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
限制软件的使用时间和次数
19元/只
NOX2单机锁
经济实用型加密锁
20元/只
DAM2+单机锁
市场销售领先的加密锁
26元/只
还有两款网络型产品,大伙儿自己看吧。
本次采纳的是上述列步中的第三种:
NOX2加密锁,要紧考虑到论坛上大伙儿利历时钟加密的例程还不多,因此试用后与大伙儿分享。
NOX2产品拿得手后是深红色半透明的,图片如以下图所示:
随邮的还有一张光盘,一份用户卡内有订购号,包装盒的印刷还算精美。
下次订购时,要向客服说明订购号,客服处置后才会邮给你,以让你的加密狗与其他人购买的加密狗完全不一样,达到每一个人购买的狗都可不能相同的目的。
他们能够为用户定制彩色外壳,还能够为用户在加密狗上印定定制LOGO,我感觉这点他们考虑还算周到,但需要批发量大时才行,且另收费。
三.挪用DLL
下面介绍的是用易语言直接挪用龙脉NOX2型加密狗的DLL。
1.预备工作
龙脉NOX2加密狗在利用之前最好设置一下密码,密码的设置规那么是从高级到低级,即:
超级密码→用户密码→应用程序标识,利用的时候要从低级到高级挪用,即:
应用程序标识→用户密码→超级密码。
设置的方式也超级简单,插入加密狗,运行光盘中附带的治理工具,
例如:
在治理工具中设置如下:
种子码:
B041701DF4BC4F50B003AB1B8C1AD8DD
用户密码:
a01a1a06df58e20d9924a44e8f757711
程序标识:
F4BC4F50
如以下图所示:
上图中的超级密码初始化是多个F字母,需要您修改,能够随机生成,而且备份在你的一个文档中。
超级密码不能公布,要机密保留,不能够写在程序代码中,如此就保证了你的加密狗与其他的加密狗之间的区别。
2.是不是插上加密狗
第一个实现的功能确实是检查电脑上是不是插入了龙脉加密狗。
通过上述取得“应用程序标识”后,下面就能够够挪用“程序标识”检查是不是插上加密狗了。
大伙儿能够运行例程试一下,其中由于“应用程序标识”是十六进制的,编程中要转换成十进制。
程序顶用到了一个“取十进制”的自概念子程序,代码如下:
返回值=NoxFind(取十进制(编辑框_应用程序标识.内容,0),handles,num)
.若是(返回值=0)'
为0,操作成功!
编辑框1.内容=“成功,已找到加密狗!
”+到文本(返回值)+“有”+到文本(num)+“只加密狗!
”
.不然
编辑框1.内容=“未找到加密狗,失败!
”+到文本(返回值)+“”+到文本(num)
运行成效如下:
上面的命令执行后,取得了一个句柄,handles。
NOX2最大支持同时插8支USB加密狗。
上面是依照“应用程序标识”进行的检查,因此若是你插入不同的8支加密狗,就会严格找到那只相符合的加密狗。
如你写了很多不同类型的软件,如此为你的不同软件分派不一样的“应用程序标识”,如此就使加密狗的应用程序标识与你的软件一一对应,区别开来。
然后你能够用不同的“应用程序标识”注册不同软件的用户。
3.打开Nox加密锁
找到加密狗后还要先打开加密狗,以进一步操作,NoxOpen的第2个参数利用到了“用户密码”,用户密码在NOX中是直接生成的,而在NOX2中是通过种子码生成的,但成效都是一样的,你也需要记录下来备用。
利用函数:
longNoxOpen(longnKeyHandle,char*userPin);
在找到加密锁后,可通过加密锁的Handle及正确的用户密码来打开加密锁,只有在正确打开加密锁后才能够进行读写等操作。
参数1:
整数型,通过NOXFIND取得的加密锁句柄数组之一.[in]加密锁Handle
参数2:
文本型,用户密码,[in]用户密码(通过设号工具事前进行设置)
该函数必需与NoxClose成对利用。
易语言编程代码如下所示:
返回值=NoxOpen(handles[1],编辑框_用户密码.内容)
在找到加密锁后,可通过加密锁的Handle及正确的用户密码来打开加密锁,只有在正确打开加密锁后才能够进行其他读写等操作。
4.写临时内存数据
longNoxWriteMem(longnKeyHandle,unsignedchar*pBuffer);
该函数用来写入用户数据到加密锁内存数据区,其中的数据在关闭电脑后即消失。
整数型。
加密锁句柄,通过NOXFIND取得的加密锁句柄数.[in]加密锁Handle
字节型数组,8位长,[in]将要写入的数据,最大8字节。
内存区(几个字节)中的数据掉电后即消失,也确实是说关闭电脑后,数据将再也不存在,只用于临时读取资料用。
只有打开加密锁后才能够挪用该函数。
可用longNoxReadMem函数读出此数据。
此刻有的破解组织推出了加密狗共享器,因此利用那个函数随机取得一个固定数或字符串,写到加密狗内存中,如此当客户用了加密狗共享器时,会检查到有一个不同的数或字符串。
5.读临时内存数据
longNoxReadMem(longnKeyHandle,unsignedchar*pBuffer);
该函数用来读取加密锁内存数据区,在挪用该函数之前,应该先最少分派8字节大小的存取数据的数据区。
参数1:
整数型,加密锁句柄,通过NOXFIND取得的加密锁句柄数.[in]加密锁Handle
参数2:
字节型数组,8位长,[out]读取的结果存储在该参数所指定的数据区内,NOX内存区大小为8字节,在利用前应分派好合配大小的数据区以保证能够正确的容纳相应的数据。
内存区(几个字节)中的数据掉电后即消失。
也确实是说关闭电脑后,数据将再也不存在,只用于临时读取资料用。
只有在打开加密锁后才能够挪用该函数。
读写运行如以下图所示:
6.关闭加密狗
longNoxClose(longnKeyHandle);
该函数用来关闭加密锁,加密锁在关闭后必需从头再次打开才能够进行其他读写的操作。
整数型,加密锁句柄,通过NOXFIND取得的加密锁句柄.[in]加密锁Handle
该函数必需与NoxOpen成对利用。
7.取加密狗错误号
longNoxGetLastError();
每一个加密狗API函数都有一个返回值,通常返回值为0表示成功,返回值为1表示失败,当返回失败后,可返回错误码,若是想要明白错误码的具体信息,请从附录中进行查找。
本命令没有参数。
该API取得最后一次操作的结果错误码。
再次进行正确操作后取得的确实是正错结果。
当加密狗被锁定后,由于不能打开读取里面的内容,因此需要用本函数判定。
8.读取NOX加密锁中的经历数据
在那个地址NOX和NOX2锁有所区别,即NOX没有写函数,而需要治理工具写入,NOX2有写函数,因此在程序中较为灵活。
本函数只针关于NOX型加密狗,NOX2型加密狗的另两个函数在后面介绍。
longNoxReadStorage(longnKeyHandle,unsignedchar*pBuffer);
该函数用来读取加密锁掉电维持数据区(FLASH),在挪用该函数之前,应该先分派最少16字节的存储数据的数据区。
整数型,通过NOXFIND取得的加密锁句柄数组之一.[in]加密锁Handle
字节型数组,16位长,[Out]读取的结果存储在该参数所指定的数据区内,NOX的掉电维持区的大小为16字节,因此在利用前应分派好合配大小的数据区以保证能够正确的容纳相应的数据。
只有在执行打开加密锁代码以后,才能够挪用该函数。
掉电维持数据区:
指关闭电脑后数据还存在于加密狗中,下次开电脑数据还存在。
NOX在应用程序中只支持掉电维持数据区的读取,写入数据区应通过设号工具来写入。
大伙儿打开治理工具,写入一些字符串,如下所示:
大伙儿再运行例程,读取一下加密锁,如以下图所示:
上述代码顶用到了“字节数据()”自概念子程序,用于将中文字符从字节型数组中恢复。
9.写入NOX2加密锁中的经历数据
下面介绍的两个函数只针关于NOX2型加密狗,且两个狗挪用的DLL文件是不同的。
NOX2比NOX高级在于加密狗内有四个区,每一个区64字节的可读写区。
大伙儿能够直接用治理工具直接写入,或用批量工具直接写入,固然,也提供了API函数来读写这四个区。
能够在治理工具中设置NOX2加密锁的四个区的读写属性,在此设置为即能够读,也能够写的“读写属性”。
若是你设置为只读属性,将只能读不能写。
NOX2治理工具运行后如以下图所示:
longNoxWriteStorage(longnKeyHandle,longpage,unsignedchar*pBuffer);
该函数用来写入加密锁掉电维持数据区(FLASH),在挪用该函数之前,应该先分派最少64字节的存储数据的数据区。
整数型,[in]页号,支持4页(0,1,2,3)
参数3:
字节型数组,64位长,[Out]读取的结果存储在该参数所指定的数据区内,NOX2的掉电维持区的大小为64字节,因此在利用前应分派好合配大小的数据区以保证能够正确的容纳相应的数据。
只有在打开加密锁以后,才能够挪用该函数。
掉电维持数据区:
指关闭电脑后数据还存在于加密狗中,下次开电脑数据还存在。
下面是易语言程序的运行成效,如以下图所示:
10.读入NOX2加密狗中的经历数据
longNoxReadStorage(longnKeyHandle,longpage,unsignedchar*pBuffer);
该函数用来读取加密锁掉电维持数据区(FLASH),在挪用该函数之前,应该先分派最少64字节的存储数据的数据区。
整数型,[in]页号,支持4页(0,1,2,3)
参数3:
字节型数组,64位长,[Out]读取的结果存储在该参数所指定的数据区内,NOX2每一页的掉电维持区的大小为64字节,因此在利用前应分派好合配大小的数据区以保证能够正确的容纳相应的数据。
四.发布软件
你挪用了DLL文件,那么在打包安装程序时,就需要带上DLL文件一路打包发布。
若是你将你加密狗邮给用户之前,最好将加密狗身上的编码抄下来,以避免用户加密狗损坏时,邮回的不必然是你当初邮出的那只加密狗。
五.有效编程
最后大伙儿仍是看看光盘中附带的每一个命令的详解,和一些加密的技术。
好了上面的介绍大体终止,但还只是低级的用法,在实际利用中,你能够将专业的资料存在加密狗中,必要时再读出来,呵呵。
还有一些注意事项,如:
不要利用明文作为密码或对照,直接用MD5好了,对照是不是加密成功也要隐藏地深一些哦。
具体大伙儿再看看《易语言软件加密技术》吧,易语言论坛上有。
()
附录:
龙脉加密狗DLL指令说明
由于NOX与NOX2的一些DLL有区别,默许值有所不同,且挪用方式也有所不同,因此下面仅对NOX2的DLL进行介绍,NOX的形式上差不多,若是大伙儿选用的是NOX型加密狗,请直接参看相关的利用说明书。
一.NOX2型加密锁介绍
NOX2加密锁是北京世纪龙脉公司基于NOX加密锁研发的一套先进的软件爱惜产品,它是连接在运算机USB端口的硬件设备,外形小巧。
通过它能够爱惜该软件不被非法复制和非授权访问和利用。
NOX2型加密锁为标准的HID设备,无需安装驱动,操作系统直接支持,因此无需安装硬件驱动,直接连接到运算机的USB端口即可在程序中利用,省去安装硬件驱动所带来的兼容性的风险。
NOX2型加密锁内置4个64字节的可读写掉电维持存储区和8字节内存区,其中4个掉电维持存储区支持读写属性操纵,用户可灵活地操纵每一个分区的访问方式,掉电维持分区支持写10万次,读取次数不限,因此用户应幸免频繁进行写操作,可依照具体的利用环境来决定如何利用该存储区;
NOX2的内存区可任意读写,用户可用于在软件运行进程中存储一些用于随机检测的数据,该数据区在掉电后数据即丢失。
二.NOX2系列锁基础知识
1.超级密码
NOX的超级密码为一个32字节的字符串,NOX自带了密码生成工具以保证每次生成的密码串是不同的且是唯一的,在需要修改超级密码时请利用自带的密码生成工具来生成。
超级密码具有最高权限,能够修改用户密码,修改掉电维持数据区等,该超级密码出厂设置默以为32个F(即“FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF”),软件厂商在分发NOX加密锁之前,可修改该密码,但应妥帖保留该密码,若是尝试15次失败后,加密锁将自动锁死,现在必需从头插上从头进行操作。
超级密码由编程人员保密寄存,不得泄露。
不要将超级密码写在软件代码中或文档中提供给用户,从而保证其平安性。
2.种子码
NOX2的种子码为一个32字节的字符串,种子码用于与超级密码一路生成用户密码,用户密码用于最终的软件中,如此就保证了用户密码的平安性。
3.用户密码
用户密码由超级密码和种子码生成,如此可保证用户密码的平安性,同时该密码用于打开加密锁并读取其中的数据,关于掉电爱惜存储区,若是设置为只读权限,那么加密锁密码只有读取权限,而不许诺修改;
若是设置为可读写,那么加密锁密码可对该存储区进行读写操作.关于内存区,加密锁密码正确后即可进行读写。
通过设号工具能够很容易通过超级密码和种子码生成该密码
用户密码将用于软件中对NOX2进行相应的操作。
用户密码错误三次后,加密锁自动锁死,需要拔下从头插上并从头运行软件。
用户密码会写在程序代码中,最好分散寄存及采纳异或等方式打乱隐藏,以避免破解者轻易找到破解。
4.应用程序标识
该标识用于查找指定应用程序对应的加密锁。
建议用户为不同的应用程序设置不同的标识。
软件厂商通过设号工具来修改应用程序标识。
应用程序标识出厂设置为0xFFFFFFFF(即-1).
5.掉电维持数据区
加密锁内置4个64字节的掉电维持数据区(分页),用户可别离对这4页数据区进行读写属性的设置。
该数据区掉电后可不能丢失,用户能够对该数据区进行读写操作,设置为只读的数据区将不许诺进行写操作。
6.内存区
加密锁内置的为用户分派的内存区,可用于临时寄存数据,电脑关闭后数据不保留,NOX提供8字节的内存区。
7.唯一ID
每一个加密锁拥有硬件唯一ID,并支持相应的API来读取ID。
8.加密锁句柄HANDLE
加密锁HANDLE用于识别系统中的每一个加密锁,API操作需要通过HANDLE来指定是操作哪个加密锁。
通过挪用NoxFind系列函数来取得系统中所有的加密锁及Handle,通过Handle来对指定的加密锁进行操作。
Handle是动态的,每挪用一次NoxFind,加密锁的Handle就会从头分派,上次取得的Handle就不能再利用。
三.NOX2加密狗API手册
下面列出了NOX2所支持的所有应用程序API及详细说明。
1.NoxFind函数
LongNoxFind(longnAppID,long*nKeyHandles,long*nKeyNum);
Parameters
NappID
[in]应用程序标识
NkeyHandles
[out]当前系统连接的所有NOX加密锁Handle数组,NOX最大支持同时插8支,因此在调用该函数之前,应分配一个最少8个元素long型数组用来存储每一个加密锁的Handle
NkeyNum
[out]找到的NOX加密锁个数,如果没找到为0
ReturnValue
成功,nKeyHandles数组中中保存了所有加密锁Handle
>
失败,未找到,系统中未连接NOX加密锁,同时nKeyNum为0
功能说明:
longNoxFind(longnAppID,long*nKeyHandles,long*nKeyNum);
查找系统中指定“应用程序标识”的所有NOX2加密锁句柄Handle,若是失败,那么该系统未连接该NOX2加密锁。
加密锁句柄Handle用来标识每一个加密锁。
整数型,十进制数值,“应用程序标识”在设号工具中设置,并与第一个参数等同。
整数型数组,8个数组成员.[out]当前系统连接的所有NOX加密锁Handle数组,NOX最大支持同时插8支,因此在挪用该函数之前,应分派一个最少8个元素long型数组用来存储每一个加密锁的Handle.
整数型,返回加密锁个数,[out]找到的NOX加密锁个数,若是没找到为0
NOXFind是第一需要挪用的函数,挪用成功后,本程序中所有加密锁的Handle都会从头分派,原有Handle自动失效,因此若是在系统中需多次挪用该函数,请记得先终止在原有Handle上的所有操作(可通过挪用NoxClose),同时在以后的其它函数中利用新的Handle.
“应用程序标识”在设号治理工具中设置。
2.NoxGetLastError函数
LongNoxGetLastError();
无
最近一次操作的错误码。
利用说明:
longNoxGetLastError();
每一个API都有一个返回值,通常返回值为0表示成功,返回值为1表示失败,当返回失败后,能够利用错误码API来取得具体错误缘故。
当API挪用失败时,可利用该函数来取得失败具体缘故,该函数只是返回错误码,若是想要明白错误码的具体信息,请从附录中进行查找。
该API取得最后一次操作的结果错误码
3.NoxOpen函数
LongNoxOpen(longnKeyHandle,char*userPin);
NKeyHandle
[in]加密锁Handle
UserPin
[in]用户密码(通过设号工具进行设置)
成功,加密锁打开
失败,可使用NoxGetLastError来获得错误码。
longNoxOpen(longnKeyHandle,char*userPin);
整数型,加密锁句柄,通过NOXFIND取得的加密锁句柄数组之一.[in]加密锁Handle
文本型,用户密码,[in]用户密码(通过设号工具事前进行设置)
5.NoxClose函数
LongNoxClose(longnKeyHandle);
nKeyHandle
成功,加密锁关闭
longNoxClose(longnKeyHandle);
6.NoxReadStorage函数
longNoxReadStorage(longnKeyHandle,longpage,unsignedchar*pBuffer);
nKeyHandle
Page
[in]页号,支持4页(0,1,2,3)
pBuffer
[Out]读取的结果存储在该参数所指定的数据区内,NOX2每一页的掉电保持区的大小为64字节,因此在使用前应分配好合配大小的数据区以保证能够正确的容纳相应的数据。
ReturnValue
成功,加密锁读取成功,数据已保存到pBuffer中。
1
字节型数组,64位长,[Out]读取的结果存储在该参数所指定的数据区内,NOX2每一页的掉电维持区的大小为64字节,因此在利用前应分派好合配大小的数据区以保证能够正确的容纳相应的数据。
7.NoxWriteStorage函数
longNoxWriteStorage(longnKeyHandle,longpage,unsignedchar*pBuffer);
[in