Что нового

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

defens

Знающий
Сообщения
89
Репутация
5
в том то и дело как это условие отобразить
 

ArtInt

Знающий
Сообщения
135
Репутация
18
ArtInt [?]
можно вшивать эту инфу в функции _InjectUniqueID() (вопросы к Yashied)
Не подходит?

Тогда можно ещё сделать проверку существования файлика (а внём может содержаться лицензионный ключ). Больше идей нет... :(
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Интересно было бы взглянуть на готовую связку клиент-сервер. :whistle:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Клиент при старте связывается с сервером который представляет из себя PHP скрипт принимающий сигнатуру компа на котором стоит клиент. Сигнатуре может генериться различными способами, в любом случае пересылка туда и обратно должна делаться с динамичной шифровкой. Далее сервер смотрит ini файлик в котором указано до какого времени работает программа. Время истекло - плати снова абонентку. Сменил железку - изъявляй об этом разработчика и тебе перезапишут старую сигнатуру на новую. Не хочешь - покупай программу заново.
Проверка при старте и далее каждые несколько минут :smile:
 

cobra2029

Новичок
Сообщения
54
Репутация
0
Клиент при старте связывается с сервером который представляет из себя PHP скрипт принимающий сигнатуру компа на котором стоит клиент. Сигнатуре может генериться различными способами, в любом случае пересылка туда и обратно должна делаться с динамичной шифровкой. Далее сервер смотрит ini файлик в котором указано до какого времени работает программа. Время истекло - плати снова абонентку. Сменил железку - изъявляй об этом разработчика и тебе перезапишут старую сигнатуру на новую. Не хочешь - покупай программу заново.
Проверка при старте и далее каждые несколько минут


Это все прекрасно....
Все прекрасно понимают, что готовую связку никто выкладывать не будет, поэтому я начну задавать вопросы которые мне не понятны и на основе ответов стряпать "связку" клиент сервер.

Итак:

Начнём с сервера:
сервером который представляет из себя PHP скрипт принимающий сигнатуру компа на котором стоит клиент

Как я понимаю когда PHP ядро будет принимать "сигнатуру ПК" оно должно проводить запись в базу (самая распространённая MySQL).
Подробнее про сигнатуру:
Из прочитанных тем я сделал вывод, что клиент должен генерировать и передавать минимум 3 параметра:
- UID материнской платы
- UID процессора
- Серийный номер клиента:
- для каждой копии программы должен быть свой.

В связи с этим возник вопрос:
"Как при компиляции программы заставить её генерировать "Уникальный серийный номер"?"

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

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

falcon92

Новичок
Сообщения
5
Репутация
0
Что то вы замудрили.. Зачем эти 3 состовляющих? Всегда есть пачка уникальных фич.
К тому же Autoit прекрасно декомпилиться в сырцы. Зашифруй ты хоть в RC4. От нубла спасёт - да, согласен.
+ ничто не мешает перенаправить запросы на свой сервер.

Сам писал защиту простую, но ясно понимал - кому надо. Хекнут ;) (Даже сам знал дырки) :beer:
Хотя, тут от клиентов зависит. Если уважают твой труд и надо будут апдейты (не видел ни разу, чтобы софт без багов работал с первых версий. Наглядный пример Мелкософт ;D)
Меня больше интересовало сделать так, чтобы софт в паблик не уплывал. Опять же через интернет ключ чекать... :\
 

Trans

Знающий
Сообщения
257
Репутация
6
а почему бы не делать привязку по ID CPU? при первом запуске программы, вылазит окно с уведомлением, что необходимо активировать программу ключём или использовать триал версию... Человек вводит ключ, затем программа отправляет запрос на сервер, где регистрирует ID CPU + CD_KEY и после чего делает какую нибудь запись в реесторе, чтоб пользователь мог потом при необходимости удалить программу и при следующей установки она у него не требовала ключа.

У меня возникает 2 вопроса:
1 - как сделать так, чтоб программа выполняла *регистрацию* при первом запуске ( но это можно решить через тот же самый реестр)
2 - как сделать так, чтоб запись в MySQL была только в том случае, если этот ключ не активирован...

