Автор Тема: Привязка скрипта к одному компьютеру (железу)  (Прочитано 63357 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2691
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Хочу предложить свой способ привязать программу к определенному компьютеру, т.е. программа будет работать только на этом компьютере. Для запуска нижеприведенных примеров необходима библиотека WinAPIEx.au3.

Шаг 1

Вставляем в свой скрипт следующий код и компилируем его с именем MyProg.exe.

(нажмите для показа/скрытия)

Если запустить этот скрипт, то он не пройдет проверку и завершит свою работу.

Шаг 2

Запустим следующий скрипт (теоретически это должен делать установщик вашей программы).

(нажмите для показа/скрытия)

Теперь ваша программа (MyProg.exe) успешно запустится и выведет сообщение "OK". И самое главное, файл MyProg.exe будет работать ТОЛЬКО на том компьютере, на котором мы вызвали функцию _InjectUniqueID().

:)
« Последнее редактирование: Август 14, 2010, 00:18:38 от Yashied »


Думай, прежде чем говорить.

Русское сообщество AutoIt

Привязка скрипта к одному компьютеру (железу)
« Отправлен: Август 13, 2010, 21:21:42 »

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Yashied
В Вашей замечательной UDF WinAPIEx.au3 версия 2.8 в функции _WinAPI_UniqueHardwareID() пропущена r (_WinAPI_UniqueHardwaeID)

Проверил на 2-х компьютерах - работает как надо. Патч еще можно, наверное, сделать самоудаляющимся.
Спасибо огромное! Отличный способ защиты.
« Последнее редактирование: Август 13, 2010, 21:51:28 от madmasles »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2691
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Я ее уже поправил немногим позже, как выложил v2.8. Нужно скачать еще раз.

:)

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Yashied  [?]
Цитировать
Я ее уже поправил немногим позже
Понял, спасибо еще раз.

Русское сообщество AutoIt

Re: Привязка скрипта к одному компьютеру (железу)
« Ответ #3 Отправлен: Август 13, 2010, 21:54:28 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2691
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Патч еще можно, наверное, сделать самоудаляющимся.

Согласен, не установщик, а именно патч.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7800
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Yashied
Хороший пример. По сути, это можно использовать скажем, для предотвращения распространения частей дистрибутива нашей программы без исходного установщика. Типа обязательство установки :)

P.S
WinAPIEx.au3 всё же не нативная библиотека, многие новички не поймут почему скрипт не работает. Лучше добавь на неё ссылку и упоминание о необходимости её подключать отдельно.


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2691
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
CreatoR

OK.



Добавлено: Август 14, 2010, 00:43:05
Опишу принцип защиты. Берется защищаемый .exe файл и дописывается в конец 4 байта (сигнатура) + 16 байт (GUID). Вот и все. Программе остается только открыть саму себя и прочитать с конца 16 байт данных. Затем сравнить эти данные с ID, полученным с помощью функции _WinAPI_UniqueHardwareID(). Если не совпадает, то...
« Последнее редактирование: Август 14, 2010, 00:43:05 от Yashied, Причина: Объединение сообщений »

Оффлайн Bloodrinker [?]

  • Новичок
  • *
  • Сообщений: 228
  • Репутация: 19
  • Пол: Мужской
  • <Блуждающий...>
    • Награды
Протестировал, вещь очень понравилась. Было бы очень классно если бы в сие чудо добавить что-то вроде установщика. Ну допуским скомпилил все в EXE, дал другому этот exe-шник, он кликнул по нему, установил программку, она привязалась к его ПК, тем самым установленный файл нельзя запустить на другом ПК, а установочный распространяемый exe  просто-напросто одноразовый, т е его нельзя запустить более чем 1 раз. Без понятия как это реализовать. Нужно сделать чтобы он после установки автоматом удалялся или что-то  этом духе, чтобы он стал недоступным для пользователя, тем самым остановить его дальнейшее распространение.

PS: Понимаю, фантазия у меня удивительная и я хочу слишком многого, но как сказать... Мало ли... Вдруг, возможно это реализовать... Например будет полезно тем, кто пишет программки на AutoIt и продает, а вышесказанным можно предотвратить её дальшейшее нелегальное путешествие по сети интернет (хотя бы частично :))

Русское сообщество AutoIt

Re: Привязка скрипта к одному компьютеру (железу)
« Ответ #7 Отправлен: Август 14, 2010, 13:35:12 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2691
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Это не сложно, но хитрый юзер может оставить себе копию установщика.

