Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 01:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[VB2012] HWID (CPU-ID/MAC/HDD-ID) System Tutorial by EvolutionClips

Discussion on [VB2012] HWID (CPU-ID/MAC/HDD-ID) System Tutorial by EvolutionClips within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1

 
elite*gold: 732
The Black Market: 191/0/1
Join Date: Mar 2013
Posts: 1,669
Received Thanks: 403
[VB2012] HWID (CPU-ID/MAC/HDD-ID) System Tutorial by EvolutionClips

Hallo,

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
Zusätzlich muss man noch einen Verweiß hinzufügen, die mach man indem man die Eigenschaften des Projekts öffnet auf Verweise geht und nach System.Management sucht.
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
Die MAC-Adresse ist für jeden PC einzigartig können allerdings verändert werden z.b in einer Virtuelle Maschine.
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
Die Festplatten ID, sie ist einzigartig und verändert sich nur wenn man die Festplatte tauscht oder eine andere Primäre Festplatte benutzt.
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
Und zum Schluss noch eine Funktion um einen MD5 Hash zu erstellen, damit der User nicht sieht um was in dem Wert enthalten ist den er sieht. Diese Funktion benötigt noch 2 zusätzliche Verweise und zwar System.Security.Cryptography und System.Text:
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
Jetzt hat man alle Werte in Variablen gespeichert nun müssen wir dadraus noch eine einzigartige ID machen, das machen wir mit der MD5-Funktion:
(Dies ist ebenfalls im Load Event)
Code:
        hwid = MD5StringHash(cpuid & mac & hddid & "byEvolutionClips.de")
Hier wurde nun in die Variable hwid der MD5-Hash von der CPU-ID, der Mac-Adresse, der HDD-ID und von dem festgelegten Wert eingetragen, der festgelegten Wert sorgt dafür das zwei Programm nicht die selbe HWID haben können, weil wenn nur ein Zeichen für den Hash anders ist, sich der komplette Hash Wert verändert.
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
Importiert.

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.
    
}
?>
Dieses PHP Dokument muss dann hochgeladen werden z.b. http:// meinedomain.tld/hwid.php

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
Wenn die HWID nun auf dem Server mit PHP und MySQL gefunden wurde öffnet sich die programm.vb und form1.vb verschwindet, wenn die HWID nicht vorhanden ist wird HWID nicht gelistet! ausgegeben und das Programm beendet.

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
Attached Files
File Type: rar HWID-System.rar (14.0 KB, 56 views)
File Type: rar hwid.php.rar (597 Bytes, 36 views)
File Type: rar tabellenname.sql.rar (606 Bytes, 34 views)
EvolutionClip is offline  
Old 10/16/2013, 07:22   #2


 
elite*gold: 0
Join Date: Feb 2010
Posts: 7,220
Received Thanks: 6,758
Und wenn die Domain mal nicht erreichbar ist, so funktioniert das Programm nicht mehr :|
#SoNiice is offline  
Old 10/16/2013, 09:12   #3

 
elite*gold: 732
The Black Market: 191/0/1
Join Date: Mar 2013
Posts: 1,669
Received Thanks: 403
Quote:
Originally Posted by Hühnchenkopf View Post
Und wenn die Domain mal nicht erreichbar ist, so funktioniert das Programm nicht mehr :|
Ja, das stimmt, aber eine 99.99%ige uptime ist jetzt ja nicht mehr so schwierig zu bekommen und man kann ja auch noch einen alternativen server/domain hinzufügen
EvolutionClip is offline  
Old 10/16/2013, 09:18   #4
 
meak1's Avatar
 
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,126
Quote:
Originally Posted by Hühnchenkopf View Post
Und wenn die Domain mal nicht erreichbar ist, so funktioniert das Programm nicht mehr :|
Tja so soll es sein.