PS надеюсь проблем с ID CPU не будет :smile:
 

shift72

Новичок
Сообщения
86
Репутация
2
Почему когда я запускаю этот скрипт
Код:
#Include <WinAPIEx.au3>

If Not _ValidateScript() Then
    MsgBox(16, ':-(', 'The program has not been installed on this computer.')
    Exit
EndIf

MsgBox(0, ':-)', 'OK')

Func _ValidateScript()

    Local $sID = _WinAPI_UniqueHardwareID(BitOR($UHID_MB, $UHID_BIOS))

    If Not $sID Then
        Return 0
    EndIf

    Local $hFile = _WinAPI_CreateFile(@ScriptFullPath, 2, 2)

    If Not $hFile Then
        Return 0
    EndIf

    Local $tData = DllStructCreate($tagGUID), $pData = DllStructGetPtr($tData)
    Local $sData, $iByte, $Result = 0

    Do
        If Not _WinAPI_SetFilePointer($hFile, -16, 2) Then
            ExitLoop
        EndIf
        If (Not _WinAPI_ReadFile($hFile, $pData, 16, $iByte)) Or ($iByte <> 16) Then
            ExitLoop
        EndIf
        $sData = _WinAPI_StringFromGUID($pData)
        If (Not $sData) Or ($sData <> $sID) Then
            ExitLoop
        EndIf
        $Result = 1
    Until 1
    _WinAPI_CloseHandle($hFile)
    Return $Result
EndFunc   ;==>_ValidateScript


Мне выдает такую ошибку
Код:
>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\Dias\Desktop\Кликер\test\MyProg.au3"
C:\Program Files (x86)\AutoIt3\Include\WinAPIEx.au3 (8108) : ==> Duplicate function name.:
Func _WinAPI_DuplicateHandle($hProcess, $hSource, $hTarget, $iAccess = 0, $iOptions = 2, $fInherit = 0)

>Exit code: 1 Time: 0.337
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
shift72
у меня не выдало такой ошибки. обновите версию WinApiEx.au3 . ну и версию AutoIT :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
falcon92 сказал(а):
ничто не мешает перенаправить запросы на свой сервер.
Ты хоть за перенаправляйся, если львиная доля логики лежит на сервере, а каждый запрос шифруется динамическим ключом, время расшифровки которого в тысячи раз превышает срок его валидности, ты хоть в "сырцы" разбери программу, толку от пустого клиента не будет.
 

shift72

Новичок
Сообщения
86
Репутация
2
Полностью удалил Autoit, скачал заново последнюю версию, утановил библиотеку WinAPIEx.au3, теперь вот эта проблема:
Код:
>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\Dias\Desktop\MyProg.au3"
C:\Users\Dias\Desktop\MyProg.au3 (24) : ==> Variable used without being declared.:
Local $sID = _WinAPI_UniqueHardwareID(BitOR($UHID_MB, $UHID_BIOS))
Local $sID = _WinAPI_UniqueHardwareID(BitOR(^ ERROR
>Exit code: 1    Time: 0.316


Чтож я такой криворукий то а....
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
shift72
ведь ясно написано, что не объявлена переменная. кстати, и на вторую переменную тоже будет ошибка.
добавьте вначале скрипта
Код:
#include <apiconstants.au3>

;)
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628

shift72

Новичок
Сообщения
86
Репутация
2
Можно сделать самораспаковывающийся архив, который будет распаковывать программу, и скрипт патча в папку в которой сейчас находится и запускать патч, а батник в патче удалит архив и патч.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
shift72
тут принято один вопрос одна тема. :smile:
или это не вопрос?
если спрашиваете, то все есть уже готовое на форуме. пять минут поиска и у вас гора скриптов
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
ну тогда это сложный путь. можно без архива и батника
 

shift72

Новичок
Сообщения
86
Репутация
2
Хмм... Я искал, не нашел. Разве есть способ чтоб был только один ехе файл для запуска, и он сам себя патчит?


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

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