Решил поделиться кодом, который, возможно, кому-то пригодиться. Я задумывался о вопросе создания некой лицензии, которую можно реализовать при продаже программ. Так как я программист не очень, все что пришло в голову, это сделать привязку к Unix времени. import os import sys import time unix = int(time.time()) path = os.environ["WINDIR"] + '/System32/config/cache.txt' passwords = 'M6U83FK6', 'LWAY0W2W', 'BGDRN8LE', 'B46N02NP', 'THWOGFO4' a = 1582199632 b = 1582299632 try: file = open(path) key = file.read() file.close() if a < int(key) < b: print('• Доступ разрешен •') if not a < int(key) < b: while True: input('Введите секретный пароль: ') except: while True: password = input('Введите пароль: ') if password in passwords: try: file = open(path, 'w') file.write(str(unix)) file.close() except: print('Запустите от имени администратора.') input('Намжите Enter, чтобы закрыть программу.') sys.exit() if a < unix < b: print('• Доступ разрешен •') break if not a < unix < b: while True: print('Лицензия использована на другом компьютере!') input('Нажмите Enter, чтобы закрыть программу.') sys.exit() if password not in passwords: print('• Доступ запрещен •') print('Приобретите лицензию!') input('Нажмите Enter, чтобы закрыть программу.') sys.exit() Python import os import sys import time unix = int(time.time()) path = os.environ["WINDIR"] + '/System32/config/cache.txt' passwords = 'M6U83FK6', 'LWAY0W2W', 'BGDRN8LE', 'B46N02NP', 'THWOGFO4' a = 1582199632 b = 1582299632 try: file = open(path) key = file.read() file.close() if a < int(key) < b: print('• Доступ разрешен •') if not a < int(key) < b: while True: input('Введите секретный пароль: ') except: while True: password = input('Введите пароль: ') if password in passwords: try: file = open(path, 'w') file.write(str(unix)) file.close() except: print('Запустите от имени администратора.') input('Намжите Enter, чтобы закрыть программу.') sys.exit() if a < unix < b: print('• Доступ разрешен •') break if not a < unix < b: while True: print('Лицензия использована на другом компьютере!') input('Нажмите Enter, чтобы закрыть программу.') sys.exit() if password not in passwords: print('• Доступ запрещен •') print('Приобретите лицензию!') input('Нажмите Enter, чтобы закрыть программу.') sys.exit() Объяснение: 1) path - путь, по которому создается текстовый файл cache, в котором записывается текущее Unix время. • os.environ["WINDIR"] - определяет, где расположена папка Windows. Можно было прописать путь сразу 'C:/Windows//System32/config/cache.txt', но у некоторых может быть Windows не на диске C, а на другом. Путь можете указать другой, задача в том, чтобы файл не нашли / случайно не удалили, поэтому его стоит подальше закинуть. 2) Параметры 'a' и 'b' - это значения, которые нужно менять, чтобы у другого человека запустилась программа. Я беру параметр 'a' как время Unix перед компиляцией и за параметр 'b' беру значение 'a+86400' (24 часа). То есть, у человека будет 24 часа, чтобы запустить программу, если он не запустит за это время, то придется давать по новой, но скорее всего он запустит. 3) passwords - набор паролей, которые вы предоставляете при продаже. Сделано больше для отвода глаз и предоставляется для покупки, но мы то с вами знаем, что пароль просто разрешает запустить программу первый раз, дальше просто считывается Unix время из файла. Минусы: 1) Нужно каждый раз компилировать файл по новой, т.к. нужно менять диапазон каждый раз. 2) Если человек догадается, что дело в Unix, он просто сменит время, но до этого еще нужно додуматься. Дополнительно: Я использую pyinstaller для создания exe файлов. Чтобы все работало, ввожу следующую команду: "pyinstaller --onefile file.py" Код проверял, все работает ровно. Не исключаю, что написан коряво, можете доработать. Честно говоря, я уже не знаю, нужно ли запускать от имени администратора, раньше требовалось, сейчас же этого не надо. На всякий случай говорите покупателю, что лучше запустить от имени администратора. Всем добра и позитива!
Barbarella, знать где лежит файл можно обычным процесс хакером т.к он показывает откуда считывается/записывается информация
Barbarella, Вообще это сложно назвать компиляцией, это скорее просто сборка в exe файл, можешь использовать параметр --key ключ123, но это не сильно поможет) Если хочешь защищенную программу, то учи c++ например)