1、 使用统一外壳工具对C#强签名程序加密注意事项
在使用统一外壳工具加密成功之后,还要进行下面两步操作:
1.打开vs的命令行(如下图所示)
2.在命令行中输入sn命令(如下图所示): sn -Ra [加密后的文件路径] [snk文件路径]
注意:命令行中的snk文件为客户程序中的snk文件(BOLKeyPair.snk),非加密工具生成的snk文件。这一步操作是为了用正确的强命名文件,重新给加密后的文件签名。
2、 使用统一外壳工具对C#程序加密注意事项
对由C#程序加密后,包括exe或者dll。当程序不能运行时,需要将加密后文件的文件名改成原文件名。如原文件为abc.exe,加密后为abc_packed.exe,这时需将abc_packed.exe改名为abc.exe运行。
3、 Linux系统上返回通讯错误的处理方法
先使用lsusb查看是否有ET99/ET199。然后增加.rules文件,文件名可以随意,完成后重启计算机。.rules文件一般位于/etc/udev/rules.d目录下.rules文件内容为
ET99:
BUS=="usb", SYSFS{idVendor}=="096e", SYSFS{idProduct}=="0303", MODE="0666"
ET199
BUS=="usb", SYSFS{idVendor}=="096e", SYSFS{idProduct}=="0304", MODE="0666"
4、 如何在C#中调用
C#中两种方式调用:
(1)调用FT_ET99_API.dll,这个是标准的dll库,需要使用DllImport声明每个函数,参数是char*类型,可以参看ET99 C#示例中的dll目录下的示例。
(2)另外一种是调用ET99_FULL.dll这个是Activex com控件,参数是string类型,使用前需要先regsvr32进行注册,ET99_FULL.dll是建立在FT_ET99_API.dll基础上的,因此注册时需要将ET99_FULL.dll和FT_ET99_API.dll一起拷贝到system32目录下。
5、 64位Windows系统调用问题
x64系统上是可以运行32位的程序的,x64系统中的windows\syswow64目录下都是32位的程序,因此可以将API库,如ET99_Full.dll拷贝到这个目录,使用这个目录下的regsvr32进行注册。另外,这时上层应用也要是32位的应用,如c#在编译时要选择x86(只调用32位的库),而不是any cpu(any cpu会根据系统的不同而调用不同的库)。如果是IE,要运行program(x86)下面的IE目录下的IE(这个是32位的),而不是program下的IE(这个是64位的)。
如果应用是64位的,那么就需要将64位的API库放到x64系统上的windows\system32目录(这个目录下都是64位的库)下。64位的应用只能调64位的库。
6、 PID的作用
PID(8个十六进制字符)的作用是区分不同开发商系统中的锁。PID出厂默认为8个F,即“FFFFFFFF”(不区分大小写),PID必须修改后,锁的功能才能使用。例如:客户A公司购买锁后PID设置为“11111111”,客户B公司购买锁后PID设置为“22222222”,客户A公司的系统中是查找PID为“11111111”的锁,那么B公司或者其他公司的锁在A公司的系统中是无法使用的。
PID是在查找锁和打开锁时用到的,即必须输入正确的锁的PID,打开和查找才能成功。如锁的PID为:“A1B2C3D4”,这时调用et_FindToken和et_OpenToken函数时,pid参数就要给“A1B2C3D4”,函数执行才能成功。
另外,PID非常安全,它是由一个长度不超过51个字节的字符串作为种子,多功能锁会根据这个种子生成PID(8个十六进制字符)。这个生成算法是在多功能锁内部完成的,而且是不可逆的,也就是说,只有生成者才知道什么样的种子能生成什么样的PID,别的人即使知道PID,也能够调用这个计算过程,但因为不知道种子是什么,是无法生成您的PID的,从而无法生产出一个与您手中一致的加密锁硬件。
特别注意,请保留好PID和产生PID的种子,特别是种子。由于种子相同,产生的PID就相同,所以在忘记了PID的情况下,可以使用已知PID的锁和相同的种子产生忘记的PID。如果种子也忘记了,那么只能返厂重新生产。
7、 SOPIN的作用
SOPIN(16个十六进制字符)为管理员密码,这个密码只能由专门的人员掌握,而不应透露给其他人,也不要出现在应用系统中。掌握管理员密码的管理员可以设置锁的PID,和解锁UserPIN,即在做这两个操作前,需先验证SOPIN,验证通过后才能进行设置。
SOPIN可以设置重试次数限制,但特别注意,当SOPIN锁死后,只能返厂重新生产。为了减少不必要的麻烦,SOPIN出厂默认为没有锁死限制。
重试次数可以设置为0~15次,设为0时表示没有限制。当设置有重试次数限制时,如果连续输入错误的次数超过了最大重试次数,则多功能锁锁死,这时输入正确的密码也不能进行相应的操作;在最大重试次数内只要有一次输入正确,则重试次数又恢复为最大重试次数。这种机制类似于银行卡,防止破坏者反复重试破解密码。
SOPIN的生成与PID的生成都是通过种子机制来完成的。即是由一个长度不超过51个字节的字符串作为种子,多功能锁会根据这个种子生成SOPIN(16个十六进制字符)。这个生成算法是在多功能锁内部完成的,而且是不可逆的,也就是说,只有生成者才知道什么样的种子能生成什么样的SOPIN。
可以通过批量设置工具(ET99Setting.exe)或者et_SetupToken接口设置SOPIN重试次数。使用ET99Setting.exe设置时,在“请选择设置项”中选上“读写属性”前的复选框, 并在“重试次数”后填入相应的次数(0-15)。
8、 UserPIN的作用
UserPIN(16个十六进制字符)为用户密码,在使用锁的读写功能,设置HMAC_MD5密钥和进行HMAC_MD5运算前,必须先验证这个密码,验证通过后才能正确执行。注意UserPIN必须是0-9 A-F(不区分大小写)的十六进制字符,长度必须是16个。
UserPIN可以设置重试次数限制,重试次数可以设置为0~15次,设为0时表示没有限制。UserPIN出厂默认设置3次锁死。锁死后需先验证SOPIN,然后通过解锁函数进行解锁,也可以参看常见问题中“解锁User PIN”。解锁后UserPIN恢复为默认的16个F,即“FFFFFFFFFFFFFFFF”(不区分大小写)。
可以通过批量设置工具(ET99Setting.exe)或者et_SetupToken接口设置UserPIN重试次数。使用ET99Setting.exe设置时,在“请选择设置项”中选上“读写属性”前的复选框,并在“重试次数”后填入相应的次数(0-15)。
9、 如何将存储区设置成只读
锁的存储区可以设置成只读。当设置成只读时,用户密码(UserPIN)验证后,只能读取数据而不能写入数据;开发商密码(SOPIN)验证后,可读可写。
可以通过批量设置工具(ET99Setting.exe)或者et_SetupToken接口设置存储区只读属性。使用ET99Setting.exe设置时,在“请选择设置项”中选上“读写属性”前的复选框,并选上“只读标志”的复选框。
10、 必须先修改PID才可以使用
ET99/ET299必须先要修改PID才能使用。如果使用默认的8个F,包括读写等很多功能都是不能成功的,会返回0x04(没有设置PID的错误)。
11、 如何使User PIN码方便输入
最终用户在使用ET99进行网上身份认证或者使用加密后的应用软件时,特别是在进行身份认证时需要输入ET99的User PIN。由于ET99 的User PIN为16个字符,用户输入不方便,这时开发商应先对User PIN进行处理。可以将用户自己设定的USER PIN(如:superkey)通过调用我们接口库提供的MD5_HMAC接口或者自行设计相应的转换算法,将最终用户的输入转换成16个 (0~9,A~F)的字符。在使用MD5_HMAC接口时,其结果为16个字节,这时可以截取其中的8个字节,每个字节以2个字符(0~9,A~F)表示,这样再作为ET99的User PIN,以供验证调用的接口使用。
可以参考这样的方案。保留系统中原有的用户名和密码,用户设置的这个任意字符的密码通过变换(可以自己写算法)为长度16个的十六进制字符,每次用户密码更改后,还要通过ET99的修改UserPIN的接口将硬件的密码同时修改。这样就解决了用户输入UserPIN码不方便的问题。
12、 PID和SOPIN是否可以恢复为出厂的全F
只有将硬件退回给我们重新烧制固件程序,才可以恢复为全是F,我们也不知道全F的种子。但因为PID必须被修改后才能使用,恢复为全F是没有必要的。
您可以使用当前的PID去产生一个新的PID。如PID已经设置为FFC5EB78,那么就可以使用FFC5EB78打开硬件,验证SOPIN,然后使用新的种子产生一个新的PID。SOPIN是一样的,先验证当前的SOPIN,在使用新的SOPIN种子产生新的SOPIN。
另外,数据区中的数据出厂为0x00,如果要恢复,直接使用写接口写入0x00就可以。建议都写成0x00,因为0x00是字符串结尾的标志,这样在读取数据时比较方便。
13、 解锁User PIN
当您使用外壳加密工具或者其他验证User PIN的操作失败,并返回错误0xF0时,表明UserPIN已经锁死了。这时需要使用SO PIN进行解锁操作,过程如下。(注意:解锁时需要输入您手中ET99/ET299当前的PID和SO PIN,截图中为示范的PID和SO PIN):
(1)运行ET99Edit.exe/ET299Edit.exe。输入“F”,输入PID,查找ET99/ET299,如下图:
(2)输入“T”,输入PID,打开ET99/ET299,如下图:
(3)输入“U”,进入SetupMenu,然后输入“R”,输入SO PIN,完成User PIN的解锁。User PIN解锁后,恢复为出厂设置的16个“F”,如下图:
按“X”退出工具。
14、 获取User PIN和SO PIN的重试次数
可以通过et_Verify接口返回值来得到User PIN和SO PIN的重试次数。当et_Verify接口返回不为0时表示验证失败,这时返回值为0xF*,*代表剩余的重试次数。如:返回0xF2,表明还有2次重试机会。
15、 ET99批量设置
您可以使用ET99Setting.exe工具对ET99进行批量设置。
需要注意:
(1)运行时,需要将FT_ET99_API.dll拷贝到工具的同一目录下。
(2)前三行:硬件PID、SO PIN码和UserPIN码中填写当前ET99的相应数据。启动时默认填写的是ET99出厂时的8个F或者16个F。
(3)新的User PIN码填写您更改后的User PIN。特别注意:长度为16个字符,必须是0~9,A~F的十六进制字符,不区分大小写。
(4)PID种子和SO PIN码种子填写您设定用于产生的种子,任何字符(包括中文)都是可以的。
(5)在“请选择设置项”中选择需要设置的项目。最后一项“读写属性”包括设置“只读标志”和SO PIN/User PIN的重试次数。注意:重试次数只能为0~15次,设置为0表示没有重试次数限制。
设置后,请保存好PID、SO PIN和User PIN,您也可以在工具目录下生成的History.ini文件中查看。
16、 ET99读写注意事项
ET99多功能锁提供1000字节的数据存储区域,必须经过USER PIN权限验证或者SO PIN权限验证后才可以进行读写操作。开发商也可以将该空间设置为只读,这时经过USER PIN权限验证后只可读取,不能写入;SO PIN验证后可读,可写。在使用读写接口进行读写操作时每次只能60个字节,多于60字节请分块操作,读写API接口函数中第二个参数offset不断变换写入的起始位置,第三个数Len为每个块要写的长度,不能大于60。
17、 USB设备出厂设置
PID(Product Identification)的初始值为8个字符“F”,即:“FFFFFFFF”。
SO PIN (Super Officer Personal Identification Number)的初始值为16个字符“F”,即:“FFFFFFFFFFFFFFFF”,SO PIN没有锁死次数限制
USER PIN (User Personal Identification Number)的初始值为16个字符“F”,即:“FFFFFFFFFFFFFFFF”,3次锁死。
另外,普通用户状态可以对数据存储区进行读写,密钥存储区全为0xFF,数据存储区全为0xFF。
18、 没有找到USB设备如何处理
- 可以先检查一下是不是硬件损坏(请参看“检查USB设备与计算机是否正常连接”问题说明)。步骤如下:
- 在桌面“我的电脑”图标点击右键,选择“属性”。
- 选择“硬件”标签,并按“设备管理器”按钮。
- 在出现的设备窗口中找到“人体学输入设备”,点开前面的加号。双击HID-compliant device。
- 点开详细信息,在下面的显示框中看是否有:VID_096E PID_0303。
- 您使用编辑器工具ET99Edit.exe/ET299Edit.exe试一下,使用看ET99多功能锁用户手册.pdf第4.5节,按下面的过程:
- 按F,输入PID,看能不能找到ET99/ET299。
- 按T,输入PID,看能不能打开ET99/ET299。
- 按S,输入SOPIN,看能不能通过。
- 如果User PIN锁死了,可以通过解锁将User PIN恢复为出厂默认设置16个F。按4.5.8节操作,按U后再按R,输入正确的SO PIN。
如果以上都可以的话,使用就没有问题了。有2种情况会造成使用不了:
- 硬件损坏,这时即使输入正确的PID,也找不到ET99/ET299。这时可以在多台机器上测试一下,以便排除确认问题。
- PID不正确,如果还记得产生PID的种子,那么可以使用另外的ET99/ET299用该种子获得PID。
19、 SO PIN和User PIN
加密锁的SO PIN和User PIN非常安全,重试次数可以设置为0~15次,设为0时表示没有限制。SO PIN和USER PIN可以设置成没有锁死限制和锁死二种状态,开发商可以根据自己的情况灵活选择。出厂默认为SO PIN没有锁死限制,User PIN 3次锁死
当设置为锁死状态后,如果连续输入错误的次数超过了最大重试次数,则多功能锁锁死,这时输入正确的密码也不能进行相应的操作;在最大重试次数内只要有一次输入正确,则重试次数又恢复为最大重试次数。这种机制类似于银行卡,防止破坏者反复重试破解密码。
当User PIN锁死时,可以使用SO PIN重新设置User PIN为16个字符“F”。但当SO PIN锁死时,只能退还给我们处理。
20、 使用加密锁的PID杜绝硬件复制
PID非常安全。它是由一个长度不超过51个字节的字符串作为种子,多功能锁会根据这个种子生成PID。这个生成算法是在多功能锁内部完成的,而且是不可逆的,也就是说,只有生成者才知道什么样的种子能生成什么样的PID,别的人即使知道PID,也能够调用这个计算过程,但因为不知道种子是什么,是无法生成您的PID的,从而无法生产出一个与您手中一致的加密锁硬件。
21、 检查USB设备与计算机是否正常连接
在桌面“我的电脑”图标点击右键,选择“属性”
选择“硬件”标签,并按“设备管理器”按钮
在出现的设备窗口中找到“人体学输入设备”,点开前面的加号。双击HID-compliant device
点开详细信息,在下面的显示框中看是否有:VID_096E PID_0303
如果这个步骤正常,表明计算机与USB设备连接正常。
22、 PID,SOPIN和UserPIN能否恢复为出厂设置
PID,SOPIN和UserPIN一旦被更改后,出于安全因素考虑,是不能恢复为出厂设置的。您可以将锁退还给我们,我们重新烧制一下。
23、 使用外壳加密工具加密后的程序出现乱码
这是由于没有设置PID,或者输入的PID和UserPIN不正确造成的。
24、 高速HID无驱设备有何优点
目前无驱的技术主要分为:HID、SCSI和CCID。
SCSI主要用于U盘等设备,主要应用于数据量大的传输中,但只有在Windows2000以上操作系统中不需要安装驱动,同时也受到是否是系统管理员访问的影响。
CCID设备同样也只能应用于Windows2000+SP4以上的操作系统中。
相比较而言,高速HID无驱设备兼容性强,工作稳定,能够适合从Windows98至Windows7的所有操作系统,即插即用。特别适合兼容性和稳定性要求高,且数据量不大的应用中。同时,ET系列采用高速HID通讯,满足各种高速需求。HID设备也能够在Linux、Unix、MAC等系统中稳定工作。
25、 为什么插上USB设备后,系统中显示未知设备
USB设备为标准的HID无驱设备,即插即用。遇到机器不认时,一般有3种情况。
(1)有干扰或是接触不良,请您重新插入或者更换计算机上的其它USB端口。
(2)在Win2000以上的操作系统使用系统自带的驱动,不需要独立安装驱动。但在不完善的操作系统安装过程中会去掉系统驱动,用户需要在同版本的操作系统中将WINDOWS\Driver Cache\i386\driver.cab文件拷贝到不完善的操作系统的相应目录中。
(3)请检查是否关闭了BIOS中的USB支持选项。
另外,在Win98上安装时需要Windows98的系统安装盘上的base6.cab包。Win2000以上操作系统不需要系统安装盘,即插即用。如果在计算机上不能认到USB设备,请使用USB鼠标或者USB键盘来检测计算机的系统是否支持标准HID设备。