Привязка к железу

  • Для просмотра чата и остального функционала вам нужно авторизоваться или пройти регистрацию!

RChesteR

V.I.P пользователь
Автор темы
9 Сен 2012
18
12
6
Всем привет, решил набросать небольшой мануал для новичков по реализации банальной привязки ПО к железу компьютера. Реализовывать будем на VB.NET. Так же нам потребуется сервер с поддержкой PHP и MySQL, для тестов на локальной машине подойдет Denwer, именно его я и использовал. Думаю с его установкой и настройкой вы справитесь сами)

В случае реального использования данных наработок рекомендуется:

Для сервера обязательное использование SSL.
Передача данных только POST методом
Приложение естественно необходимо пропускать через обфускатор, при этом шифровать все строки.

Перед началом программирования составим небольшой алгоритм действий.

Алгоритм для локального приложения:

Генерируем случайным образом ID нашего приложения (Для каждой сборки свой уникальный ID)
Собираем данные о железе компьютера, комбинируем все данные и шифруем алгоритмом MD5
Посылаем запрос на сервер с ID нашего приложения, в случае если ID не зарегистрирован в базе, добавляем строку в базу данных - информацию о железе, и другой информации (IP к примеру)
В случае если ID приложения находится в базе, передаем данные о железе на сервер, и сверяем с данными из базы (не забываем про MD5), если данные совпадают, разрешаем работу приложения, иначе в блэк лист)

Алгоритм для сервера:

Все просто, принимаем данные от пользователя, и сверяем их с данными из MySQL базы. Все в основном описано в первом алгоритме :)

Кодировать мы начнем с сервера :)

Для начала создадим новую MySQL базу данных, и импортируем для создания таблицы туда следующий запрос:

Код:
CREATE TABLE ``.`data` (
`ID` INT NOT NULL ,
`IP` TEXT NOT NULL ,
`Text` TEXT NOT NULL
) ENGINE = MYISAM ;

"" - заменяем на свое.

Далее создадим index.php, откроем его любым текстовым редактором и начнем понемногу писать (код максимально возможно прокомментирован):
Код:
По сути серверная часть закончена, можно заливать данный файл на хостинг, и настраивать базу данных :)

Ну, а теперь перейдем к локальному приложению, как уже наверное стало ясно, передавать данные мы будем GET методом (Не самое лучшее решение, но для обучающих целей самое то ;))

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

Код:
Public Function GetMACAddress() As String
Dim mc As New ManagementClass("Win32_NetworkAdapterConfiguration")
Dim moc As ManagementObjectCollection = mc.GetInstances()
Dim MACAddress As String = String.Empty
For Each mo As ManagementObject In moc
If MACAddress = String.Empty Then
If CBool(mo("IPEnabled")) = True Then
MACAddress = mo("MacAddress").ToString()
End If
End If
mo.Dispose()
Next

MACAddress = MACAddress.Replace(":", "")
Return MACAddress
End Function

И не забываем:

Код:
Imports System.Management
Иначе не скомпилируется ;)

После того как мы выдрали системную информацию, необходимо передать ее на сервер, инструментов в .NET'е для этого огромное количество, от сокетов до HttpWebRequest, но т.к. мы используем простенький GET метод общения с сервером, нам хватит обыкновенного WebClient'a. Общая реализация такой функции для проверки:

Код:
Public Function gets(ByVal id As Integer, ByVal data As String)
Dim wc As New WebClient
Dim i As Byte = 0
start:
Try
Select Case wc.DownloadString("http://127.0.0.1/index.php?id=" & id & "&data=" & data)
Case ""
i += 1
If i = 3 Then
Return False
Else
GoTo start
End If
Case "Access Allowed"
Return True
Case "Access Denied"
Return False
End Select
Catch
Return False
End Try
End Function

Собственно у функции два аргумента: уникальный номер приложения (Для каждой сборки должен быть свой), и передаваемые параметры железа. Так же имеется небольшой счетчик, в случае 3-х неудачных попыток загрузки результата, возвращается значение False. Так же не забываем импортировать Net

А вот пример использования сие чуда:

Код:
If gets(312352, GetMACAddress()) Then
MsgBox("Все ок, можно пользоватся программой :)")
Else
MsgBox("Программа предназначена для другого ПК")
Me.Close()
End If
Привязка в действии:
 
  • Like
Реакции: viktor768 и By_Miha

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.