Sitze momentan auch an einem dergleichen...
Klappt auch alles, nur ist sowas halt noch leicht crackbar :/ ich wollte nen code direkt in .Php verschlüsseln lassen,
Send -> cryptet 'hallo' zum server -> server cryptet hallo mit daten die das tool/der bot benötigt -> sendet es zurück zum tool, dieses entschlüsselt den code und benutzt ihn. Dies ist nun auch crackbar weil man die decrypt funktion hat in dem tool - nun müsste man diese umschreiben - also was auf der .php passiert. Umso komplexer umso schwerer, nur kann ich kein .php und meine c++ funktion ist zu komplex für mich diese in .php umzuschreiben :/
meak1 is offline  
Old 10/16/2013, 16:44   #5

 
elite*gold: 732
The Black Market: 191/0/1
Join Date: Mar 2013
Posts: 1,669
Received Thanks: 403
Quote:
Originally Posted by meak1 View Post
Tja so soll es sein.

Sitze momentan auch an einem dergleichen...
Klappt auch alles, nur ist sowas halt noch leicht crackbar :/ ich wollte nen code direkt in .Php verschlüsseln lassen,
Send -> cryptet 'hallo' zum server -> server cryptet hallo mit daten die das tool/der bot benötigt -> sendet es zurück zum tool, dieses entschlüsselt den code und benutzt ihn. Dies ist nun auch crackbar weil man die decrypt funktion hat in dem tool - nun müsste man diese umschreiben - also was auf der .php passiert. Umso komplexer umso schwerer, nur kann ich kein .php und meine c++ funktion ist zu komplex für mich diese in .php umzuschreiben :/
Um die Sicherheit zu erhöhen könnte man den gehashten HWID wert bevor das Programm den Webrequest sendet mit einer verstecken variable hashen, die nur das Programm und der Server kennt, der Server hat die HWID schon mit dieser Variable beim eintragen gehasht und prüft dann die neue HWID, so kann der Endnutzer die Seite schwieriger nachbauen und per host-datei umleiten(IP verändern und auf einen anderen Webspace leiten) der dann nicht der Richtige wert auf der Website angezeigt wird.
EvolutionClip is offline  
Old 10/16/2013, 17:01   #6
 
Kimo.'s Avatar
 
elite*gold: 0
The Black Market: 195/0/0
Join Date: Feb 2013
Posts: 4,076
Received Thanks: 615
Ein Hash ist doch einweg.
Wenn der Server es wieder entcrypten soll, solltest du es verschlüsseln.
Kimo. is offline  
Old 10/16/2013, 17:17   #7
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
kannste machen was du willst, den login rauspatchen geht immer

trotzdem ist nen einfaches hwid system nicht schlecht um programme damit zu verkaufen
tolio is offline  
Old 10/16/2013, 17:32   #8

 
elite*gold: 732
The Black Market: 191/0/1
Join Date: Mar 2013
Posts: 1,669
Received Thanks: 403
Quote:
Originally Posted by Afrokimo View Post
Ein Hash ist doch einweg.
Wenn der Server es wieder entcrypten soll, solltest du es verschlüsseln.
Ich muss es ja nicht wieder entschlüsseln.

Quote:
Originally Posted by tolio View Post
kannste machen was du willst, den login rauspatchen geht immer

trotzdem ist nen einfaches hwid system nicht schlecht um programme damit zu verkaufen
ja es ist so gut wie immer möglich man kann es nur möglichst schwierig machen
EvolutionClip is offline  
Old 10/16/2013, 17:53   #9
 
meak1's Avatar
 
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,126
Quote:
Originally Posted by tolio View Post
kannste machen was du willst, den login rauspatchen geht immer

trotzdem ist nen einfaches hwid system nicht schlecht um programme damit zu verkaufen
bringt ja nichts, wenn die Packete auf dem server sind bzw die daten womit der bot nur läuft.

@Evo das meinte ich mit 'hallo' ich wollte nur nicht alles hier genau posten sonst hat wer anders es ja leichter ;P

(beispiel) Ich crypte die HWID+timer sende sie zum server, der verschlüsselt HWID+timer mit den daten die der bot brauch, zb. Packete...
sendet es zurück.

