Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    [VB.NET] Legare esecuzione prog a chiavetta

    Ciao a tutti,
    Ho una particolare richiesta a cui proprio non so come poter fare e confido nel vostro aiuto.
    Premetto che non sono una massima con vb.net e scabocchio qualche riga di codice..

    Ho un piccolo softwarino che gira su una chiavetta usb e la richiesta sarebbe che questo applicativo non debba essere eseguito al di fuori della chiavetta... come posso raggiungere un risultato del genere???

    Grazie e ciao a tutti....
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non puoi ... e comunque il tuo non è un problema di programmazione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Ma neanche una gabola, del tipo all'esecuzione del programma verificare che sia un dipositivo mobile (Non so se è possibile vado a logica) e che il dispositivo si chiamato in un determinato modo o altre soluzioni del genere...

    Ovvio che in questi casi (Qual ora fossero possibili) verrebbero elusi facendo una immagine della chiavetta...

    Non mi smontare proprio cosi
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non puoi ... fra l'altro, il programma è scritto in VB.NET? Quindi decompilabile ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Qualsiasi software è decompilabile, quindi non c'è protezione che tenga. Tuttavia si tratta di rendere le cose un po' difficili per gli utenti che non hanno competenze da hacker, cioè la maggior parte.

    Leggendo la tua richiesta ho subito pensato che si potrebbe leggere il numero seriale della chiavetta e confrontarlo con il numero seriale annegato nel tuo software.

    Il codice che ti riporto qui sotto fa uso di WMI ed estrae il numero seriale dell'unità sulla quale è in esecuzione il software. Per un harddisk si usa normalmente la proprietà "Win32_DiskDrive\SerialNumber", mentre per le chiavette USB tale proprietà risulta vuota ed è necessario leggere "Win32_DiskDrive\PNPDeviceID".

    codice:
    Imports System.Management
    Imports System.Text.RegularExpressions
    
    Public Class Form1
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim scope As ManagementScope
            Dim query As ObjectQuery
            Dim searcher As ManagementObjectSearcher
            Dim queryCollection As ManagementObjectCollection
    
            'imposta lo scope sulla macchina locale
            scope = New ManagementScope("\\" & Environment.MachineName & "\root\cimv2")
    
            'determina il volume che contiene l'eseguibile
            Dim logical As String = IO.Path.GetPathRoot(Application.ExecutablePath).First
            'logical = "F"
    
            'determina l'unità fisica che contiene il volume
            Dim phisical As String = ""
            query = New ObjectQuery("SELECT * FROM Win32_LogicalDiskToPartition")
            searcher = New ManagementObjectSearcher(scope, query)
            queryCollection = searcher.Get()
            For Each manObj In queryCollection
                Dim matchlogical As Match = Regex.Match(manObj.GetPropertyValue("Dependent").ToString,
                                                  "^\\\\" & Environment.MachineName & "\\root\\cimv2:Win32_LogicalDisk.DeviceID=""(?<logical>[A-Z]):""")
                If matchlogical.Groups("logical").Value = logical Then
                    Dim matchphisical As Match = Regex.Match(manObj.GetPropertyValue("Antecedent").ToString,
                                                      "^\\\\" & Environment.MachineName & "\\root\\cimv2:Win32_DiskPartition.DeviceID=""Disk #(?<phisical>\d)")
                    phisical = matchphisical.Groups("phisical").Value
                    Exit For
                End If
            Next
    
            'determina il numero seriale dell'unità fisica
            Dim hdserial As String = ""
            query = New ObjectQuery("SELECT * FROM Win32_DiskDrive")
            searcher = New ManagementObjectSearcher(scope, query)
            queryCollection = searcher.Get()
            For Each manObj In queryCollection
                Dim matchtag As Match = Regex.Match(manObj.GetPropertyValue("DeviceID").ToString,
                                                  "^\\\\.\\PHYSICALDRIVE(?<phisical>\d)")
                If matchtag.Groups("phisical").Value = phisical Then
                    hdserial = manObj.GetPropertyValue("PNPDeviceID").ToString
                    Exit For
                End If
            Next
    
            'output
            Dim output As String = String.Format("logical = {0}" & vbCrLf &
                                                 "phisical = {1}" & vbCrLf &
                                                 "hdserial = {2}", logical, phisical, hdserial)
            MsgBox(output)
        End Sub
    End Class
    Offuscando opportunamente il codice dovresti ottenere un buon risultato.
    Chi non cerca trova.

  6. #6
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Grazie mille tas era proprio quello che mi serviva...
    Infatti quello che volevo raggiungere era un pagliativo per accontentare il cliente e non per raggiungere un livello di protezione inpenetrabile anche perche non ne ho certo le competenze..
    Che mestiere difficile.....essere da soli ancora di più

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E' sicuramente un palliativo e tutto dipende da quanto possa essere "interessato" chi vuole superare l'ostacolo.

    In realtà mi sembra anche controproducente perché offre al cliente una "falsa sicurezza" e una grande delusione (anche nei tuoi confronti) quando vedrà il programma "aperto" in pochi minuti.

    Ovviamente ciò non succederà se non c'è interesse, ma se non c'è interesse non serve neanche una "protezione".

    In ogni caso, comprendo la tua posizione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Originariamente inviato da oregon

    In ogni caso, comprendo la tua posizione ...
    Ho già informato il cliente durante l'incontro della difficoltà nel produrre una protezione del genere (il software originario era scritto addirittura in flash e offriva una protezione analoga), ma ho scoperto che creando l'immagine della chiavetta il software era tranquillamente utilizzabile.... con questa procedura almeno si fa un passo avanti anche se è sempre un po inutile..

    Ti ringrazio per la tu ultima frase
    Che mestiere difficile.....essere da soli ancora di più

  9. #9
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Ciao tas,
    Stavo inziando a integrare la routine che mi hai gentilmente postato ma non riesce a recuperare le classi
    Errore sull dichiarazione delle variabili
    codice:
            Dim scope As ManagementScope
            Dim query As ObjectQuery
            Dim searcher As ManagementObjectSearcher
            Dim queryCollection As ManagementObjectCollection
    Non riesco a capire il perchè.

    P.S Ho importato i seguenti namespace
    codice:
    Imports System.Management
    Imports System.Text.RegularExpressions
    La versione con la quale ho generato l'applicatione era inizialmente net4 client profile e ho provato anche a convertirla in net 4 ma nulla da fare.....
    Che mestiere difficile.....essere da soli ancora di più

  10. #10
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Trovata la soluzione, bisogna obligatoriamente aggiungerla nelle reference....
    Che mestiere difficile.....essere da soli ancora di più

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.