Machine ID genereren

Status
Niet open voor verdere reacties.

Stinuz

Terugkerende gebruiker
Lid geworden
14 jun 2003
Berichten
1.245
Hey, ik wil graag mijn gemaakte programma beschermen tegen kopieergedrag. Dit door de gebruiker zijn verstrekte serial-key vast te maken aan zijn Machine ID. Maar ik weet niet hoe ik een machine ID moet genereren. Als ik het goed begrijp wordt bepaalde hardware-informatie opgevraagd die uniek is voor elke gebruiker (bijvoorbeeld MAC adres, bios-versie, harddisk serial etc.). En hier wordt uiteindelijk een code uit geperst.

Weet iemand waar ik een code kan vinden die dit alles doet? Op het internet vind ik alleen maar outdated code die niet in VB2008 werkt :(

Ter verduidelijking (en offtopic), het is dus niet zo dat de gebruiker zijn code permanent vastmaakt aan zijn huidige machine ID, waarna hij dus een nieuwe code aan zou moeten schaffen bij het switchen van hardware, het zorgt er alleen voor dat het programma niet op meerdere computers tegelijk uitgevoerd kan worden. :D
 
Laatst bewerkt:
Hey, ik wil graag mijn gemaakte programma beschermen tegen kopieergedrag. Dit door de gebruiker zijn verstrekte serial-key vast te maken aan zijn Machine ID. Maar ik weet niet hoe ik een machine ID moet genereren. Als ik het goed begrijp wordt bepaalde hardware-informatie opgevraagd die uniek is voor elke gebruiker (bijvoorbeeld MAC adres, bios-versie, harddisk serial etc.). En hier wordt uiteindelijk een code uit geperst.

Weet iemand waar ik een code kan vinden die dit alles doet? Op het internet vind ik alleen maar outdated code die niet in VB2008 werkt :(
[/QUOTE]

Je noemt zelf al een aantal zaken waarmee je zo'n ID kunt genereren. Als je die zaken via Google uitzoekt hoef je alleen nog maar een algoritme te verzinnen om van deze data een key te maken.
 
Ik heb wat voorbeelden van microsoft gevonden, en dit werkt :D

Code:
' Copyright (c) Microsoft Corporation. All rights reserved.
Imports System.Management

Public Class Bios
    Private Sub btnGetBios_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetBios.Click
        ' This is to show how to use the SelectQuery object in the place of a SELECT 
        ' statement.
        Dim query As New SelectQuery("Win32_bios")

        'ManagementObjectSearcher retrieves a collection of WMI objects based on 
        ' the query.
        Dim search As New ManagementObjectSearcher(query)

        ' Display each entry for Win32_bios
        Dim info As ManagementObject
        For Each info In search.Get()
            txtBios.Text = "Bios version: " & info("version").ToString() & vbCrLf
        Next
    End Sub
End Class

Bij mij komt er het volgende uit:
Code:
_ASUS_ - 20091120

Maar nu zoek ik dus nog iets waarmee ik deze letters en tekens om kan zetten in cijfers. Ik heb al op google etc. gezocht maar echt alles dat ik vind dat er ook maar op lijkt is out-dated (voor VB6 meestal). Dus als iemand me hiermee kan helpen :)

EDIT:
Ik heb dit gevonden en daar heb ik het volgende uit gekregen:
Code:
    Private Sub btnStrToInt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStrToInt.Click
        Dim value As String
        Dim fromBase As Integer
        Dim returnValue As Integer

        value = "henk"

        returnValue = Convert.ToInt32(value, fromBase)
        MsgBox(returnValue, vbOKOnly, "Test")
    End Sub
Maar nu weet ik niet hoe ik sowieso niet hoe ik het volgende moet doen:
henk omzetten in 3749
dus
h = 3
e = 7
n = 4
k = 9
En ik krijg een error,"Invalid Base"
 
Laatst bewerkt:
Heb het vele malen doorgenomen maar ik wordt er niet wijs uit.. ben redelijk nieuw met VB dus dit zo'n uitgebreid script is net chinees voor me :(
 
Ik heb inmiddels wel iets (tijdelijks) bedacht. Ik vraag de bios versie en systeem info op, vraag het aantal bytes waaruit deze tekst bestaat op. Doe dit aantal bytes keer een getal dat niet veranderd, en dit is uiteindelijk de Machine ID. :D

Als ik dit uitbreid door ook de operating system informatie, en processor informatie toe te voegen, heb ik een Machine ID die toch uniek zou moeten zijn voor de meeste mensen.

Maar een ding zit me een beetje dwars, ik hebd e volgende functie gemaakt om de systeem info op te vragen:
Code:
    ' Find system information
    Public Function systeminfo() As String
        Dim search As New ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem")
        Dim info As ManagementObject
        For Each info In search.Get()
            systeminfo = "" & info("manufacturer").ToString() & info("model").ToString() & info("systemtype").ToString() & _
            info("totalphysicalmemory").ToString()
        Next

    End Function

En doe een soortgelijk iets voor de biosversie, deze voeg ik vervolgens samen op de volgende manier
Code:
systembiosinfo = biosversion() + systeminfo()
En hier uit bereken ik vervolgens het aantal bytes waaruit de tekst bestaat. Maar nu krijg ik bij zowel de bios, als de systeeminfo functie de volgende waarschuwing:
Code:
Function 'biosversion' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.

Wat houd dit in? Heb ik iets verkeerds gedaan?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan