AHK скрипт Способы привязки AHK скрипта к человеку (05.10.2021)

Пригодилось?


  • Всего проголосовало
    34
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
30 Апр 2019
Сообщения
143
Реакции
35
Всем привет! В этом посте я научу Вас привязывать свой софт к железу пользователя.
Обновлено (05.10.2021)

- Исправил серьезную ошибку с нахождением операционки на других системных дисках помимо диска C:\

Первый способ:

1) Будем доставать серийник диска на котором установлена Windows.
2) Регистрируемся на GitHub (no ad) и создаем свой GitHub Pages (no ad).
3) Вносим серийник человека в свою базу.
4) После запуска скрипта, скачивается страница вашей базы человеку, после чего ahk ищет совместимость серийника.
5) Если нашелся подходящий серийник, скрипт пропускает в главный функционал, если нет, требует авторизоваться.

Код:
Expand Collapse Copy
#NoEnv

Windows_Disk := A_WinDir

if Windows_Disk contains Windows
{
    RegExMatch(Windows_Disk, "(.*)windows", Disk_7)
    if Disk_71 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_71%
    }
      
    RegExMatch(Windows_Disk, "(.*)Windows", Disk_8)
    if Disk_81 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_81%
    }
      
    RegExMatch(Windows_Disk, "(.*)WINDOWS", Disk_10)
    if Disk_101 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_101%
    }
}
else
{
    MsgBox, У тебя операционная система не Windows!
    ExitApp
}

Результат A_WinDir выглядит примерно так - C:\WINDOWS
Для того чтобы не возникало проблем с использование буквой диска, нужно убрать лишние буквы, в нашем случае это - WINDOWS.
По этому я использовал функцию RegExMatch, а вот результатом выступает Disk_7, Disk_8, Disk_10 в которых хранится диск с Windows в моем случае C:\
А вот сама DriveGet достает серийник из Disk1
(обратите внимание не Disk_7, а Disk_71), результат хранится в HWID (переменная).

Код:
Expand Collapse Copy
URLDownloadToFile, ВАША БАЗА, %a_temp%/key.txt
fileread, read, %a_temp%/key.txt
FileDelete, %a_temp%/key.txt
if read contains %HWID%
{
    Goto, true
}
else
{
    MsgBox, Добро пожаловать в поле регистрации!`nСкопированные данные отправьте автору программы.
    Gui, Font, S16 CBlack Bold, Arial
    Gui, Add, Text, x53 y0 w500 h30 , Твой ключ:
    Gui, Font, ,
    Gui, Add, Edit, x1 y31 w219 h21 +Center ReadOnly vEdit,
    Gui, Add, Button, x35 y52 w153 h24 gClip , Копировать и закрыть
    Gui, Show, w221 h76, Доступ
    GuiControl, , Edit, % HWID
    return
    Clip:
    Gui, Submit, NoHide
    Clipboard := Edit
    ExitApp
    GuiClose:
    ExitApp
}
true:
MsgBox, Добро пожаловать!

URLDownloadToFile качает страницу с сайта в папку Temp хранящуюся на диске C (в моем случае), после чего скрипт читает все содержимое, а по завершению удаляет файл. Учтите, что ссылку на вашу базу нужно вставлять вместо - ВАША БАЗА.

Порядок действий:

1)
1631736105316.png

2)
1631736172474.png

3) Ссылку копируем обязательно в таком формате, как показано на скрине!
1631736415897.png

4) Вставляем в код, готово!

После того как скрипт прочёл содержимое - HWID, происходит сравнение текущего серийника пользователя с существующей базой. Если есть сходство, программа пропускает человека (срабатывает функция Goto, он в свою очередь пропускает строки связанные с меню авторизации, скрипт стартует со строчки true:)

Весь код первого способа:

Код:
Expand Collapse Copy
#NoEnv

Windows_Disk := A_WinDir

if Windows_Disk contains Windows
{
    RegExMatch(Windows_Disk, "(.*)windows", Disk_7)
    if Disk_71 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_71%
    }
      
    RegExMatch(Windows_Disk, "(.*)Windows", Disk_8)
    if Disk_81 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_81%
    }
      
    RegExMatch(Windows_Disk, "(.*)WINDOWS", Disk_10)
    if Disk_101 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_101%
    }
}
else
{
    MsgBox, У тебя операционная система не Windows!
    ExitApp
}

URLDownloadToFile, https://raw.githubusercontent.com/millioner1403/index.html/master/index.html, %a_temp%/key.txt
fileread, read, %a_temp%/key.txt
FileDelete, %a_temp%/key.txt

if read contains %HWID%
{
    Goto, true
}
else
{
    MsgBox, Добро пожаловать в поле регистрации!`nСкопированые данные отправте автору программы.
    Gui, Font, S16 CBlack Bold, Arial
    Gui, Add, Text, x53 y0 w500 h30 , Твой ключ:
    Gui, Font, ,
    Gui, Add, Edit, x1 y31 w219 h21 +Center ReadOnly vEdit,
    Gui, Add, Button, x35 y52 w153 h24 gClip , Копировать и закрыть
    Gui, Show, w221 h76, Доступ
    GuiControl, , Edit, % HWID
    return
    Clip:
    Gui, Submit, NoHide
    Clipboard := Edit
    ExitApp
    GuiClose:
    ExitApp
}
true:
MsgBox, Добро пожаловать!

