Leggere il seriale di una chiave usb

mercoledì 22 ottobre 2008 - 12.04

bluland Profilo | Guru

Salve,

Ho un software scritto in vb.net 2.0 con db access,
che i clienti usano sulla chiavetta usb, per un problema di protezione vorrei leggere il seriale della chiavetta e quindi memorizzarlo.
In tal modo se dovessero copiarlo su un altra chiavetta (di amici), il sw non dovrebbe funzionare.

Idee come recuperare questa informazione, o se avete altre idee sulla protezione?

Saluti
--------------------
Vincenzo PESANTE
System Engineer

alexmed Profilo | Guru

Ciao
prova a guardare qui

http://home.hot.rr.com/graye/Articles/USB_SerialNumbers.htm

Ciao

bluland Profilo | Guru

Grazie mi e' stato utile.

Ciao
--------------------
Vincenzo PESANTE
System Engineer

Lanello Profilo | Senior Member

bell'idea per proteggere i propri sw ;) non ci avevo mai pensato!

grande alex per il link di riferimento!

ps: e se la chiavetta si rompe!?!
----------------------------------------------------------------------
http://www.flashinlabs.biz o .com o .net o .it fate voi :P

DomA Profilo | Expert

Ciao alex,
anch'io ho lo stesso problema. Il link però non funziona più (Page Not Found) potresti reinderizzarmi?
Grazie
Domenico

alexmed Profilo | Guru

Ciao
Purtroppo non trovo il file txt che mi ero salvato

Però ho trovato questo

http://www.emmet-gray.com/Articles/USB_SerialNumbers.htm

in fondo alla pagina c'è il download del progetto

Ho controllato, dopo aver smontato un paio di chiavette, nel registro e sembra funzionare.
Ciao
alexmed

DomA Profilo | Expert

Grazie dell'aiuto.
Sei un grande.
Ciao

Domenico

mdnet Profilo | Newbie

Ciao ragazzi, ho letto questa discussione molto interessante anche per me, ma purtroppo il link non è più attivo, qualcuno di voi sa indirizzarmi ?

Grazie

Lanello Profilo | Senior Member

il secondo link nella discussione funziona

http://www.emmet-gray.com/Articles/USB_SerialNumbers.html

ciao!
----------------------------------------------------------------------
IT Specialist: http://www.flashinlabs.biz
Apple Specialist: http://www.riparazione-iphone.it

mdnet Profilo | Newbie

Ecco cosa non funzionava manca una L htmL GRAZIE

mdnet Profilo | Newbie

Grazie infinite Lanello, ho provato il codice, ed effettivamente won WMI mi restituisce il numero di serie della chiavetta, SPETTACOLARE !!!!!

Oso a chiedere un aiuto, ma come posso fare per fare la scansione di tutte le chiavette usb collegate al pc e quando trova quella con il numero che io ho inserito in un textbox mi restituisce un msgbox ?

Grazie infinite.

Lanello Profilo | Senior Member

Figurati, il merito non è il mio, comunque, senza nemmeno stare a guardare il codice, ti dico che nel ciclo che ti cerca i seriali di tutte le chiavette devi mettere un if (seriale = textbox) e a quel punto mettere il messagebox

----------------------------------------------------------------------
IT Specialist: http://www.flashinlabs.biz
Apple Specialist: http://www.riparazione-iphone.it

mdnet Profilo | Newbie

Nell'evento load del form c'è questo

Private Sub fmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Drive As IO.DriveInfo

