Я разрабатываю программное обеспечение на языке Python, которое будет распространяться среди клиентов моего работодателя. Мой работодатель хочет ограничить использование программы лицензионным файлом с ограничением по времени.
Если мы распространим файлы .py или даже .pyc, то код, который проверяет файл лицензии, будет легко (декомпилировать и) удалить.
Другой аспект заключается в том, что мой работодатель не хочет, чтобы код читали наши клиенты, опасаясь, что код может быть украден или, по крайней мере, "новые идеи".
Есть ли хороший способ решить эту проблему? Желательно с готовым решением.
Программа будет работать на Linux-системах (поэтому я не думаю, что py2exe подойдет).
«Есть ли хороший способ справиться с этой проблемой?"Нет. Ничто не может быть защищено от обратного инжиниринга. Даже прошивка на DVD-машинах была разработана задним ходом и ключ шифрования AACS открыт. И это несмотря на то, что DMCA делает это уголовным преступлением.
Поскольку ни один технический метод не может помешать вашим клиентам читать ваш код, вы должны применять обычные коммерческие методы.
Лицензии. Контракты. Условия. Это все еще работает, даже когда люди могут читать код. Обратите внимание, что некоторые из ваших компонентов на основе Python могут потребовать, чтобы вы заплатили сборы, прежде чем продавать программное обеспечение с использованием этих компонентов. Кроме того, некоторые лицензии с открытым исходным кодом запрещают вам скрывать источник или происхождение этого компонента.
Предложите значительную ценность. Если ваши вещи настолько хороши - по цене, от которой трудно отказаться - нет стимула тратить время и деньги на реверс-инжиниринг. Обратный инжиниринг стоит дорого. Сделайте ваш продукт немного дешевле.
Предлагайте обновления и усовершенствования, которые делают любую реверс-инжиниринг плохой идеей. Когда следующий релиз сломает их реверс-инжиниринг, нет никакого смысла. Это может быть доведено до абсурдных крайностей, но вы должны предложить новые функции, которые делают следующий выпуск более ценным, чем реверс-инжиниринг.
Предложите настройку по ставкам, настолько привлекательным, что они предпочтут заплатить, что вы создадите и поддержите улучшения.
Используйте лицензионный ключ, срок действия которого истекает. Это жестоко и даст вам плохую репутацию, но, безусловно, заставит ваше программное обеспечение перестать работать.
Предложите это как веб-сервис. SaaS не требует загрузки для клиентов.
Python, будучи интерпретируемым языком с компиляцией байт-кодов, очень сложно заблокировать. Даже если вы используете exe-пакет, например py2exe, расположение исполняемого файла хорошо известно, а байт-коды Python хорошо понятны.
Обычно в таких случаях приходится идти на компромисс. Насколько важно защитить код? Есть ли в нем реальные секреты (например, ключ для симметричного шифрования банковских переводов), или вы просто параноик? Выбирайте тот язык, который позволит вам быстрее разработать лучший продукт, и будьте реалистами в отношении того, насколько ценны ваши новые идеи.
Если вы решите, что вам действительно нужно обеспечить надежную проверку лицензии, напишите ее в виде небольшого расширения на языке C, чтобы код проверки лицензии было очень трудно (но не невозможно!) переделать, а основную часть кода оставьте на Python.
Вы должны использовать правильный инструмент, чтобы поступать правильно, и Python не был разработан, чтобы запутываться. Наоборот; все открыто или легко раскрыть или изменить в Python, потому что это философия языка.
Если вы хотите что-то, чего не видите, ищите другой инструмент. Это неплохо, важно, чтобы для разных видов использования существовало несколько разных инструментов.
Даже скомпилированные программы могут быть перепроектированы, поэтому не думайте, что вы можете полностью защитить любой код. Вы можете проанализировать запутанный PHP, взломать ключ шифрования флэш-памяти и т. Д. Новые версии Windows взломаны каждый раз.
Вы не можете помешать кому-либо неправильно использовать ваш код, но вы можете легко узнать, если кто-то это сделает. Поэтому это просто случайный юридический вопрос.
В настоящее время бизнес-модели, как правило, идут на продажу услуг вместо продуктов. Вы не можете копировать услугу, пиратствовать или красть ее. Может быть, пришло время подумать о том, чтобы идти с потоком...
Разумная идея:
Используйте Cython, Nuitka, Shed Skin или что-то подобное для компиляции кода Python в C, а затем распространяйте свое приложение в виде двоичных библиотек Python (pyd).
Таким образом, не остается ни одного (байтового) кода Python, и вы сделали какое-либо разумное количество затемнения кого-либо (т.е. Ваш работодатель) может ожидать от обычного Кодекса, я думаю. (.NET или Java менее безопасны, чем в этом случае, так как этот байт-код не запутан и может относительно легко распаковать в разумный источник.)
Cython становится все более и более совместимым с CPython, поэтому я думаю, что он должен работать. (Я на самом деле рассматриваю это для нашего продукта.. Мы уже строим некоторые сторонние библиотеки как pyd / dlls, поэтому доставка нашего собственного кода python в виде двоичных файлов не является для нас слишком большим шагом.)
См. Этот пост в блоге (не мной) для руководства о том, как это сделать. (thx @hithwen)
Сумасшедшая идея:
Вы можете заставить Cython хранить C-файлы отдельно для каждого модуля, а затем просто объединить их и создать с тяжелой вставкой. Таким образом, ваш модуль Python довольно монолитный и его трудно чипить обычными инструментами.
Вне сумасшествия:
Возможно, вы сможете создать один исполняемый файл, если сможете статически ссылаться (и оптимизировать) время выполнения python и все библиотеки (dlls). Таким образом, было бы сложно перехватить вызовы на / из python и любых библиотек фреймворка, которые вы используете. Это невозможно сделать, если вы используете код LGPL.
Я понимаю, что вы хотите, чтобы ваши клиенты использовали мощь python, но не хотите раскрывать исходный код.
Вот мои предложения:
(a) Напишите критические фрагменты кода в виде библиотек C или C ++, а затем используйте SIP или swig, чтобы открыть API C / C ++ для пространства имен Python.
(b) Используйте cython вместо Python
(c) Как в (a), так и в (b) должна быть возможность распространять библиотеки как лицензированный двоичный файл с интерфейсом Python.
Знает ли ваш работодатель, что он может "украсть" обратно любые идеи, которые другие люди получают из вашего кода? Ведь если они могут читать вашу работу, то и вы можете читать их. Может быть, если посмотреть, как вы можете извлечь выгоду из этой ситуации, это принесет вам большую отдачу, чем страх перед тем, сколько вы можете потерять.
[EDIT] Ответ на комментарий Nick':
Ничего не приобретено и ничего не потеряно. Клиент получил то, что он хочет (и заплатил за это, поскольку он сам внес изменения). Поскольку он не выпускает изменение, это как если бы оно не произошло для всех остальных.
Теперь, если клиент продает программу, он должен изменить уведомление об авторских правах (что незаконно, поэтому вы можете подать в суд и выиграете -> простое дело).
Если они не изменят уведомление об авторских правах, покупатели второго уровня заметят, что программное обеспечение изначально принадлежит вам, и поинтересуются, что происходит. Есть шанс, что они свяжутся с вами и таким образом вы узнаете о перепродаже вашей работы.
И снова у нас есть два случая: Оригинальный клиент продал всего несколько копий. Это означает, что они все равно не заработали много денег, так зачем им беспокоиться. Или они продали большой объем. Это означает, что у вас больше шансов узнать о том, что они делают, и что-то с этим сделать.
Но, в конце концов, большинство компаний стараются соблюдать закон (если их репутация испорчена, вести дела гораздо сложнее). Поэтому они не будут красть вашу работу, а будут работать с вами над ее улучшением. Поэтому если вы включите исходный текст (с лицензией, которая защищает вас от простой перепродажи), есть шанс, что они просто вернут сделанные ими изменения, поскольку это гарантирует, что изменения будут в следующей версии и им не придется их поддерживать. Это беспроигрышный вариант: вы получаете изменения, а они могут внести изменения сами, если они им очень, очень нужны, даже если вы не хотите включать их в официальный релиз.
Вы смотрели на пиминификатор? Он минимизирует, запутывает и сжимает код Python. Пример кода выглядит довольно неприятно для случайной реверс-инжиниринга.
$ pyminifier --nonlatin --replacement-length=50 /tmp/tumult.py
#!/usr/bin/env python3
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ=ImportError
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱=print
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ巡=False
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ澨=object
try:
import demiurgic
except ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ:
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Warning: You're not demiurgic. Actually, I think that's normal.")
try:
import mystificate
except ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ:
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Warning: Dark voodoo may be unreliable.")
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺬ=ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ巡
class ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐦚(ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ澨):
def __init__(self,*args,**kwargs):
pass
def ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ클(self,dactyl):
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ퐐=demiurgic.palpitation(dactyl)
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𠛲=mystificate.dark_voodoo(ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ퐐)
return ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𠛲
def ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐠯(self,whatever):
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱(whatever)
if __name__=="__main__":
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Forming...")
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺃ=ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐦚("epicaricacy","perseverate")
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺃ.ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐠯("Codswallop")
# Created by pyminifier (https://github.com/liftoff/pyminifier)
Не полагайтесь на запутывание. Как вы правильно сделали вывод, он предлагает очень ограниченную защиту. ОБНОВЛЕНИЕ: Вот ссылка на бумагу, которая в Dropbox изменила код запутанного питона. Подход - переделка кода операции является хорошим барьером, но, очевидно, его можно победить.
Вместо этого, как упоминали многие авторы, сделайте это:
В качестве альтернативы, как это делает Python IDE WingIDE: Отдайте код . Правильно, отдайте код и попросите людей вернуться для обновления и поддержки.
Доставка файлов .pyc имеет свои проблемы - они не совместимы ни с одной другой версией python, кроме версии python, с которой они были созданы, что означает, что вы должны знать, какая версия python работает в системах, в которых будет работать продукт. Это очень ограничивающий фактор.
В некоторых случаях может быть возможно переместить (все или, по крайней мере, ключевую часть) программного обеспечения в веб-сервис, который размещает ваша организация.
Таким образом, проверки лицензии могут выполняться в безопасности вашей собственной серверной комнаты.
Хотя идеального решения не существует, можно сделать следующее:
Если вызов на родной код будет удален, программа все равно не запустится. Если он не будет удален, лицензия будет применена.
Хотя это не кроссплатформенное или чисто питонное решение, оно будет работать.
Используйте Cython. Он будет компилировать ваши модули в высокопроизводительные C-файлы, которые затем могут быть скомпилированы в собственные двоичные библиотеки. Это в основном нереверсивно по сравнению с байткодом .pyc!
Я написал подробную статью о том, как настроить Cython для проекта Python, проверьте это:
Я думаю, что есть еще один метод защиты вашего кода Python; часть метода запутывания. Я считаю, что была такая игра, как Mount and Blade или что-то, что изменило и перекомпилировало их собственного интерпретатора питона (оригинальный интерпретатор, который я считаю открытым исходным кодом) и просто изменил коды OP в таблице кодов OP, чтобы они отличались от стандартных кодов OP python.
Таким образом, источник python немодифицирован, но расширения файлов файлов * .pyc отличаются, и коды операций не совпадают с общедоступным интерпретатором python.exe. Если вы проверили файлы данных игр, все данные были в исходном формате Python.
Все виды неприятных уловок могут быть сделаны, чтобы связываться с незрелыми хакерами таким образом. Остановить группу неопытных хакеров легко. Это профессиональные хакеры, которых вы вряд ли победите. Но я полагаю, что большинство компаний не держат профессиональных хакеров в штате долго (вероятно, потому что все взломано). Но незрелые хакеры повсюду (читай как любопытный ИТ-персонал).
Например, в измененном интерпретаторе вы можете разрешить ему проверять определенные комментарии или строки документа в вашем источнике. Вы можете иметь специальные коды OP для таких строк кода. Например:
OP 234 для исходной строки "# Copyright Я написал это" или скомпилируйте эту строку в коды операций, которые эквивалентны «if False:», если отсутствует «# Copyright». В основном отключение целого блока кода по какой-то неясной причине.
Один из вариантов использования, когда может быть возможна перекомпиляция модифицированного интерпретатора, - это когда вы не написали приложение, оно большое, но вам платят за его защиту, например, когда вы являетесь выделенным администратором сервера для финансового приложения.
Я нахожу немного противоречивым оставлять исходный код или коды операций открытыми для глазных яблок, но использовать SSL для сетевого трафика. SSL также не на 100% безопасен. Но это используется, чтобы помешать большинству глаз читать это. Небольшая мера предосторожности разумна.
Кроме того, если достаточное количество людей считает, что исходный код и коды операций Python слишком заметны, вполне вероятно, что кто-то в конечном итоге разработает хотя бы простой инструмент защиты для него. Таким образом, все больше людей, спрашивающих «как защитить приложение Python», только способствуют этой разработке.
Единственный надежный способ защитить код - запустить его на сервере, которым вы управляете, и предоставить своим клиентам клиент, который взаимодействует с этим сервером.
В зависимости от того, кто является клиентом, простой механизм защиты в сочетании с разумным лицензионным соглашением будет намного более эффективным, чем любая сложная система лицензирования / шифрования / фальсификации.
Лучшим решением будет продажа кода как услуги, скажем, путем размещения услуги или предложения поддержки - хотя это не всегда практично.
Доставка кода в виде файлов .pyc
предотвратит защиту вашей защиты несколькими #
, но вряд ли это эффективная защита от пиратства (как если бы была такая технология), и в конце концов, она не должен достичь ничего, что будет иметь приличное лицензионное соглашение с компанией.
Сконцентрируйтесь на том, чтобы сделать ваш код максимально удобным в использовании - наличие счастливых клиентов принесет вашей компании гораздо больше денег, чем предотвращение теоретического пиратства..
Еще одна попытка усложнить кражу вашего кода - использовать jython, а затем использовать java obfuscator.
Это должно работать довольно хорошо, так как jythonc переводит код питона на Java, а затем Java компилируется в байткод. Таким образом, вы не можете запутать классы, и будет очень трудно понять, что происходит после декомпиляции, не говоря уже о восстановлении фактического кода.
Единственная проблема с jython заключается в том, что вы не можете использовать модули python, написанные на c.
Я был удивлен, не увидев pyconcrete в любом ответе. Может быть, потому что это новее, чем вопрос?
Это может быть именно то, что вам нужно (ред.).
Вместо того, чтобы запутывать код, он шифрует его и расшифровывает во время загрузки.
Защитите рабочий поток скрипта Python
- your_script.py
импорт пиконкрета
- pyconcrete будет подключать модуль импорта
- когда ваш скрипт импортирует
MODULE
, Pyconcrete Import Hook сначала попытается найтиMODULE.pye
, а затем расшифроватьMODULE.pye
через_pyconcrete.pyd
и выполнить расшифрованные данные (как .pyc content)- зашифровать & расшифровать запись секретного ключа в
_pyconcrete.pyd
(как DLL или SO) секретный ключ будет скрыт в двоичном коде, не может увидеть это прямо в представлении HEX
Лучшее, что вы можете сделать с Python, - это скрыть вещи.
Возможно, вы сможете добавить некоторую дополнительную неясность, зашифровав ее часть и расшифровав на лету и передав в eval (). Но что бы вы ни делали, кто-то может сломать это.
Ничто из этого не помешает определенному злоумышленнику разобрать байт-код или покопаться в вашем api с помощью, dir и т. Д.
Как насчет подписания вашего кода стандартными схемами шифрования путем хеширования и подписи важных файлов и проверки его с помощью открытых ключей?
Таким образом, вы можете выдать файл лицензии с открытым ключом для каждого клиента.
Кроме того, вы можете использовать python obfuscator, как этот (просто гуглил его).