ЗАПУСКАТЬ ТОЛЬКО СКОМПИЛИРОВАННЫЙ (.EXE) ФАЙЛ!!!

Код: AutoIt [Выделить]
#Include <File.au3>
#Include <WinAPIEx.au3>

$Dir = FileSelectFolder('Select folder to install MyProg.exe.', '', 0, @ScriptDir)
If Not $Dir Then
    Exit
EndIf

If FileInstall('MyProg.exe', $Dir & '\MyProg.exe', 1) Then
    _InjectUniqueID($Dir & '\MyProg.exe', _WinAPI_UniqueHardwareID(BitOR($UHID_MB, $UHID_BIOS)))
    _ScriptDestroy()
EndIf

Func _InjectUniqueID($sFile, $sID)

    Local $tData = _WinAPI_GUIDFromString($sID)

    If Not IsDllStruct($tData) Then
        Return 0
    EndIf

    Local $hFile = _WinAPI_CreateFile($sFile, 2, 6)

    If Not $hFile Then
        Return 0
    EndIf

    Local $tSign = DllStructCreate('dword'), $pSign = DllStructGetPtr($tSign)
    Local $iByte, $Error = 1

    Do
        If Not _WinAPI_SetFilePointer($hFile, -20, 2) Then
            ExitLoop
        EndIf
        If (Not _WinAPI_ReadFile($hFile, $pSign, 4, $iByte)) Or ($iByte <> 4) Then
            ExitLoop
        EndIf
        If DllStructGetData($tSign, 1) = 0x0144ADDA Then
            $Error = 2
            ExitLoop
        EndIf
        If Not _WinAPI_SetFilePointer($hFile, 0, 2) Then
            ExitLoop
        EndIf
        DllStructSetData($tSign, 1, 0x0144ADDA)
        If (Not _WinAPI_WriteFile($hFile, $pSign, 4, $iByte)) Or ($iByte <> 4) Then
            ExitLoop
        EndIf
        If (Not _WinAPI_WriteFile($hFile, DllStructGetPtr($tData), 16, $iByte)) Or ($iByte <> 16) Then
            ExitLoop
        EndIf
        $Error = 0
    Until 1
    _WinAPI_CloseHandle($hFile)
    Return SetError($Error, 0, Number($Error = 0))
EndFunc   ;==>_InjectUniqueID

#Include <File.au3>

Func _ScriptDestroy()
    $sTemp = _TempFile(@TempDir, '~', '.bat')
    $sPath = FileGetShortName(@ScriptFullPath)
    $hFile = FileOpen($sTemp, 2)
    FileWriteLine($hFile, [email protected] off')
    FileWriteLine($hFile, ':loop')
    FileWriteLine($hFile, 'del ' & $sPath)
    FileWriteLine($hFile, 'if exist ' & $sPath & ' goto loop')
    FileWriteLine($hFile, 'del ' & $sTemp)
    FileClose($hFile)
    Run($sTemp, '', @SW_HIDE)
EndFunc   ;==>_ScriptDestroy


Оффлайн Bloodrinker [?]

  • Новичок
  • *
  • Сообщений: 228
  • Репутация: 19
  • Пол: Мужской
  • <Блуждающий...>
    • Награды
ЗАПУСКАТЬ ТОЛЬКО СКОМПИЛИРОВАННЫЙ (.EXE) ФАЙЛ!!!

А что страшного будет если запустить скрипт? o_O Я ничего такого страшного не нашел... ;D
Да, ты прав, можно сделать копию, и надо с этим как-то тоже справиться... но это отходит от темы...


скачал твой скрипт, откомпилил в папке с моей "myprog.exe", запустил твой скрипт, выбрал папку. exe-шник в конце удаляется, это хорошо, сейчас протестируюна другом ПК что получилось и отпишусь...



Добавлено: Август 14, 2010, 15:04:42
я точно все правильно сделал? почему он запускается на другом ПК? Я что-то неправильно сделал, это однозначно)
« Последнее редактирование: Август 14, 2010, 15:04:42 от Bloodrinker, Причина: Объединение сообщений »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349

  • Автор темы
  • Репутация: 2691
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
...скачал твой скрипт, откомпилил в папке с моей "myprog.exe", запустил твой скрипт, выбрал папку. exe-шник в конце удаляется, это хорошо, сейчас протестируюна другом ПК что получилось и отпишусь...