Второй способ:

Этот способ работает по принципу парсинга страницы, идея - Bunnyscript ( https://yougame.biz/members/337981/ ).

1) Будем доставать серийник диска на котором установлена Windows.
2) Регистрируемся на GitHub (no ad) и создаем свой GitHub Pages (no ad).
3) Вносим серийник человека в свою базу.
4) После запуска скрипта, парсится страница вашей базы, после чего ahk ищет совместимость серийника.
5) Если нашелся подходящий серийник, скрипт пропускает в главный функционал, если нет, требует авторизоваться.

Код этого способа на 90% схож с предыдущим, по этому в детальном объяснении не нуждается.

Весь код второго способа:

Код:
Expand Collapse Copy
#NoEnv

Windows_Disk := A_WinDir

if Windows_Disk contains Windows
{
    RegExMatch(Windows_Disk, "(.*)windows", Disk_7)
    if Disk_71 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_71%
    }
       
    RegExMatch(Windows_Disk, "(.*)Windows", Disk_8)
    if Disk_81 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_81%
    }
       
    RegExMatch(Windows_Disk, "(.*)WINDOWS", Disk_10)
    if Disk_101 contains Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M
    {
        DriveGet, HWID, Serial, %Disk_101%
    }
}
else
{
    MsgBox, У тебя операционная система не Windows!
    ExitApp
}

Parse := ComObjCreate("WinHttp.WinHttpRequest.5.1")
Parse.Open("GET", "https://raw.githubusercontent.com/millioner1403/index.html/master/index.html", false)
Parse.Send()
Parse.WaitForResponse()
Text := Parse.ResponseText

if Text contains %HWID%
{
    Goto, true
}
else
{
    MsgBox, Добро пожаловать в поле регистрации!`nСкопированые данные отправте автору программы.
    Gui, Font, S16 CBlack Bold, Arial
    Gui, Add, Text, x53 y0 w500 h30 , Твой ключ:
    Gui, Font, ,
    Gui, Add, Edit, x1 y31 w219 h21 +Center ReadOnly vEdit,
    Gui, Add, Button, x35 y52 w153 h24 gClip , Копировать и закрыть
    Gui, Show, w221 h76, Доступ
    GuiControl, , Edit, % HWID
    return
    Clip:
    Gui, Submit, NoHide
    Clipboard := Edit
    ExitApp
    GuiClose:
    ExitApp
}
true:
MsgBox, Добро пожаловать!

Ребят, надеюсь Вам пригодились мои знания. Напоминаю, что я не являюсь программистом, занимаюсь этим делом ради удовольствия. В даном посте я использовал свой метод получения серийного номера диска (кроме GUI (меню) ), я считаю что это довольно простой способ и в тоже время надежный, ибо он состоит из 10 символов, а не из 20. Хочу поблагодарить Bunnyscript за решенную проблему с парсингом страницы. Скачивать файл, а потом удалять не совсем правильно. По этому рекомендую использовать второй способ! Пишите как Вам, делитесь своими знаниями в комментариях, давайте поможем друг другу ибо инноваторов становится всё меньше. Если Вас ещё что-то интересует (не по теме) пишите, попробую помочь чем смогу в следующих постах.

Также прошу обратить внимание, на то, как AutoHotKey прост в освоении, например я получил серийный номер диска всего 3-мя строчками кода. На других языках я ещё такого не встречал)).
 
Последнее редактирование:
не самая лучшая защита. но вроде сойдёт
 
достаточно заменить ответ и твой ахк будет взломан (или декомпилировать лол)
Я писал о надежности способа. Если человек в силах взломать ahk, он разве не может сделать подобный функционал самостоятельно? Также нужно не забывать о протекции кода, полиморфизме, обфускации и прочих методов защиты. Если все сделать качественно, никому не будет делала до твоего скрипта, ибо проще будет просто воссоздать свой с нуля. Ппхуды, вантапы и подобные софтины сделать на ahk попросту невозможно. Даже скорость external чита написанном на нём очень низка, для этого есть более продвинутые языки.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Есть разные компиляторы для AHK. Есть куча разных приватных компиляторов которые не могут взломать даже опытные кодеры. Не говоря уже о тех кто покупает скрипты для личного пользования. И вообще не шарит за кодинг. Защита нужна лиж для того что ты скрипт не распостраняли на различных пабликах, либо школо серверах.
 
А как ключ вносить в базу, вручную?
 
Последнее редактирование:
А как ключ вносить в базу, вручную?
К сожалению, но да. Человек качает скрипт, запускает, программа просит его отправить ключ автору скрипта. Ты в свою очередь вручную добавляешь себе в базу. Но если использовать платные хостинги, а не тот о котором я написал, можно сделать так, чтобы программа сама общалась с базой. Но я считаю, что это не безопасно, например если ломанут твой софт и получат доступ к базе, могут просто всех твоих юзеров от туда удалить. Я попробую что-то еще придумать, так сказать, как можно сильнее автоматизировать этот метод. Ну а на счет того, что человек может получить список все юзеров твоей базы, можно даже не беспокоиться. HWID если я не ошибаюсь выглядит примерно так: 00000-00000-00000-00000, в таком виде человек может подменить свой на тот, что в базе. Но AHK видит HWID в своем формате: 0000000000. Человек даже не сможет понять как этот формат конвертировать в стандартный. Но даже если совсем стремно, можно создать самый обычный шифратор или подменщик, в таком случае это будет наверное самый лучший способ привязки человека к базе. Ну и как я писал ранее, нужно подумать о парсинге страницы, а не о скачивании файла страницы?
 
Вообще я знаю прогу, где человек в гугл таблицу заносит данные. У него такая система активации, все автоматически заносится (привязывается, только ключ нужно указывать (покупать) у него на сайте). Он прогу (скрипт) свой зашифровал, но в отладчике можно прочитать код, в чит Энджин, например, если кто хоть немного разбирается в Http запросах, то может восстановить эту систему сам. Опять же, мне не нужно.
 
Последнее редактирование:
Вообще я знаю прогу, где человек в гугл таблицу заносит данные. У него такая система активации, все автоматически заноситься (привязывается, только ключ нужно указывать (покупать) у него на сайте). Он прогу (скрипт) свою зашифровал, но в отладчике можно прочитать код, в чит Энджин, например, если кто хоть немного разбирается в Http запросах, то может восстановить эту систему сам. Опять же, мне не нужно.
По мере поступления новой информации, я буду дополнять этот пост, все же в название темы слово - способы)
 
Последнее редактирование:
Скорее всего ты по ошибке скопировал вторую часть кода. Пролистай в конец моего поста, там будет весь код программы.
я копировал весь код, и вставил вместо твоей ссылки свою
 
я копировал весь код, и вставил вместо твоей ссылки свою
я копировал весь код, и вставил вместо твоей ссылки свою
Смотри, этот код, что я тебе сейчас скинул запусти, а результат заскринь и скинь сюда.
Код:
Код:
Expand Collapse Copy
#NoEnv
Windows_Disk := A_WinDir
RegExMatch(Windows_Disk, "(.*)WINDOWS", Disk)
DriveGet, HWID, Serial, %Disk1%

MsgBox, Твой диск с виндой: %Windows_Disk%`nДиск: %Disk1%`nКлюч диска: %HWID%
Пример скрина:
1631965382652.png
 
У тебя какой Windows? Я смотрю у тебя сама система прописана не капсом. У меня есть возможность проверить работоспособность на 7, 8.1 и 10. На 7 и 10 все хорошо работает.

В любом случае по приезду домой пофикшу (надеюсь).
 
Сурс защиты хугерейна слили онет
 
о
Ключ теперь выдает
1632026761330.png

Так теперь у меня другая проблема, У меня есть 10 ботов, которые надо соединить в 1 ахк лаунчер.
Чтобы ты открыл его, скинул код другу, он дал доступ. Я захожу и вижу 10 вкладок, по каждой тыкнуть можно, тыкаешь на 1, запускается она и тд
 
Последнее редактирование:
о
Ключ теперь выдаетПосмотреть вложение 172415
Так теперь у меня другая проблема, У меня есть 10 ботов, которые надо соединить в 1 ахк лаунчер.
Чтобы ты открыл его, скинул код другу, он дал доступ. Я захожу и вижу 10 вкладок, по каждой тыкнуть можно, тыкаешь на 1, запускается она и тд
Немного не понял проблему.
Я так понимаю, ты админ всего софта, у тебя есть 10 AHK скриптов которые должны запускаться по отдельности с AHK лаунчера.

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

После того как он получил доступ к ботам, у него появляется меню (GUI) где он может выбрать одного из 10 ботов в любое время.

Еще один вопрос, если он выбрал сразу 10 ботов, они все сразу должны запустится или можно за один сеанс только одного бота?

И кстати, я вижу ты создал свою тему с вопросом, я тебе туда если что скину готовый код чтобы не засорять эту.
Если у кого-то похожая проблема залетайте сюда:
 
Немного не понял проблему.
Я так понимаю, ты админ всего софта, у тебя есть 10 AHK скриптов которые должны запускаться по отдельности с AHK лаунчера.

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

После того как он получил доступ к ботам, у него появляется меню (GUI) где он может выбрать одного из 10 ботов в любое время.

Еще один вопрос, если он выбрал сразу 10 ботов, они все сразу должны запустится или можно за один сеанс только одного бота?

И кстати, я вижу ты создал свою тему с вопросом, я тебе туда если что скину готовый код чтобы не засорять эту.
Если у кого-то похожая проблема залетайте сюда:
Прямо в точку.
Типа да гуи меню(лаунчер
1632057739017.png
Типа такого))))) хахахаха. и ты тыкаешь на 1, а там тот скрипт, закрываешь его, открываешь заного и если хочешь другое, выбираешь другой скрипт) ну ты меня понял, сам все сверху написал. Надо чтобы он только 1 бота мог выбрать за сеанс.
А вместо цифарок я свои названия вставлю
 

Похожие темы

Назад
Сверху Снизу