Thursday, December 18, 2008

Как скрыть код скрипта на Python для последующей его продажи.

Если вы пишите скрипты на продажу либо на заказ рано или поздно встает вопрос как скрыть код скрипта который вы продаете и не отдавать исходный код. Зачем это надо? Например для того чтобы скрипт сам по себе не пошел по рукам, за что вы будете получать 0$ со скрипта, который вы сделали для продажи. Для PHP был создан Zend Encoder. Но я уже не сижу на PHP, поэтому сегодня расскажу как скрыть код скрипта на Python.

Дело в том что все скрипты на Python при первом запуске пишутся интерпретатором в виде байткода в файлы с расширением .pyc (это не рус типа РУСский или что-нибудь в этом роде, это PYthonCompiled - т.е. скомпилированый Python код). Интерпретатор Python по умолчанию пытается запускать именно эти файлы, а если он не существует, то использует исходный код после чего записывает этот же pyc-файл. Эти файлы можно создать, так сказать, вручную перед распространением файлов.

Делается это так
>>> import py_compile
>>> py_compile.compile('megascript.py')

В результате рядом с megascript.py будет создан файл megascript.pyc который вы и будете продавать. Удачной разработки, и больших заработков!

Links: PEP 304 - Controlling Generation of Bytecode Files

Понравилось? помогло? – Подпишись на RSS!

5 comments:

hmuriy said...

А как декомпилировать!?

Prudnikov Vladimir said...

Никак, иначе какой смысл был бы говорить о скрытии кода для продажи если его можно декомпилировать. Ну конечно если мастера которые декомпилят любой софт, но это тема другого разговора.

Сергей Шепелев said...

Еще как, Владимир. Конечно, не может быть смысла продавать якобы скрытый байткод питона, но это не тема отдельных разговоров, просто ваш пост содержит в себе неверную информацию.

Существует:
- модуль marshal, который декомпилирует обратно код питона, совместимый с версиями до 2.3.
- https://sourceforge.net/projects/decompyle, который декомпилирует почти всё остальное.

Пожалуйста, не путайте питонский байт-код http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82-%D0%BA%D0%BE%D0%B4 и компиляцию-трансляцию в объектные модули http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) (в процессе которой получаются двоичные объектные файлы, и откуда, ага, ничего не вытащить без других разговоров).

Prudnikov Vladimir said...

Ну 100% от всех умных скрыть в любом случае не получится. Ломают все что угодно. Тот методо что я описал думаю покроет 99% случаев.

PyKaB said...

Точнее покроет 1%

import marshal, dis
f = open('megascript.pyc', 'rb')
f.read(8)
s = marshal.load(f)
dis.dis(s)

Чуть лучше вариант с py2exe для венды

Post a Comment