Что нового

Вид привязки программы к HDD

vanekzver

Новичок
Сообщения
91
Репутация
2
Хочу предложить вид привязки программы к компьютеру(ам).

И так приступим :

1) Сначало узнаем ID нашего компьютера.
Для этого компилируем данную программу:
Код:
#include <GUIConstantsEx.au3>
#Region
#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#EndRegion
$s_Serial = DriveGetSerial(StringLeft(@ScriptDir, 2))
$gui = GUICreate ("Идентификатор", 230,35)
GUICtrlCreateLabel ("Ваш идентификатор:", 10,10)
$s_Serial1 = GUICtrlCreateInput ($s_Serial, 120,8, 100)
GUISetState(@SW_SHOW)

While 1
	$msg = GUIGetMsg(1)
	Select
	Case $msg[0] = $GUI_EVENT_CLOSE
	If $msg[1] = $gui Then
		Exit
	EndIf
	EndSelect
WEnd
GUIDelete()

И запускаем. Программа запускается автоматически от имени администратора.
В ней и будет ваш идентификатор.

Пол пути пройдено а теперь приступим к привязке.

Есть 2 пути привязки, по ini файлу на сайте, либо в самой программе.
У каждого свои приемущества. Если через сайт, то можно привязать много компов, и так же отвязать, а если через программу, то это привязка навсегда.

Перейдем.

2) Привязка кода к программе.
Привязываем через сайт.
Нам нужен файл .ini заполненный в такой форме:
Код:
[Computers]
1=id
2=id

Вместо id вставляем ранее полученный код.
В данный файл можно вписывать Unlimited компьютеров, то есть привязка на много компов.
Заливаем файл на сайт допустим под именем control.ini

Теперь идем в саму программу. Добавляем в самое начало такой код:
Код:
#include <IniString.au3>
$iControl = _ValidateSerial()
If Not @error Then
    If $iControl Then
        MsgBox(64, 'Идентификация', 'Идентификация прошла успешно')
    Else
        MsgBox(16, 'Идентификация', 'У вас нет доступа к программе')
        Exit
    EndIf
Else
    Switch @error
        Case -1
            MsgBox(16, 'Идентификация', 'Не удалось проверить серийный номер. Проверьте подключение к интернет.')
            Exit
        Case 1
            MsgBox(16, 'Идентификация', 'Произошла ошибка проверки.')
            Exit
    EndSwitch
EndIf

Func _ValidateSerial()
    Local $s_Serial, $a_Control, $s_TextFromSite

    $s_TextFromSite = InetRead('http://yourdomen.ru/control.ini')
    If @error Then Return SetError(-1)
    $s_TextFromSite = BinaryToString($s_TextFromSite)
    $s_Serial = DriveGetSerial(StringLeft(@ScriptDir, 2))
    If @error Then Return SetError(1)
    $a_Control = _IniString_ReadSection($s_TextFromSite, 'Computers')
    If @error Then Return SetError(1)
    For $i = 1 To $a_Control[0][0]
        If $a_Control[$i][1] == $s_Serial Then Return SetError(0, 0, 1)
    Next
    Return SetError(0, 0, 0)
EndFunc

Вместо yourdomen.ru ставим свой домен, компилируем файл. Если все указано правильно и идентификатор уже на сайте, то программа запустится.

Это был первый вариант привязки через файл ini, лежащий на сайте.

Теперь перейдем ко второму способу, привязки через программу.

После получения кода, в начале программы добавьте это:
Код:
$HDDSer = "Ваш идентификатор"

_ValidateSerial()

Func _ValidateSerial()
    $HDDSerial = DriveGetSerial(StringLeft(@ScriptDir, 2))
    If $HDDSerial <> $HDDSer Then
        MsgBox(0, "Идентификация", "У вас нет доступа к программе")
    EndIf

EndFunc

Это и есть привязка по компьютеру через программу.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
vanekzver,
Ваша программа уже не будет считаться у меня валидной, если я:
1. Перенесу ее на другой жесткий диск или флешку.
2. Изменю размер того диска, на котором она установлена.
3. Отформатирую диск или переустановлю систему.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Этот пример я рассматриваю как не для личного пользования, а для допустим продажи программы. Если нужно кому-то привязать со сроком, с ini файлом отлично подойдет.


Добавлено:
Сообщение автоматически объединено:

А если у вас сменился id, то просто меняем id в ini файле, и доступ снова есть.
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Мдя.

Вот мой код привязки:
Код:
Func _DriveCod()
	$Drive = DriveGetDrive('FIXED')
	if Not IsArray($Drive) Then
		Exit
	EndIf
	Return DriveGetSerial($Drive[$Drive[0]]&'\') * 1024
EndFunc
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Повторю еще раз. Этот вид привязки больше подходит для какого либо софта, чтобы его привязывать ко многим компам


Добавлено:
Сообщение автоматически объединено:

А так же управлять привязанными компами
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Немного улучшил, может кому понадобится!

Код:
Func _DriveCod()
	Local $Drive = DriveGetDrive('FIXED')
	if Not IsArray($Drive) Then
		Return '-1'
	EndIf
	Local $Mem = MemGetStats()
	Return Round(DriveGetSerial($Drive[$Drive[0]]&'\') * 1024 + ($Mem[1] * 1024) * $Mem[5])
EndFunc


Привязывает к диску(Независимо на каком диске он находится), Привязывает по ОЗУ и максимального значения файла-подкачки, ну это уже лишнее...
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
madmasles , а по какому идентификатору можно поменять так, чтобы даже после переустановки системы пахало?
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
vanekzver
Только нет гарантии что твой скрипт де компилируют и вырежут участок кода...


vanekzver [?]
а по какому идентификатору можно поменять так, чтобы даже после переустановки системы пахало

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



Добавлено:
Сообщение автоматически объединено:

vanekzver [?]
по ini файлу на сайте
Эм... Этот твой ини файл можно скачать на жесткий диск по прямой ссылке и просто по баловаться программами изменения серийного номера диска... ;D
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
DriveGetSerial() возвращает серийный номер раздела, а не диска. Следовательно, при любых манипуляциях с этим разделом (форматирование, изменение размера и т.д.) его серийник изменится.

Для получения "железного" идентификатора см. _WinAPI_UniqueHardwareID() из WinAPEx. Идентификатор HDD учитывается только для IDE режима.
 
Автор
V

vanekzver

Новичок
Сообщения
91
Репутация
2
Согласен, не выгодно, а как к sata привязать? не только к IDE
 
Верх