当前位置:编程学习 > VB >>

新手请教,用VB写一个管理系统,怎样在打开特定菜单时,先读取连在电脑上的U盘的序列号,谢谢大家!!

新手请教,用VB写一个管理系统,怎样在打开特定菜单时,先读取连在电脑上的U盘的序列号,如读取成功则管理系统可以启动相关操作,如果电脑没有插这个U盘.则这个菜单就打不开,好像加密狗那样的功能.
VB能不能做到这个功能??? 
如果能,能不能给我一份例子.谢谢. --------------------编程问答-------------------- 给你几个参考页面自己去测试

exp:http://php.tech.sina.com.cn/download/d_load.php?d_id=38234&down_id=361950
http://www.cnblogs.com/zxsoft/archive/2007/12/28/867657.html
http://topic.csdn.net/t/20060310/18/4606668.html --------------------编程问答-------------------- http://www.cnblogs.com/zxsoft/archive/2007/08/24/867657.html --------------------编程问答-------------------- 好象不是VB的
引用 2 楼 CathySun118 的回复:
http://www.cnblogs.com/zxsoft/archive/2007/08/24/867657.html
--------------------编程问答-------------------- 你去买一个加密狗,一般附带的技术说明中有接口的说明,再不行你可以要求技术支持给你一个VB的样例。
脱离具体硬件是没法讨论的。 --------------------编程问答-------------------- U盘和加密狗是不一样的,U盘走的是scsi协议,加密狗一般走的是hid协议。 --------------------编程问答-------------------- 以为楼主将U盘和加密狗混淆了,原来也是可能做验证的。

不过个人认为U盘不适合做验证用硬件,基于标准协议的东西总没有保密性。
以前有N多基于CD格式的验证方法,在CD克隆软件流行后就销声匿迹了。
加密狗至少内部有不公开的逻辑电路,破解难度上会高许多。 --------------------编程问答-------------------- 支持楼上的,正在写一个软件,本来想用U盘做加密的,虽然和楼主思路不一样,不是用序列号,但是回想一下U盘克隆如何的容易就作罢了,正在考虑其他方式。 --------------------编程问答-------------------- U盘克隆能克隆他唯一的出厂序列号吗? --------------------编程问答-------------------- 加密狗很便宜,用起来也很方便,但程序代码本身的安全性也很重要,最后做个广告:本人承接打狗\破密码等软件破解项目.哈哈~~~ --------------------编程问答-------------------- 标记一下 --------------------编程问答-------------------- U 盘同样可以由于授权。例如在 U 盘上放一个数字证书。

注意,楼主这里的需求是权限鉴别,不是加密。

给你一个方案:
1 搜索机器上的移动盘,这样的代码在网上一搜一大把。
2 找到你存在盘上的数字证书。提取其中的公钥和数组签名,做验证(实际就是公钥解密),与证书信息比对。数字签名的算法可以用现成的 DLL 或 类模块,网上有许多免费的,可以下载。
3 如果找到了证书,且验证通过,则授权。 --------------------编程问答--------------------
Option Explicit

Private Sub Command1_Click()
'声明成注释里面的类型应先勾选“工程”-》“引用”里面的“Microsoft WMI Scripting VX.X Library”
On Error Resume Next
Dim sObjTxt As String, oWMINameSpace As Object 'SWbemServices
'Dim ObjSet As SWbemObjectSet, Obj As SWbemObjectEx
Dim ObjSet As Object, Obj As Object
Set oWMINameSpace = GetObject("winmgmts:"): Text1.Text = ""
Set ObjSet = oWMINameSpace.InstancesOf("Win32_USBControllerDevice")
For Each Obj In ObjSet
    sObjTxt = Obj.Dependent 'Obj.GetObjectText_
    If InStrRev(sObjTxt, "USBSTOR") Then
        Text1.Text = Text1.Text & sObjTxt & vbNewLine
    End If
Next
If Len(Text1.Text) = 0 Then MsgBox "你没有插入U盘吧?", vbExclamation, "错误"
End Sub


网上代码修改而来的~~~~~还不知道这个是不是U盘的序列号。。。。 --------------------编程问答--------------------

    Dim fso As New FileSystemObject
    Dim dSerialNumber As Long
    
    Select Case fso.GetDrive(fso.GetDriveName("D:")).DriveType
        Case 2
            If UCase(GetDriveBusType(fso.GetDriveName("D:"))) = "USB" Then
                dSerialNumber = fso.GetDrive(fso.GetDriveName("D:")).SerialNumber
            End If
    End Select

要查找所有所有U盘的话只要循环一下C到Z的所有盘符
GetDriveBusType函数是返回总线类型的,你可以跳过这个是用来查找USB硬盘的 --------------------编程问答-------------------- U盘序列号, 是可以伪造的. 
我的思路是这样的. 
这样的一个程序, HOOK了读取U盘序列号的API, 在发现程序试图读取U盘序列号的时候, 返回用户预先设定的序列号.
只是个想法, 期待高手实现. 若实现了, 请发小菜一份, 谢谢.
mail:pengzhile@126.com --------------------编程问答-------------------- 为什么不直接用usbkey呢,有整套安全方案的,如果你不用一个成熟的解决方案,几分钟就能被人破出来,别人才不管你什么序列号,直接jmp到正确的代码。
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,