Wollte meine eigene C++ function benutzen, die ich damals aus Hackshield rausgenomm hab, die, die Packete von Hackshield crypted.
Nur diese in .php umzuschreiben wäre viel aufwand aber würde sich denke auch lohnen, umso schwerer hat es derjenige die function nachzubauen ;d

Ja hab Login schon geregelt, das man nur von einem PC bzw einer ip eingeloggt werden kann, loggen 2 ein wird der andere gekickt.

Ich würde auch mehrere verschlüsselungen nehmen, if blubb = 1 then crypt it with table1 if blubb = 2 then table2 etc... so müsste derjenige nochmehr reversen
meak1 is offline  
Old 10/16/2013, 18:53   #10

 
elite*gold: 732
The Black Market: 191/0/1
Join Date: Mar 2013
Posts: 1,669
Received Thanks: 403
Quote:
Originally Posted by meak1 View Post
bringt ja nichts, wenn die Packete auf dem server sind bzw die daten womit der bot nur läuft.

@Evo das meinte ich mit 'hallo' ich wollte nur nicht alles hier genau posten sonst hat wer anders es ja leichter ;P

(beispiel) Ich crypte die HWID+timer sende sie zum server, der verschlüsselt HWID+timer mit den daten die der bot brauch, zb. Packete...
sendet es zurück.

Wollte meine eigene C++ function benutzen, die ich damals aus Hackshield rausgenomm hab, die, die Packete von Hackshield crypted.
Nur diese in .php umzuschreiben wäre viel aufwand aber würde sich denke auch lohnen, umso schwerer hat es derjenige die function nachzubauen ;d

Ja hab Login schon geregelt, das man nur von einem PC bzw einer ip eingeloggt werden kann, loggen 2 ein wird der andere gekickt.

Ich würde auch mehrere verschlüsselungen nehmen, if blubb = 1 then crypt it with table1 if blubb = 2 then table2 etc... so müsste derjenige nochmehr reversen
Ja, das stimmt dann würde es noch sicherer werden, besonders das mit der Zeit, damit der Key den er dann abfragt nur eine bestimmte Zeit gültig ist, dann wird das mit dem Sniffen auch noch schwieriger, aber ich denke in der Form wie es hier ist ist es am einfachsten zu verstehen.

Das mit dem Login finde ich irgendwie nicht so wichtig, da das Programm ja nur auf einem PC ausgeführt werden kann und um das Programm dann zu beenden müsste man ja vom Server auf den Client zugreifen und dann muss man Ports offen halten und den Client andauernd die Seite neuladen lassen, das geht dann bei mehreren Clients ziemlich auf die Server Leistung.
EvolutionClip is offline  
Old 10/16/2013, 20:40   #11
 
meak1's Avatar
 
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,126
Jojo, wenn die auslastung später zu hoch ist, will ich mir dann einen größeren Server kaufen :/

Naja jez kein offtopic mehr^^, ganz nettes Topic allgemein
gibs kein c++ converter zu .php ;/? hab nie .php geprocct
meak1 is offline  
Reply

Tags
hwid, php, system, visual basic


Similar Threads Similar Threads
HWID-System
07/11/2013 - .NET Languages - 7 Replies
Hi, habe hier ein HWID-System; Imports System.IO Imports System.Management Public Class Form1 Dim cpuInfo As String
[VB2010] HWID System Tutorial
09/23/2012 - .NET Languages - 5 Replies
Suche ein Tutorial zum Coden bzw zum einfügen eines HWID Systems in mein Programm. Vielleicht kann's mir einer von euch erklären. Skype: edizediz88 Regards
HWID Generator & Dev-Tools für e*pvp's HWID System
01/28/2011 - Main - 0 Replies
Hier die Downloads passend zum News-Thread, da das Attachen von Daten an News-Threads nicht möglich ist ;) News-Thread: http://www.elitepvpers.com/forum/e-pvp-news-de/981 343-hwid-system-f-r-entwickler.html Credits für den 2. Generator gehen an Anfang! Lg, Ende!



All times are GMT +1. The time now is 01:40.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.