ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:185.34KB ,
资源ID:3696579      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3696579.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(通过WMI获取据盘符获取U盘物理序列号.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

通过WMI获取据盘符获取U盘物理序列号.docx

1、通过WMI获取据盘符获取U盘物理序列号通过WMI获取据盘符获取U盘物理序列号 作者: 日期: JavaScript通过WMI获取根据盘符获取U盘物理序列号一:达到的效果根据UKeyTool生成的U盘文件xxxx_private.ukey内的md5与U盘物理序列号+ xxxx_uKey+界面读取文件自由串(50*10)计算的md5对比,如果一样,则允许登录,否则不允许登录二:加密工具1 原理 U盘序列号信息格式:vid_0537&pid_a703#192b0c00048a,其中192b0c00048a为U盘的物理序列号(唯一); U盘中的验证文件名为xxxx_private.ukey;将U盘的物

2、理序列号加工后保存在文件xxxx_private.ukey中,使U盘和文件一一对应。2 加密步骤1. 把U盘的物理序列号中的所有字母转换成大写,如192B0C00048A,标为串1;2. 固定串xxxx_uKey,标为串2;3. 随机生成50*10个的可见字符:ASCII范围33-126,标为串3;4. 串1、串2、串3顺序合并,计算32位MD5(字母大写);5. 创建文件ipbc_private.ukey,写入字符串:File:xxxx_V3 USB Private key;6. 换行,写入版本号,格式:Version:1.0.0.07. 换行,写入MD5值;8. 换行,写入串3,每50个字

3、符换行;三:JavaScript解密1 解密步骤1. 把U盘的物理序列号中的所有字母转换成大写,如192B0C00048A,标为串1;2. 固定串xxxx_uKey,标为串2;3. 打开文件xxxx_private.ukey,读入50*10个可见字符,标为串3;4. 串1、串2、串3顺序合并,计算32位MD5(字母大写);5. 打开文件xxxx_private.ukey,读取MD5值;6. 比较计算的和读取的MD5值是否相同,相同则通过验证,否则失败。2 JavaScript读取U盘物理序列号(推荐方案3)准备1 读取U盘盘符/* * 判断是否有U盘并获取U盘盘符,只适用于IE? * retu

4、rns string 返回U盘盘符 * constructor */function CheckUsb() var e, x; var ForReading = 1, RorWriting = 2; var bfResult = ; try var fso = new ActiveXObject(Scripting.FileSystemObject); catch(err) return bfResult; e = new Enumerator(fso.Drives); for (; ! e.atEnd(); e.moveNext() x = e.item(); if (x.DriveType

5、 = 1) if (x.Path != A:) bfResult += x.Path + ,; return bfResult;方案1:根据WMI的Win32_USBHub读取U盘物理序列号缺陷:无法根据盘符一对一获取U盘物理序列号缺陷说明:此方法获取的intCount,及U盘迭代index跟注册表中的键对应注册表键地址:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDiskEnum+(intCount+1)次部分键对应的值的注册表地址为:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEnu

6、mUSBSTOR+值在此处可以查看U盘的物理序列号,可验证获取的是否正确。点击物理序列号会出现右侧:其键ParentIdPrefix对应的即盘符信息。盘符信息注册表地址:HKEY_LOCAL_MACHINESYSTEMMountedDevices 需要将ParentIdPrefix转换成十六进制,并在此处与值查询,获得的键即盘符信息。参考地址:出错场景:当有多个U盘,第一次可能会通过,比如有G,I,H三个盘,此时根据注册顺序分别为1,2,3;如果在验证过程中将G盘拔出,此时I,H盘的顺序为1,2;再插入G盘进行验证,此时G盘顺序为3;但是准备部分获取的U盘盘符顺序为G,I,H,此时迭代的盘符i

7、ndex或获取到I盘的物理序列号,导致验证失败。读取U盘物理序列号迭代准备部分获取的U盘盘符,并将盘符和迭代index传入此方法,获取物理序列号/* * 根据盘符获取物理序列号 * param drivepath 盘符 * param intCount 轮询获取次数 * returns * 返回盘符与物理序列号字符串,格式:G:XXXXXXXXXXXXXX * constructor */function ReadUsbSnEach(drivepath, intCount) var properties = service.ExecQuery(SELECT * FROM Win32_USBHu

8、b); /Win32_USBHub所有属性说明: var e = new Enumerator(properties); var count = 0; for (; ! e.atEnd(); e.moveNext() var p = e.item(); var sn = p.DeviceID; /1:Generic USB Hub;2:USB Root Hub;3:USB Mass Storage Device USB大容量存储设备 /ConfigManagerErrorCode=0 Device is working properly. /因每个盘的Name不同,这里只判断英文和中文两种,超

9、过的U盘将不被验证通过 if (p.Name = USB Mass Storage Device | p.Name = USB 大容量存储设备) count = count + 1; if (count = intCount + 1) / & p.ConfigManagerErrorCode = 0 if (p.Name = USB Mass Storage Device | p.Name = USB 大容量存储设备) strSN += GetUsbSN(sn); /alert(drivepath + - + count + - + p.Name + - + strSN); return st

10、rSN; Win32参考地址:物理序列号处理:/* * 分解通过注册表获取的值或其他方式获取同样的值,只取物理序列号即可 * param sn 通过注册表获取的值或其他方式获取的同格式的值 * returns * 物理序列号 * constructor */function GetUsbSNByReg(sn) var UsbSN; var strSN = sn; var arraySN = new Array(); if (strSN.indexOf(&) 0) arraySN = strSN.split(); if (arraySN.length 2) UsbSN = arraySN2.sp

11、lit(&)0; else UsbSN = ; else UsbSN = ; return UsbSN;方案3:根据注册表读取U盘物理序列号缺陷:无法根据盘符一对一获取U盘物理序列号缺陷说明:参考方案1 缺陷对应部分参考地址:参考方案1 缺陷对应部分出错场景:参考方案1 缺陷对应部分读取U盘物理序列号迭代准备部分获取的U盘盘符,并将盘符和迭代index传入此方法,获取物理序列号/* * 通过注册表获取物理序列号 * param drivepath 盘符 * param intCount 盘符index * returns string * constructor */function Read

12、UsbSnEachByReg(drivepath, intCount) var sn = ; var obj = new ActiveXObject(WScript.Shell); try var s = HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDiskEnum+(intCount+1); var sNic = obj.RegRead(s);/USBSTORDisk&Ven_Kingston&Prod_DT_101_G2&Rev_5.001401051502351655498409&0 sn = drivepath+GetUsbSNBy

13、Reg(sNic); catch(e) return sn;物理序列号处理:参考方案1 缺陷对应部分方案2:根据WMI的其他Win32方法读取U盘物理序列号其他Win32方法(Win32_LogicalDisk,Win32_LogicalDiskToPartition,Win32_DiskDriveToDiskPartition,Win32_DiskDrive)读取U盘物理序列号/* * 根据盘符获取物理序列号 * param drivepath 盘符 * param intCount 轮询获取次数 目前无用,保留,注释的Win32_USBHub方式获取有使用到 * returns * 返回盘

14、符与物理序列号字符串,格式:G:XXXXXXXXXXXXXX * constructor */function ReadUsbSnEach(drivepath, intCount) var strSN = drivepath; /存放序列号 var locator = new ActiveXObject(WbemScripting.SWbemLocator); var service = locator.ConnectServer(.); var logical_disk_query = select DeviceId,CreationClassName,SystemName from Win

15、32_LogicalDisk where Caption = + drivepath + ; var logical_disk_property = service.ExecQuery(logical_disk_query); var logical_disk_Enum = new Enumerator(logical_disk_property); for (; ! logical_disk_Enum.atEnd(); logical_disk_Enum.moveNext() var logical_disk_item = logical_disk_Enum.item(); var depe

16、ndent = / + logical_disk_item.SystemName + /root/cimv2: + logical_disk_item.CreationClassName + .DeviceID= + logical_disk_item.DeviceId + ; var logical_disk_to_part_query = select Antecedent,Dependent from Win32_LogicalDiskToPartition where Dependent= + dependent + ; var logical_disk_to_part_propert

17、y = service.ExecQuery(logical_disk_to_part_query); var logical_disk_to_part_Enum = new Enumerator(logical_disk_to_part_property); for (; ! logical_disk_to_part_Enum.atEnd(); logical_disk_to_part_Enum.moveNext() var logical_disk_to_part_item = logical_disk_to_part_Enum.item(); var dependent = logical

18、_disk_to_part_item.Antecedent.replace(/g, /); var disk_drive_to_part_query = select Antecedent,Dependent from Win32_DiskDriveToDiskPartition where Dependent= + dependent + ; var disk_drive_to_part_property = service.ExecQuery(disk_drive_to_part_query); var disk_drive_to_part_Enum = new Enumerator(di

19、sk_drive_to_part_property); for (; ! disk_drive_to_part_Enum.atEnd(); disk_drive_to_part_Enum.moveNext() var disk_drive_to_part_item = disk_drive_to_part_Enum.item(); var disk_drive_query = select SystemName,CreationClassName,DeviceID,PNPDeviceID from Win32_DiskDrive where interfaceType = USB; var d

20、isk_drive_property = service.ExecQuery(disk_drive_query); var disk_drive_Enum = new Enumerator(disk_drive_property); for (; ! disk_drive_Enum.atEnd(); disk_drive_Enum.moveNext() var disk_drive_item = disk_drive_Enum.item(); var dependent = + disk_drive_item.SystemName + rootcimv2: + disk_drive_item.

21、CreationClassName + .DeviceID= + disk_drive_item.DeviceId.replace(/g, ) + ; if (disk_drive_to_part_item.Antecedent = dependent) var sn = GetUsbSNByReg(disk_drive_item.PNPDeviceID); return strSN + sn; return strSN;代码解析:此处使用WMI 资源浏览器.exe显示查看个方法获取的数据下载地址:步骤1:1 通过盘符在Win32_LogicalDisk中获取三个字段DeviceId,Crea

22、tionClassName,SystemNameselect DeviceId,CreationClassName,SystemName from Win32_LogicalDisk where Caption = + drivepath + ;2 处理此三个字段为符合Win32_LogicalDiskToPartition格式的串/ + logical_disk_item.SystemName + /root/cimv2: + logical_disk_item.CreationClassName + .DeviceID= + logical_disk_item.DeviceId + ;步骤

23、2:1 将步骤1中处理的串当成步骤2Dependent的值查询两个字段Antecedent,Dependentselect Antecedent,Dependent from Win32_LogicalDiskToPartition where Dependent= + dependent + 2 处理字段Antecedent为Win32_DiskDriveToDiskPartition合适的串logical_disk_to_part_item.Antecedent.replace(/g, /);步骤3:1将步骤2中处理的串当成步骤3 Dependent的值查询两个字段Antecedent,D

24、ependentselect Antecedent,Dependent from Win32_DiskDriveToDiskPartition where Dependent= + dependent + 步骤4:1 查询Win32_DiskDrive出四个字段SystemName,CreationClassName,DeviceID,PNPDeviceIDselect SystemName,CreationClassName,DeviceID,PNPDeviceID from Win32_DiskDrive where interfaceType = USB2 将此四个字段按照步骤3中Ant

25、ecedent的值的格式拼接 + disk_drive_item.SystemName + rootcimv2: + disk_drive_item.CreationClassName + .DeviceID= + disk_drive_item.DeviceId.replace(/g, ) + 3 如果两个值相同,则取出步骤3中的Antecedent的值进行处理,处理方法见方案1中的物理序列号处理4 处理后的即根据盘符得到的U盘物理序列号3 按照加密工具加密的步骤进行加密4 与加密工具加密读取出的MD5值比较5 验证成功或失败四:完整的JavaScript代码function include

26、(path) var a = document.createElement(script); a.type = text/javascript; a.src = path; var head = document.getElementsByTagName(head)0; head.appendChild(a);/include(./jquery1.3.2.js);document.write();/* * 判断是否有U盘并获取U盘盘符,只适用于IE? * returns string 返回U盘盘符 * constructor */function CheckUsb() var e, x; va

27、r ForReading = 1, RorWriting = 2; var bfResult = ; try var fso = new ActiveXObject(Scripting.FileSystemObject); catch(err) return bfResult; e = new Enumerator(fso.Drives); for (; ! e.atEnd(); e.moveNext() x = e.item(); if (x.DriveType = 1) if (x.Path != A:) bfResult += x.Path + ,; return bfResult;/* * 读取U盘内文件ipbc_private.ukey内的MD5值和随机串 FF存在问题 * param pathfile 文件路径 * returns * 返回content_array数组 * 0为md5值 * 1为50*10随机串 */function read(pathfile) var content_array = new Array(); if (typeof window.ActiveXObject != undefined) try var fso = new Activ

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1