Page 1 sur 1
[R] Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 13:26
par Feonor
Bonjour.
Je suis actuellement sur l’élaboration d'un programme en base AutoIt ( un peu normale vus que je suis ici ^^).
J'aimerai limiter le programme a ne s’exécuter qu'avec un système de licence.
Je vous vois venir ^^ "oui il faut regarder l'aide et faire une recherche, les système de licence on déjà été aborder"
J'en ai peut être oublier cependant j'ai lut ces article est obtenue beaucoup d'information utile concernant les différents moyen de créer une licence, je remercie mes prédécesseur d’ailleurs ^^
Cependant mon problème est :
Ne souhaitant pas utiliser de dongle ( souvent payant), j'aimerai tester le numéro de série constructeur d'une clé usb,
pas le numéro que Windows lui attribue(car je pense qu'on doit pouvoir passer au travers, (peut être pas si on ne peux passer au travers j'utiliserai alors cette méthode ^^)).
en gros celui ci:
Mon programme est déjà élaborer concernant la gestion de la clé il me faut juste réussir a lire cette ID unique.
Auriez vous une idée ou un début de fonction permettant la lecture de cette ID?
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 14:21
par mikell
Pas le temps là, mais je chercherais du côté de WMI DiskDrive
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 14:24
par Feonor
Ok je m'y attelle je tiendrais informer de mes trouvailles ^^
*sort sa pelle, sa pioche et sa lampe est s'enfonce dans les méandre d'internet*
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 14:28
par ZDS
Bonjour Feonor,
Pour lire le numéro de série d'une clef USB, rien de plus simple : DriveGetSerial("X:")
Code : Tout sélectionner
Local $serial = DriveGetSerial("U:")
If Not @error Then MsgBox(0, "", "#: " & $serial)
A bientôt !
PS: Même si il s'agit d'un autre identifiant ou même d'un numéro non récupérable physiquement (genre sur l'étiquette ou l'emballage), cela reste un identifiant unique permettant sans doute pas mal de chose, comme de l'encryption ou de l'autologin. Sinon, la solution de Mikell te permettra sans doute de faire quelque chose plus en rapport avec ta demande
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 14:34
par Feonor
Oki ^^ donc c est quand meme un identifiant Unique ce serial obtenue via DriveGetSerial()?
Je vais garder cette solution et si un jours je peux upgrader les protections je repasserai par le Win32_DiskDrive
Merci beaucoup ^^
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 14:54
par ZDS
Pas des plus propres, mais voici un semblant de départ sur une solution utilisant Win32_DiskDrive et Win32_PhysicalMedia :
► Afficher le texteAlternative
Code : Tout sélectionner
#include <Array.au3>
$WMI = ObjGet("winmgmts:{impersonationLevel=Impersonate}!//.")
Dim $result[1][4] = [[0, "Model", "InterfaceType", "SerialNumber"]], $i = 0
$devices = $WMI.InstancesOf("Win32_DiskDrive")
For $device In $devices
$result[0][0] = $result[0][0] + 1
ReDim $result[$result[0][0]+1][4]
$result[$result[0][0]][1] = $device.Model
$result[$result[0][0]][2] = $device.InterfaceType
Next
$devices = $WMI.InstancesOf("Win32_PhysicalMedia")
For $device In $devices
$i = $i + 1
If $i > $result[0][0] Then ExitLoop
$result[$i][3] = $device.SerialNumber
Next
_ArrayDisplay($result, "Class List")
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 15:05
par Feonor
je vais regarder tous cela ce soir en tous cas merci pour votre aide ^^
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 16:12
par mikell
@ZDS
Pour une clé usb 'serialnumber' peut ne pas marcher, dans ce cas essayer 'PNPDeviceID'
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 16:21
par Feonor
ayant un peux de temps au travail ( je rassure c est rare ^^ qu'on me traite pas de tourist de suite ^^)
j'arrive a obtenir un numero de serie via
Code : Tout sélectionner
$devices = $WMI.InstancesOf("Win32_PhysicalMedia")
For $device In $devices
$i = $i + 1
If $i > $result[0][0] Then ExitLoop
$result[$i][3] = $device.SerialNumber
Next
Pour un disque dure USB. C est un bon point
Je regarde actuellement les possibilités de la classe "Win32_DiskDrive" et d'autre pour faire un ti coktail et mettre un système de licence à plat.
Je pense pouvoir vous montrer cela ce soir pour que vous puissiez me donnez votre avis et dire les Point fort et les Point à revoir ^^
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 17:48
par Feonor
Alors voila j'ai penser a faire un logiciel permettant de creer une "licence" crypter
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include <Crypt.au3>
#include <MsgBoxConstants.au3>
$WMI = ObjGet("winmgmts:{impersonationLevel=Impersonate}!//.")
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
Global $GUI_LICENCE_CREATE = GUICreate("Licence Create", 341, 224, 449, 141)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUI_LICENCE_CREATEClose")
Global $Label1 = GUICtrlCreateLabel("DESCRIPTION", 8, 40, 77, 17)
Global $Label2 = GUICtrlCreateLabel("NAME", 50, 65, 35, 17)
Global $Label3 = GUICtrlCreateLabel("SERIAL", 43, 95, 42, 17)
Global $Label4 = GUICtrlCreateLabel("DISQUE SELECTIONNER", 8, 8, 150, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
Global $dsk_description = GUICtrlCreateLabel("dsk_description", 112, 40, 250, 17)
Global $dsk_name = GUICtrlCreateLabel("dsk_name", 112, 65, 250, 17)
Global $dsk_serial = GUICtrlCreateLabel("dsk_serial", 112, 95, 250, 17)
Global $Label5 = GUICtrlCreateLabel("LICENCE GENERER", 8, 130, 105, 17)
Global $Licence_Key = GUICtrlCreateInput("Licence_Key", 8, 152, 321, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
Global $Generation = GUICtrlCreateButton("Generation", 120, 184, 75, 25)
GUICtrlSetOnEvent(-1, "GenerationClick")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func GenerationClick()
Local $result[1][5] = [[0, "Model", "InterfaceType"]], $i = 0,$select = 0
;obtention des description des different DISQUES
$devices = $WMI.InstancesOf("Win32_DiskDrive")
For $device In $devices
$result[0][0] = $result[0][0] + 1
ReDim $result[$result[0][0]+1][3]
$result[$result[0][0]][1] = $device.Model
$result[$result[0][0]][2] = $device.InterfaceType
Next
;choix du disque a utiliser en tant que LICENCE_KEY
_ArrayDisplay($result, "Class List")
$select = 0
while ($select <1 Or $select>$result[0][0])
$select = InputBox("SELECTION","Bonjour," & @CRLF & "indiquez l'index du disque que vous souhaitez utilisez comme licence.")
WEnd
;Recuperation des information concernant la IDSERIAL
$devices = $WMI.InstancesOf("Win32_PhysicalMedia")
For $device In $devices
$i = $i + 1
If $i > $result[0][0] Then
If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(4144,"Licence Create","Désolé, l'obtention du numero de serie de ce peripherique à échoué.",5)
exit
EndIf
if $select = $i then
$Serialrecuperer = $device.SerialNumber
ExitLoop
endif
Next
;descritpion
GUICtrlSetData($dsk_description,$result[$select][1])
;name
GUICtrlSetData($dsk_name,$result[$select][2])
;SERIAL
GUICtrlSetData($dsk_serial,$Serialrecuperer)
;LICENCEKEY
GUICtrlSetData($Licence_Key,StringEncrypt(True, $Serialrecuperer, 'PASSWORDunPeuNaze2293'))
EndFunc
Func GUI_LICENCE_CREATEClose()
exit
EndFunc
Func StringEncrypt($bEncrypt, $sData, $sPassword)
_Crypt_Startup() ; Start the Crypt library.
Local $sReturn = ''
If $bEncrypt Then ; If the flag is set to True then encrypt, otherwise decrypt.
$sReturn = _Crypt_EncryptData($sData, $sPassword, $CALG_RC4)
Else
$sReturn = BinaryToString(_Crypt_DecryptData($sData, $sPassword, $CALG_RC4))
EndIf
_Crypt_Shutdown() ; Shutdown the Crypt library.
Return $sReturn
EndFunc ;==>StringEncrypt
la LICENCE GENERER est copier est ecrite dans le script du logiciel. ensuite dans le logiciel toute les 5 minutes je test tous les disque et les compare a la cle en cryptant leur serial.
Si c 'est egale parfais
Sinon... VLAN coup de hache dans les dents^^
Alors ma questions deja vous en pensez quoi et deuxièmement pensez vous que c 'est reelement utile ou vous auriez fais autrement?
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : mer. 24 juin 2015 22:42
par jguinch
WMI, c'est bien quand ça marche.
Tu disques de tomber sur le cas où WMI ne sera pas activé et là, tu ne pourras pas récupérer le numéro de série de la clé USB = utilisateur pas content = pour toi le coup de hache dans les dents.
Alors ma questions deja vous en pensez quoi et deuxièmement pensez vous que c 'est reelement utile ou vous auriez fais autrement?
Ce type de protection n'a rien de sécurisé du moment que l'utilisateur peut décompiler le script... C'est le même débat que la protection par mot de passe.
J'aurais fait autrement : pas de sécurité, mais un message du style "Merci de ne pas copier ce programme", et/ou "Faites un don"
Re: [..]Obtenir le Numero de serie D'un HardWare ( USB )
Posté : jeu. 25 juin 2015 08:17
par Feonor
J'aurais fait autrement : pas de sécurité, mais un message du style "Merci de ne pas copier ce programme", et/ou "Faites un don"
Le probleme c 'est que je suis dans un bureau de devellopement et que dans l'industrie les dons et les "ne pas copiez" bha les gens deviennent vite aveugle et ne vois plus le message mdr
mais je vais tenter d'ameliorer le systeme merci de tes infos ^^
[R] Obtenir le Numero de serie D'un HardWare ( USB )
Posté : jeu. 25 juin 2015 08:29
par Feonor
Je vous remercie pour votre aide et vos appréciation ^^
c'est résolut ^^