ich möchte auch hier zeigen wie man ein HWID System in Visual Basic realisieren kann.
Erst mal eine kleine Info was für Informationen man auslesen kann und wie man das macht.
Um die folgenden Funktionen nutzen zu können muss man System.Management importieren dazu schreibt man folgendes in der erste Reihe das Programms:
Code:
Imports System.Management
Dies habe ich auch auf den 2 folgenden Bildern dargestellt:
Die ID des Prozessors, sie ist bei den selben CPU Modellen immer gleich könnte also doppelt vorkommen.
Code:
Private Function gethwid() As String 'by EvolutionClips.de
Dim cpuInfo As String = String.Empty
Dim mc As New ManagementClass("win32_processor")
Dim moc As ManagementObjectCollection = mc.GetInstances()
For Each mo As ManagementObject In moc
If cpuInfo = "" Then
cpuInfo = mo.Properties("processorID").Value.ToString()
Return cpuInfo
Exit For
End If
Next
End Function
Code:
Private Function GetMacAddress() As String 'by EvolutionClips.de
Dim mc As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
Dim moc As ManagementObjectCollection = mc.GetInstances()
For Each mo As ManagementObject In moc
If mo.Item("IPEnabled") Then
Return mo.Item("MacAddress").ToString()
End If
Next
End Function
Der Integer der in die Funktion mit einfließt ist die ID der Festplatte 0 entspricht der ersten Festplatte
Code:
Function GetHDDSerial(ByVal HDD_idx As Integer) As String
Dim searcher As New System.Management.ManagementObjectSearcher( _
"SELECT * FROM Win32_DiskDrive")
For Each wmi_HD As System.Management.ManagementObject In searcher.Get()
If wmi_HD.Item("Index") = HDD_idx Then
Return wmi_HD.Item("Signature").ToString
End If
Next wmi_HD
End Function
Code:
Imports System.Security.Cryptography, System.Text
Code:
Public Function MD5StringHash(ByVal strString As String) As String
Dim MD5 As New MD5CryptoServiceProvider
Dim Data As Byte()
Dim Result As Byte()
Dim Res As String = ""
Dim Tmp As String = ""
Data = Encoding.ASCII.GetBytes(strString)
Result = MD5.ComputeHash(Data)
For i As Integer = 0 To Result.Length - 1
Tmp = Hex(Result(i))
If Len(Tmp) = 1 Then Tmp = "0" & Tmp
Res += Tmp
Next
Return Res
End Function
Nun kommen wir zum eigentlichen Programm, alle Funktionen benötigen keine Admin rechte das heißt das Programm kann ohne Probleme gestartet werden.
Ich baue die Funktionen in das Form Load ein, da die IDs ja sowieso bei jedem Start benötigt werden, das Programm benötigt dann zwar länger zum Starten, man könnte es auch in einem BGW / Thread einbauen, aber für das Tutorial mache ich das so:
Code:
'HWID/MAC/HDDID System by EvolutionClips.de
Imports System.Management 'Für HWID, MAC und HDD-ID
Imports System.Security.Cryptography, System.Text 'Für die MD5 Funktion
Imports System.Text
Public Class Form1
'Variablen Festlegen
Dim cpuid As String = ""
Dim mac As String = ""
Dim hddid As String = ""
Dim hwid as String = ""
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
cpuid = gethwid()
mac = GetMacAddress()
hddid = GetHDDSerial(0)
End Sub
'Hier die anderen Funktionen, ich lasse sie aus Platzgründen mal weg.
....
End Class
(Dies ist ebenfalls im Load Event)
Code:
hwid = MD5StringHash(cpuid & mac & hddid & "byEvolutionClips.de")
Deshalb sollte man für jedes Programm einen anderen festgelegten Wert benutzen.
Die Werte(CPU-ID, Mac-Adresse, HDD-ID) kann natürlich auch anders anordnen.
Um nun die Abfragen an den Server zustellen benötigt man einen Webclient und dafür die System.Net Klasse, welche man ebenfalls mit
Code:
Imports System.Net
Nun kommen wir zur Abfragen ob diese HWID gültig ist, dafür benötigen wie einen Webserver der PHP und MySQL unterstützt und folgendes PHP-Script
(Man kann es auch ohne PHP und ohne MySQL machen die Methode finde ich aber nicht so gut
)
hwid.php
PHP Code:
<?php
$hwid = mysql_real_escape_string($_GET['hwid']); //mysql escape Zeichen hinzufügen gegen sql injection
//$hwid ist die HWID vom Programm
$connectionid = mysql_connect ("localhost", "user", "passwort"); //zur Datenbank verbinden
if (!mysql_select_db ("datenbankname", $connectionid)) //Datenbank auswählen und testen
{
die ("Keine Verbindung zur Datenbank");
}
$user = mysql_query("SELECT hwid FROM tabellenname WHERE hwid='".$hwid."' LIMIT 1") or die(mysql_error()); //wert auslesen, bei denen die HWID der entspricht die das Programm gesendet hat.
$verify = mysql_num_rows($user); //die Zeilen Zählen entweder 1 oder 0
if($verify > 0){ // Wenn es 1 oder mehr Zeilen sind die HWID wieder ausgeben
echo $hwid;
}else{
echo "NO"; //Wenn es 0 Zeilen sind eine NO zurückgeben.
}
?>
Die SQL-Tabelle benötigt eigentlich nur eine Spalte mit der HWID, man kann allerdings noch Spalten für einen Index und z.B. eine Beschreibung hinzufügen. SQL-File in der Beschreibung(tabellenname.sql.rar)
Nun kommen wir zu dem Code im Programm:
Code:
(Im Form Load unter der Zuweisung der HWID)
Try
Dim client As WebClient = New WebClient()
Dim reply As String = client.DownloadString("http://meinedomain.tld/hwid.php?hwid=" & hwid)
If reply = hwid Then 'wenn HWID richtig ist
Me.Hide() 'HWID Fenster verstecken
Programm.Show() 'Das Programm Fenster anzeigen
Else
MsgBox("HWID nicht gelistet!", MsgBoxStyle.Critical)
Application.Exit() 'Programm beenden
End If
Catch ex As Exception
MsgBox(ex.Message) 'wenn eine Fehler auftritt Fehler anzeigen und Programm beenden
Application.Exit()
End Try
In der Programm.vb kann dann euer Programm stehen, das von euch geschrieben wurde und durch die HWID geschutzt werden soll.
Hier noch einmal das komplette Programm:
Projekt auch im Anhang
Ich hoffe ich konnte euch weiterhelfen!
Bei Fragen einfach fragen
mfg EvolutionClips








