2016-01-24 1 views
2

Я хочу создать программу, которая генерирует одну и ту же строку каждый раз, и она должна быть разной на каждом ПК. Так что, как HWID. После того, как у меня есть строка, я отправляю ее в php-файл на удаленном узле, php обрабатывает его и сохраняет в базе данных.Сделать конкретный хэш в vb.net

В первом запуске он будет создавать новую строку в таблице, но после второго запуска он выберет строку, в которой POST-ed hash = hash в таблице, и она запретила - не запрещена функция. Поэтому, если я верну 0, компьютер не будет запрещен, поэтому программа начнет работать, если я верну 1 программу закрыть.

Это все сделано, моя проблема в том, что я генерирую hwid из процессора и отправляю его на php. Иногда процессор может быть одним и тем же на разных компьютерах. Так что, если я даю поддельные запрет, пользователи будут сердиться на меня ...

Вопрос заключается в том:
Как создать хэш, который будет всегда то же самое на компьютере, который запустить приложение, но отличается от каждый ПК?

Я знаю, что могу это сделать, если я храню специальный идентификатор на компьютере, например, в реестре, но если кто-то переустанавливает компьютер, он может снова использовать эту услугу. Если я создам hwid, потребуется больше времени, чтобы узнать, как получить доступ к службе снова.

+0

как это связано с php? Есть ли для него особый аспект? – Plutonix

+0

Я отправляю данные на url/handle.php, и если isset $ _POST ['hwdata'] Я делаю вещи, если не просто пустую страницу. – Vbnetguy

+1

Так как теперь вы можете найти ответы, пожалуйста, нажмите вверх по шкале рядом с asnwer, если это поможет – Plutonix

ответ

3

Я не думаю, что это действительно имеет какое-либо отношение к PHP, но полностью относится к шагам на стороне клиента.

Чтобы сделать то, что вам кажется, вы хотите использовать аппаратную подпись, состоящую из нескольких вещей, так что если один или два недоступны, результат остается в силе. Это будет использовать форму процедуры опроса WMI из ответа на Ваш last question:

Private Shared Function GetHardwareItemInfo(item As String, wmiclass As String) As String 
    Dim data As String = "" 
    Dim query As String = String.Format("Select {0} From {1}", item, wmiclass) 
    Using mbs As ManagementObjectSearcher = New ManagementObjectSearcher(query) 
     For Each mo As ManagementObject In mbs.Get 
      For Each pd As PropertyData In mo.Properties 
       ' should be only one 
       If String.Compare(pd.Name, item, StringComparison.InvariantCultureIgnoreCase) = 0 Then 
        ' value is object, test for Nothing 
        If pd.Value IsNot Nothing Then 
         data = pd.Value.ToString 
        End If 
        Exit For 
       End If 
      Next 
     Next 
    End Using 

    Return data 
End Function 

Это позволяет опрашивать для различных элементов в различных Wmi классов, использующих один и тот же код. Пример:

' get the serialnumber item from the baseboard class: 
answer = GetHardwareItemInfo("serialNumber", "Win32_BaseBoard") 

Для аппаратной подписи:

  • Получить и хранить информацию по каждому пункту
  • Объедините их в одну строку
  • Преобразование строки в массив байтов
  • использования crypto to hash массив байтов
  • преобразовать результат в строку base64

Есть и другие способы. Например, вы можете закодировать результат как Hex-строку, но приведенный выше код показывает.Во-первых, эти пространства имен вам нужно:

Imports System.Security.Cryptography 
Imports System.Management 
Imports System.Text 

Тогда процедура, чтобы получить материал, используя GetHardwareItemInfo метод выше:

' place to store bits of data 
Dim HWStuff As New List(Of String) 
Dim answer As String 

' get and store some info 
answer = GetHardwareItemInfo("serialNumber", "Win32_BaseBoard") 
HWStuff.Add(answer) 
answer = GetHardwareItemInfo("uuid", "win32_ComputerSystemProduct") 
HWStuff.Add(answer) 
answer = GetHardwareItemInfo("serialNumber", "Win32_OperatingSystem") 
HWStuff.Add(answer) 
'...etc 

' glue the bits together into one string 
Dim HWSig = String.Join("", HWStuff) 
Dim byteHash As Byte() 

' create crypto hasher 
Using hasher = New SHA1Managed() 
    ' convert the string to bytes 
    Dim tmpBytes = Encoding.UTF8.GetBytes(HWSig) 
    'hash the bytes 
    byteHash = hasher.ComputeHash(tmpBytes) 
End Using 
' encode as B64 string. 
Dim HWHash = Convert.ToBase64String(byteHash) 

Console.WriteLine(HWHash) 

Результат:

MUjeLeZtbTQ3Rc8zgFquBkOwFzA =

Вы можете склеить строку вместе как вы получите ответы. Но во время разработки он помогает видеть информацию кандидата до того, как вы решите ее использовать или нет.

Примечания:

  • Там много много вещей, чтобы выбрать из. См. WMI Win32 Classes.
  • Не все должно происходить из WMI. имя LocalMachine может быть хорошим (я не знаю контекста для этого), как и ключ активации Windows.
  • Другие криптомашины будут производить более длинные хеши
  • Это далеко не надежный.
  • Некоторые вещи могут быть подделаны - Win OS Серийный номер может быть изменен в реестре. Тебе не важно, правильны ли ценности, просто они не меняются.
  • Это не защита от копирования. Кто-то может вынюхивать токены, отправленные из законной системы (-ов), а затем исправить ваше приложение, чтобы отправить только этот токен.

if I store a special id...

Нет. Ничего не записываю. Его невозможно держать в секрете от пользователя на своем ПК. Не храните хеш - генерируйте его каждый раз. Если вы его запишите, проще скопировать это значение на другую машину.

I give fake ban, the users will be angry for me...

Поскольку это звучит, как вы работаете из черного списка, а не белый список, вы не должны беспокоиться о хэш не удается. Худшее, что произойдет, - это получить доступ к системе, которой должен быть отказано в доступе. Если вы хотите еще больше уменьшить вероятность совпадения, используйте SHA512Managed; он будет генерировать более длинный хэш.

Если пользователь меняет одну из частей, которые вы опросили, они все равно попадут - маловероятно, что хэш из двух систем будет соответствовать (один белый, один черный).

 Смежные вопросы

  • Нет связанных вопросов^_^