Сап.Относительно недавно занялся написанием различных скриптов, а так-же их продажей. Но продавать программы без какой-либо защиты от распространения является логически иррациональным. В этой статье я поделюсь опытом в реализации лицензионного доступа. Привязка по MAC-адресу.Используется Python 3.9 Что такое MAC-адрес? MAC-адрес — уникальный идентификатор, присваиваемый каждой единице активного оборудования или некоторым их интерфейсам в компьютерных сетях Ethernet. При проектировании стандарта Ethernet было предусмотрено, что каждая сетевая карта должна иметь уникальный шестибайтный номер, «прошитый» в ней при изготовлении. Начнём с самого получения MAC`a. from uuid import getnode mac = getnode() #сохраняем значение в переменной mac print(mac) #выводим в консоль значение Code from uuid import getnode mac = getnode() #сохраняем значение в переменной mac print(mac) #выводим в консоль значение Но так как его(мак) можно изменять, то недобросовестный пользователь, получив доступ к списку активированных ключей, может воспользоваться этим. Усовершенствуем код. Для этого импортируем hashlib для хеширования MAC`a, который далее срежем до 16 символов. from uuid import getnode import hashlib mac = getnode() hash_mc = hashlib.sha256(mac.encode()).hexdigest() hash_mc = hash_mc[17:32] #срезаем до первых 16 символов. print(hash_mc) Code from uuid import getnode import hashlib mac = getnode() hash_mc = hashlib.sha256(mac.encode()).hexdigest() hash_mc = hash_mc[17:32] #срезаем до первых 16 символов. print(hash_mc) Проверка ключа на активацию. Прописываем в терминал pip install requests Далее переходим на сайт https://pastebin.com (можно использовать аналогичные), регистрируемся, создаём новый паст и копируем ссылку на raw.( https://imgur.com/a/crUwLzc ) Данную ссылку вставляем в tone = requests.get('СЮДА ВСТАВЛЯЕМ').text Прописываем в терминал pip install requests from uuid import getnode import hashlib import requests def yes(): print("+") def no(): print("-") def check(): tone = requests.get('https://pastebin.com/raw/ZeGVBMUn').text if (tone.__contains__(hash_mc)): yes() else: no() mac = getnode() hash_mc = hashlib.sha256(mac.encode()).hexdigest() hash_mc = hash_mc[17:32] print(hash_mc) check() Code from uuid import getnode import hashlib import requests def yes(): print("+") def no(): print("-") def check(): tone = requests.get('https://pastebin.com/raw/ZeGVBMUn').text if (tone.__contains__(hash_mc)): yes() else: no() mac = getnode() hash_mc = hashlib.sha256(mac.encode()).hexdigest() hash_mc = hash_mc[17:32] print(hash_mc) check() Пояснение: pip install requests - устанавливаем необходимый пакет После получения, шифрования и срезания MAC-адреса переходим к функции check(). Она отвечает за проверку наличия ключа на сайте. Если он присутствует, то переходим к функции yes(), а если нет - no(). Редактирование паста доступно всегда в профиле. Пример визуализации На этом этапе рассмотрим пример визуализации. Сначала установим pyperclip ( pip install pyperclip ) from uuid import getnode import hashlib import requests from tkinter import * import pyperclip def yes(): print("+") def no(): root = Tk() root['bg'] = '#FFFFFF' root.iconbitmap('name.ico') #если иконки нет, то уберите данную строку. root.title('Test') root.wm_attributes('-alpha', 0.9) root.geometry('300x100') root.resizable(width=False, height=False) root.update_idletasks() width = root.winfo_width() height = root.winfo_height() x = (root.winfo_screenwidth() // 2) - (width // 2) y = (root.winfo_screenheight() // 2) - (height // 2) root.geometry('{}x{}+{}+{}'.format(width, height, x, y)) canvas = Canvas(root, height=120, width=320) canvas.create_text(150, 15, text="Ваш ключ не активирован!", font=24, ) mstrr = StringVar() mstrr.set(hash_mc) entryHSMC = Entry(canvas, textvariable=mstrr, width=18, justify='center') canvas.create_window(150, 50, window=entryHSMC) button1 = Button(text="Скопировать ключ", command=copy) button1.configure(width=20, background="#b2b2b2", relief=FLAT) button1_window = canvas.create_window(150, 80, window=button1) canvas.pack() root.mainloop() def copy(): pyperclip.copy(hash_mc) quit() def check(): tone = requests.get('https://pastebin.com/raw/ZeGVBMUn').text if (tone.__contains__(hash_mc)): yes() else: no() mac = str(getnode()) print(mac) hash_mc = hashlib.sha256(mac.encode()).hexdigest() hash_mc = hash_mc[17:32] print(hash_mc) check() Code from uuid import getnode import hashlib import requests from tkinter import * import pyperclip def yes(): print("+") def no(): root = Tk() root['bg'] = '#FFFFFF' root.iconbitmap('name.ico') #если иконки нет, то уберите данную строку. root.title('Test') root.wm_attributes('-alpha', 0.9) root.geometry('300x100') root.resizable(width=False, height=False) root.update_idletasks() width = root.winfo_width() height = root.winfo_height() x = (root.winfo_screenwidth() // 2) - (width // 2) y = (root.winfo_screenheight() // 2) - (height // 2) root.geometry('{}x{}+{}+{}'.format(width, height, x, y)) canvas = Canvas(root, height=120, width=320) canvas.create_text(150, 15, text="Ваш ключ не активирован!", font=24, ) mstrr = StringVar() mstrr.set(hash_mc) entryHSMC = Entry(canvas, textvariable=mstrr, width=18, justify='center') canvas.create_window(150, 50, window=entryHSMC) button1 = Button(text="Скопировать ключ", command=copy) button1.configure(width=20, background="#b2b2b2", relief=FLAT) button1_window = canvas.create_window(150, 80, window=button1) canvas.pack() root.mainloop() def copy(): pyperclip.copy(hash_mc) quit() def check(): tone = requests.get('https://pastebin.com/raw/ZeGVBMUn').text if (tone.__contains__(hash_mc)): yes() else: no() mac = str(getnode()) print(mac) hash_mc = hashlib.sha256(mac.encode()).hexdigest() hash_mc = hash_mc[17:32] print(hash_mc) check() Пояснение: tkinter не требует отдельной установки, его нужно просто импортировать. Если ключ не вписан в паст на сайте, то переходит к функции no(), которая в свою очередь открывает окно. pyperclip и функция copy() используется для копирования, которое происходит по нажатию кнопки. Надеюсь кому-то данная статья была полезна. Буду благодарен за конструктивную критику.
kraja777, я уже указал это в статье. Данную проблему предложил решить хешированием и срезанием MAC`a. Активация проводится уже по хешированному и срезанному, что усложнит ситуацию. Не думаю, что кто-либо будет в этом разбираться. А если попадётся какой-либо знающий чел, то ему не составит сложности и "вскрыть" программу
Исправил ошибку. Ранее хешировалось слово mac', а не сама переменная:spain: hash_mc = hashlib.sha256(mac.encode()).hexdigest() hash_mc = hash_mc[17:32] Python hash_mc = hashlib.sha256(mac.encode()).hexdigest() hash_mc = hash_mc[17:32]