' fill the combo box with the available drive letters
For Each Drive In My.Computer.FileSystem.Drives
If Drive.DriveType = IO.DriveType.Removable Or Drive.DriveType = IO.DriveType.Fixed Then
cbxDriveLetters.Items.Add(Drive.Name.TrimEnd("\"c))
End If
Next

End Sub


e poi nel bottone


Dim usb As New USB_Serial
Dim ans As String

Try
ans = usb.GetSerialNumber(cbxDriveLetters.Text)
MsgBox(ans)
Catch ex As Exception
MsgBox("Ooops, something went wrong" & vbCr & ex.Message & vbCr & ex.StackTrace, MsgBoxStyle.Exclamation, "Error")
If Not IsNothing(ex.InnerException) Then
MsgBox(ex.InnerException.Message & vbCr & ex.InnerException.StackTrace, MsgBoxStyle.Exclamation, "Error")
End If
End Try

Io non vorrei che scrivesse le unità sul combo ma che mi facesse una scansione automatica di tutte le unità.

Lanello Profilo | Senior Member


con questo codice lui fa il "giro" di tutti i dischi che hai nel pc

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

a questo punto invece che metterlo nel combo prendi il seriale e controlli se è quello nel tuo textbox

Dim ans As String ans = usb.GetSerialNumber(cbxDriveLetters.Text) if ans = valore_del_tuo_textbox then msgbox("TROVATA!") end if end if next

in questo modo lui con il FOR fa il giro dei dischi nel pc, con l'IF controlla se sono dischi removibili o fissi, per quelli che soddisfano il controllo ne estrae il seriale e con il secondo IF controlli se è il seriale che hai messo nel textbox, a quel punto fai il messagebox per avvertire che hai trovato la chiavetta giusta.

tieni presente che non uso vb da qualche anno, mi son dato al c# e che non ho avuto il tempo di provare il codice, dovrebbe funzionare, ma se ti trovi in difficoltà fammi sapere.
----------------------------------------------------------------------
IT Specialist: http://www.flashinlabs.biz
Apple Specialist: http://www.riparazione-iphone.it

mdnet Profilo | Newbie

Con questo codice funzione ma se tolgo la chiave usb io vorrei che si bloccasse invece si apre senza problemi, sostanzialmente la procedura funziona solo se trova una chiave usb altrimenti parte senza problemi

Dim Drive As IO.DriveInfo Dim ChiaveUSB As String Dim usb As New USB_Serial2 Dim ans As String For Each Drive In My.Computer.FileSystem.Drives If Drive.DriveType = IO.DriveType.Removable Then ChiaveUSB = (Drive.Name.TrimEnd("\"c)) Try ans = usb.GetSerialNumber(ChiaveUSB) If ans = "" Then End End If If ChiaveUSB <> "" And ans = "123456789" Then MsgBox("TROVATA !!") Else MsgBox("Chiave di protezione non trovata.") End End If Catch ex As Exception MsgBox("Chiave di protezione non trovataaaaaa.") End Try End If Next

mdnet Profilo | Newbie

Ho fatto mille prove ma purtroppo se tolgo la chiavetta usb il programma parte senza alcun problema, quando invece NON dovrebbe partire.

Grazie

Lanello Profilo | Senior Member

Ciao,

vedi la logica che hai usato nel messaggio precedente per fare due prove può andare bene, ma se vuoi realmente controllare che ci sia la chiave prima di far partire l'applicazione ti consiglio a inizio programma di impostarti una variabile Boolean a false e SOLO se nei vari loop ed if trovi al chiavetta che vuoi la setti a true, alla fine dei vari cicli, se la variabile è ancora false allora fai l'END dell'applicazione.

quindi...

Inizio programma variabile xxx = false loop che cerca la chiavetta \-> se trovo la chiavetta xxx=true if xxx=false -> END

mdnet Profilo | Newbie

Il problema permane, se tolgo la chiave il software si avvia ugualmente. Bhoooooo

Grazie

Lanello Profilo | Senior Member

postaci il progetto che ti diamo una mano :D
----------------------------------------------------------------------
IT Specialist: http://www.flashinlabs.biz
Apple Specialist: http://www.riparazione-iphone.it

mdnet Profilo | Newbie

Dim Drive As IO.DriveInfo Dim ChiaveUSB As String Dim usb As New USB_Serial2 Dim ans As String For Each Drive In My.Computer.FileSystem.Drives If Drive.DriveType = IO.DriveType.Removable Then ChiaveUSB = (Drive.Name.TrimEnd("\"c)) Try ans = usb.GetSerialNumber(ChiaveUSB) If ChiaveUSB <> "" And ans = "1234567890" Then MsgBox("TROVATA !!") Else MsgBox("Chiave non trovata.") End End If Catch ex As Exception MsgBox("Chiave non trovata.") End End Try End If Next


Magari può essere perchè il sistema operativo che utilizzo è Windows 8.1 ?

Grazie

mdnet Profilo | Newbie

Finalmente funziona tutto e questo grazie anche ai vostri consigli.

Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5