я точно все правильно сделал? почему он запускается на другом ПК?

В твоей "myprog.exe" должна присутствовать проверка на соответствие ID, см. "Шаг 1" в первом посте.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7800
  • Репутация: 2279
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Можно ещё компилировать скрипт на стороне клиента, и предварительно вшить в него (в скрипт :) ) привязку к системе (проверка на идентификатор железа).

Оффлайн Kalisnik [?]

  • Продвинутый
  • ***
  • Сообщений: 293
  • Репутация: 63
  • Пол: Мужской
  • Эволюция
    • Награды
Как вариант, бороться с копированием можно уже давно испытанным способом - через интернет-активацию.  :) Установочный файл при запуске на ПК требует интернет-подключения. При его наличии, сканит ID оборудования и вместе со своим идентификационным номером программы отправляет эти ID на сервер, где копия регистрируется и делается привязка этой копии к высланным ID оборудования. После чего c сервера отсылается "Key" для установки программы. Таким образом копирование ни чего не даст, поскольку запустить зарегистрированный на сервере файл можно будет только с того компьютера, на который программа была установлена в первый раз. А в случае повреждения Windows и т.д., переустановить имеющуюся копию на ПК, чей ID храниться на сервере, будет делом пары-тройки минут.  Мне это дело так представляется.  :)

Оффлайн Bloodrinker [?]

  • Новичок
  • *
  • Сообщений: 228
  • Репутация: 19
  • Пол: Мужской
  • <Блуждающий...>
    • Награды
Как вариант, бороться с копированием можно уже давно испытанным способом - через интернет-активацию.  :) Установочный файл при запуске на ПК требует интернет-подключения. При его наличии, сканит ID оборудования и вместе со своим идентификационным номером программы отправляет эти ID на сервер, где копия регистрируется и делается привязка этой копии к высланным ID оборудования. После чего c сервера отсылается "Key" для установки программы. Таким образом копирование ни чего не даст, поскольку запустить зарегистрированный на сервере файл можно будет только с того компьютера, на который программа была установлена в первый раз. А в случае повреждения Windows и т.д., переустановить имеющуюся копию на ПК, чей ID храниться на сервере, будет делом пары-тройки минут.  Мне это дело так представляется.  :)

это правильнее всего, но с AutoIt это будет довольно сложно организовать. А вот что делать на сервее я вообще без понятия, или есть готовые варианты?

Оффлайн Kalisnik [?]

  • Продвинутый
  • ***
  • Сообщений: 293
  • Репутация: 63
  • Пол: Мужской
  • Эволюция
    • Награды
Bloodrinker
Я тоже не знаю как это все организовать... :laugh: - я свои мысли описал неосторожно. Но одним AutoIt в этом случае явно не обойтись. Нужны знания языков веб-программирования, уметь работать с базами данных и т.д.... в общем со стороны не знающего выглядит довольно угрожающе (у меня это смотрится именно так  :):wacko:

П\с: Хотя для этих целей думаю можно использовать и бесплатный хост - так что были бы только знания. :)

Русское сообщество AutoIt

Re: Привязка скрипта к одному компьютеру (железу)
« Ответ #14 Отправлен: Август 14, 2010, 18:55:34 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
52 Ответов
20306 Просмотров
Последний ответ Май 24, 2010, 19:06:31
от Greens
5 Ответов
7977 Просмотров
Последний ответ Сентябрь 16, 2012, 23:24:05
от shift72
21 Ответов
15187 Просмотров
Последний ответ Июнь 28, 2011, 11:33:24
от Centurion
6 Ответов
4244 Просмотров
Последний ответ Август 27, 2011, 14:49:30
от Kaster
0 Ответов
2412 Просмотров
Последний ответ Август 27, 2011, 11:53:08
от Kaster
9 Ответов
5422 Просмотров
Последний ответ Ноябрь 05, 2011, 19:32:17
от ArtInt
5 Ответов
3387 Просмотров
Последний ответ Февраль 03, 2015, 16:13:48
от rivega
12 Ответов
5073 Просмотров
Последний ответ Май 10, 2013, 13:41:12
от CreatoR
5 Ответов
1322 Просмотров
Последний ответ Август 10, 2015, 08:03:56
от Александр_
2 Ответов
843 Просмотров
Последний ответ Февраль 04, 2017, 02:44:54
от reset86