Загрузка...

[Python] Implementation of licensed access to the program.

Thread in Security created by iQxleb Jun 3, 2021. (bumped Jun 19, 2021) 1730 views

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


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

    from uuid import getnode
    mac = getnode() #сохраняем значение в переменной mac
    print(mac) #выводим в консоль значение
    Но так как его(мак) можно изменять, то недобросовестный пользователь, получив доступ к списку активированных ключей, может воспользоваться этим.
    Для этого импортируем hashlib для хеширования MAC`a, который далее срежем до 16 символов.
    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
    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 )

    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() используется для копирования, которое происходит по нажатию кнопки.
    [IMG]

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