Форум сайта python.su
>я думаю таким же способом можно заюзать и Pyrex
достаточно сильные ограничения (все вкусности языка нельзя использовать)
> даже до pyc не добраться
легко. видел пример в python cookbook, по-моему, через marshal делалось.
Но ссылка на boo интересная
> вот можно его забрать вместе со средой разработки - http://www.sharpdevelop.net/OpenSource/SD/Download/
Офлайн
Как я понимаю, http://boo.codehaus.org
Только это уже не Питон. Сборная солянка, рвущая базовые принципы языка.
У ван Россума волосы должны бы дыбом стать.
А так что… Занятно
Отредактировано (Июль 13, 2007 17:54:11)
Офлайн
>Сборная солянка, рвущая базовые принципы языка.
О чем ты?
Офлайн
Это уже не Питон. Достаточно одной статической типизации. И еще множество новых ключевых слов. Меняется как грамматика языка, так и его семантика.
Boo, скорее - попытка создать новый язык, тесно сидящий на CLR, с заимствованием синтаксических конструкций из классического Питона, но никак не его порт а ля IronPython.
Новый, может быть, и получится. Задумка интересная. Только Питон лишь рядом лежал.
Писать нужно по другому и думать по другому тоже. Альтернатива С# - возможно. Но Шарп так легко не сдвинешь.
Так что - совсем новый язык, лишь отчасти похожий на Питон. Примерно как Ява или Шарп похожи на С++.
pyc можно развалить через marshal. Но не в исходник, а в пикод. Так же, как и неоттранслированный CLR экзешник. Разбираться с этим - грустное занятие.
Но если все pyc положить в архив собственного сочинения и приделать коротенький загрузчик по аналогу стандартного zipimport - задача сильно усложняется. Чтобы вытащить pyc потребуется поковыряться с дизассемблером и отладчиком. Как я говорил, такое уже делал. Примерно за день.
Но это уже лирика. Остапа понесло :)
Офлайн
>Достаточно одной статической типизации.
Динамическая типизация реализована не хуже Питонной (cm duck type)
есть опция компилятора - все динамически.
>И еще множество новых ключевых слов.
Это да, но можно их и не использовать, если не хочешь использовать доп. фичи , напр. тип видимости, локи объектов, и пр. см на сайте отличия Boo Python, там статья.
>Писать нужно по другому и думать по другому тоже.
Вообще не согласен. Портировал все свои исходники - переделки в основном - библиотечные классы разные. Код заметно уменьшается - на 25-30%.
О разнице в скорости - она фантастическая. Еще немалый плюс - идеальная (бесшовная) интеграция со всеми языками (> 50 на net платформе).
Кусок пиши на Haskell, другой на шарпе, третий на плюсах, и все будет как однородная система.
>отчасти похожий на Питон
все лучшее из Питона взято, lambda заменена на более компактную конструкцию Ruby - {x, y | x + y}.
то бишь попробуйте, проверяйте. от Питона я счас полностью отказался. в пользу Boo разумеется.
Офлайн
>pyc можно развалить через marshal. Но не в исходник, а в пикод.
pyc и есть пикод. вот способ восстановления исходника.
совпадение версий надо - иначе могут исключения вылетать
import marshal, dis
f = open('Mail.pyc', ‘rb’)
f.read(8)
s = marshal.load(f)
dis.dis(s)
Офлайн
Андрей СветловМожно уточнить по поводу сложности взлома? Насколько я понимаю pythonXX.dll все же остался снаружи (ведь если слинковаться статически, то нельзя будет использовать внешние .pyd файлы, а они почти всегда нужны). Тогда, мы добавляем свой built-in модуль в pythonXX.dll, который просто сохраняет все загружаемые sys.modules, потом вызываем decompyle, и вот он source code. То же относится и к другим pyd/dll. Может и этой схеме что-то не так, или за это время Вы придумали более надежный способ?
Немного переделал загрузчик и zipimporter - чтобы на зип было непохоже. Конечно, можно было дизассемблером расковырять…
Офлайн
Ага, можно и механизм импорта подкрутить, чтобы все вернуть к виду “как-бы pyc”.
Под сложностью понимаю то, что нужно будет изрядно потрудиться (создавая свой пропатченый pythonXX.dll, как в вашем варианте). Возня немалая, и, будете смеяться, большинству программистов такое будет либо не по силам, либо просто лень (лень чаще, конечго же).
Дальше. Питоновский код после дизассемблера не очень-то похож на исходники. Читать его не очень легко. Но - можно. Можно в результате кропотливого труда и все исходники воспроизвести.
Это примерно так же легко, как посмотреть на С++ с обилием своих же dll (имена светятся) или Яву/Шарп без фускатора. Да и с фускатором люди смотрят… А кто этим занимается? И, главное, ради чего?
Компании обычно нужно, чтобы Мастер Самоделкин не полез интенсивно изучать, модифицировать и распростронять. Подрывая источник дохода. Когда это сильно затруднено (приз не оправдывает затраченные усилия) - схема работает. Независимо от языка программирования. Если нет - то никак не убережешься.
Пример - игры. Компьютерные. Выходит новая игрушка - и быстро появляется патчик к ней. Который отучает от вредных привычек и позволяет передать игру куму-свату-брату. Борются с этим - и бесполезно, похоже. Только Интернет способен как-то защитить online-проект от стремления использовать продукт в обход владельца.
Но кто изучает исходники этой игрушки? Кому оно надо? Взломали, от привычки искать родной CD/DVD отучили - вот вам и счастье. Прилагались бы еще и исходники - поизучали бы желающие. Нет их - ну и ладно. И так хорошо. Играется себе народ, и проблемой исходников не озабочен - он и слова такого не знает.
Офлайн
import marshal, disЧто-то не совсем исходник :
f = open('Mail.pyc', ‘rb’)
f.read(8)
s = marshal.load(f)
dis.dis(s)
Офлайн
Андрей СветловЯ - не профессионал, но это заняло у меня 14 минут (включая чтение кода, правку и компиляцию):
Под сложностью понимаю то, что нужно будет изрядно потрудиться (создавая свой пропатченый pythonXX.dll, как в вашем варианте). Возня немалая, и, будете смеяться, большинству программистов такое будет либо не по силам, либо просто лень (лень чаще, конечго же).
Андрей СветловТут слегка патченый decompyle (a вообще-то, если лень возиться, платная служба есть в сети - всё сделают за вас)
Дальше. Питоновский код после дизассемблера не очень-то похож на исходники. Читать его не очень легко. Но - можно. Можно в результате кропотливого труда и все исходники воспроизвести.
Офлайн