I don't take credits for any of the content, but I thought I would share it here, because it can be used for banning peoples. It will make them not able to login, even with ipchange. They would have to switch pc. In some cases it will work better than IPBan, but giving both will have a good effect of ban.
All credits goes to Aeonhack
Source:
Code:
Imports System.Text Imports System.Net.NetworkInformation Imports System.Management Class Machine Const PN As UShort = 4129 Private ID(3) As String Private Table(255) As UShort Private UTF8 As New UTF8Encoding Private _HardwareID As String ReadOnly Property HardwareID() As String Get Return _HardwareID End Get End Property Private _Seed As UShort Sub New(Optional ByVal seed As UShort = 0) Dim R As String = String.Format(" WHERE DeviceID='{0}:'", Environment.SystemDirectory(0)) ID(0) = Search("Win32_BaseBoard", "SerialNumber") ID(1) = Search("Win32_Processor", "ProcessorID") ID(2) = Search("Win32_LogicalDisk" & R, "VolumeSerialNumber") ID(3) = Search() _Seed = seed Generate() End Sub Private Function Search(ByVal element As String, ByVal item As String) As String element = String.Format("SELECT {0} FROM {1}", item, element) Dim T As New StringBuilder Dim U As New ManagementObjectSearcher(element) For Each O As ManagementObject In U.Get If Not O(item) Is Nothing Then T.Append(O(item)) Next U.Dispose() Return T.ToString End Function Private Function Search() As String For Each O As NetworkInterface In NetworkInterface.GetAllNetworkInterfaces If O.OperationalStatus = OperationalStatus.Up Then Return O.GetPhysicalAddress.ToString Next Return String.Empty End Function Private Function CRC16(ByVal data As Byte()) As UShort CRC16 = _Seed For I As Integer = 0 To data.Length - 1 CRC16 = CRC16 << 8 Xor Table(CRC16 >> 8 Xor data(I)) Next _Seed = CRC16 End Function Private Sub CreateTable() Dim V, T As UShort For I As UShort = 0 To 255 V = 0 T = I For U As Byte = 0 To 7 If ((V Xor T) And 1) <> 0 Then V = V >> 1 Xor PN Else V >>= 1 T >>= 1 Next Table(I) = V Next End Sub Private Sub Generate() CreateTable() Dim T As New List(Of Byte) For I As Byte = 0 To 3 T.AddRange(BitConverter.GetBytes(CRC16(UTF8.GetBytes(ID(I))))) Next _HardwareID = BitConverter.ToString(T.ToArray).Replace(Convert.ToChar(45), String.Empty) End Sub Function Check(ByVal id As String) As Boolean If Not id.Length = 16 Then Return False id = id.Replace(Convert.ToChar(45), String.Empty).ToUpper Dim M As Integer For I As Byte = 0 To 15 Step 4 If Not id.Substring(I, 4) = _HardwareID.Substring(I, 4) Then M += 1 Next If M > 1 Then Return False Else Return True End Function End Class
Code:
'We can create a new Machine instance 'with a seed so that the ID is unique to 'our application. 'The current seed is 1234. The range 'you can use is below. '0 Default - 65535 Maximum Dim T As New Machine(1234) 'This will return the machines ID. Dim ID As String = T.HardwareID
Code:
Dim T As New Machine(1234) 'Here we check if at least 3/4 of 'the components match. If T.Check(ID) Then 'We have a match, do something. End If