Загрузка...

[Python] Реализация лицензионного доступа к программе.

Тема в разделе Безопасность создана пользователем iQxleb 3 июн 2021. (поднята 19 июн 2021) 1735 просмотров

  1. iQxleb
    iQxleb Автор темы 3 июн 2021 Дайте дорогу молодым. 35 14 дек 2018
    Сап.
    Относительно недавно занялся написанием различных скриптов, а так-же их продажей. Но продавать программы без какой-либо защиты от распространения является логически иррациональным. В этой статье я поделюсь опытом в реализации лицензионного доступа.


    Привязка по MAC-адресу.​
    Используется Python 3.9
    MAC-адрес — уникальный идентификатор, присваиваемый каждой единице активного оборудования или некоторым их интерфейсам в компьютерных сетях Ethernet. При проектировании стандарта Ethernet было предусмотрено, что каждая сетевая карта должна иметь уникальный шестибайтный номер, «прошитый» в ней при изготовлении.
    Код

    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)
    Прописываем в терминал 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()
    Пояснение:
    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()
    Пояснение:
    tkinter не требует отдельной установки, его нужно просто импортировать.
    Если ключ не вписан в паст на сайте, то переходит к функции no(), которая в свою очередь открывает окно.
    pyperclip и функция copy() используется для копирования, которое происходит по нажатию кнопки.
    [IMG]

    Надеюсь кому-то данная статья была полезна. Буду благодарен за конструктивную критику.
     
    3 июн 2021 Изменено
  2. kraja777
    kraja777 3 июн 2021 0 30 июн 2020
    Вообще мак при желании можно подменить, так что не совсем хороший способ привязаться)
     
    1. iQxleb Автор темы
      kraja777, я уже указал это в статье. Данную проблему предложил решить хешированием и срезанием MAC`a. Активация проводится уже по хешированному и срезанному, что усложнит ситуацию. Не думаю, что кто-либо будет в этом разбираться.
      А если попадётся какой-либо знающий чел, то ему не составит сложности и "вскрыть" программу:thinking:
  3. iQxleb
    iQxleb Автор темы 5 июн 2021 Дайте дорогу молодым. 35 14 дек 2018
    Исправил ошибку. Ранее хешировалось слово mac', а не сама переменная:spain:
    Python
    hash_mc = hashlib.sha256(mac.encode()).hexdigest()
    hash_mc = hash_mc[17:32]
     
Top
Загрузка...