Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Ответ
 
Опции темы
Старый 27.08.2011, 15:44   #1
Заблокирован
 Рыцарь-лейтенант
Аватар для RChesteR
 
RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(RChesteR сломал счётчик популярности :(
Регистрация: 13.02.2011
Сообщений: 422
Популярность: 13168
Золото Zhyk.Ru: 10
Сказал(а) спасибо: 643
Поблагодарили 733 раз(а) в 369 сообщениях
Отправить сообщение для RChesteR с помощью ICQ Отправить сообщение для RChesteR с помощью Skype™
 
Arrow Привязка к железу

Всем привет, решил набросать небольшой мануал для новичков по реализации банальной привязки ПО к железу компьютера. Реализовывать будем на 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 ;
32762071.jpg
"<Имя базы данных>" - заменяем на свое.

Далее создадим index.php, откроем его любым текстовым редактором и начнем понемногу писать (код максимально возможно прокомментирован):
Код:
<?php
	# Конфиг для MySQl 
	$mysql['server']   = "localhost"; # MySQL сервер (обычно localhost)
	$mysql['login']     = ""; # Логин от MySQL
	$mysql['password'] = ""; # Пароль от MySQL
	$mysql['database'] = ""; # База данных
# Получаем данные от программы GET методом
Код:
$id   =(int)$_GET['id'];    # Собственно уникальный ID приложения
	$data = md5($_GET['data']); # Данные о железе, шифруем в MD5
# Получаем IP адрес клиента
Код:
$ip = $_SERVER['REMOTE_ADDR'];
# Подключаемся к MySQL
Код:
$db = mysql_connect($mysql['server'], $mysql['login'], $mysql['password']);
	if (!$db) {
# В случае ошибки прерываем работу скрипта
Код:
	die();
	}
# Выделяем нашу базу
Код:
mysql_select_db($mysql['database'], $db);
# Выдергиваем ID из базы
Код:
$result = mysql_query("SELECT id FROM data WHERE id='".$id."'");
	$text  = mysql_fetch_array($result);
# Сверяем полученный ID и ID записанный в базе
Код:
if($text['id'] != $id) {
# Если записи нету, добавляем информацию о проге и железе в базу
Код:
	mysql_query("INSERT INTO data (id, ip, text) VALUES ('".$id."','".$ip."','".$data."')");
		die();
	}
	else {
# В случае если ID существует в базе, проверяем данные о железе клиента, с данными из базы
# Получаем информацию о железе по ID
Код:
$query = mysql_query("SELECT text FROM data WHERE id='".$id."'");
		$text = mysql_fetch_array($query);
# Сверяем информацию из базы с полученными данными
Код:
if($text['text'] == $data){
# Если совпадают, пропускаем
Код:
die("Access Allowed");
		}
		else {
# Иначе фейл
Код:
die("Access Denied");
		}
	}
?>
По сути серверная часть закончена, можно заливать данный файл на хостинг, и настраивать базу данных

Ну, а теперь перейдем к локальному приложению, как уже наверное стало ясно, передавать данные мы будем 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
Привязка в действии:
2762071.jpg

Последний раз редактировалось RChesteR; 03.03.2012 в 20:05.
  Ответить с цитированием
Старый 05.06.2013, 15:12   #2
 Разведчик
Аватар для Kotaries
 
Kotaries неизвестен в этих краяхKotaries неизвестен в этих краяхKotaries неизвестен в этих краях
Регистрация: 30.05.2013
Сообщений: 7
Популярность: -243
Сказал(а) спасибо: 0
Поблагодарили 27 раз(а) в 19 сообщениях
Отправить сообщение для Kotaries с помощью ICQ Отправить сообщение для Kotaries с помощью Skype™
 
По умолчанию Re: Привязка к железу

Один раз отснифать что шлет прога, и потом винхексом подменить адрес твоего сервера на свой, который будет всегда говорить что все ок, и привет, программа свободна..
________________
WOTKOT Checker - чекер WOT
Минусни репу, накорми средоточие зла!
  Ответить с цитированием
Старый 05.06.2013, 22:02   #3
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: Привязка к железу

Цитата:
Сообщение от KotariesПосмотреть сообщение
Один раз отснифать что шлет прога, и потом винхексом подменить адрес твоего сервера на свой, который будет всегда говорить что все ок, и привет, программа свободна..

RSA подпись + случайный токен по времени тебе в помощь.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 06.01.2017, 16:20   #4
 Разведчик
Аватар для WOLF9595
 
WOLF9595 на правильном путиWOLF9595 на правильном пути
Регистрация: 17.10.2011
Сообщений: 22
Популярность: 164
Сказал(а) спасибо: 47
Поблагодарили 32 раз(а) в 24 сообщениях
Отправить сообщение для WOLF9595 с помощью Skype™
 
По умолчанию Re: Привязка к железу

Цитата:
Сообщение от NickiteeПосмотреть сообщение
RSA подпись + случайный токен по времени тебе в помощь.

А твой гайд, я полагаю, как раз таки использует это?
Или там только RSA без токена по времени?
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Подсказка] Привязка к железу [Монах] Web-программирование и технологии 0 07.08.2011 05:38
[Помогите!] Привязка к железу one^LoVe Школа Читера 0 30.04.2011 22:09

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 19:50.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net