Project "ORION"
автор:StranikS_Scan
Версия: 1.3.5 | Дата: 23.08.2017
Описание:
- Перед вами универсальный инструмент для компиляции, декомпиляции и обфускации python-модов. Программа использует технологию Python4Delphi и взаимодействует с python-движком через dll-библиотеку. Исходники модулей питона запакованы в zip-архив, который идёт вместе с программой. Для полноценной автономной работы Ориона достаточно иметь dll-библиотеку и zip-архив с модулями питона. При этом вы можете подключиться и к любому python-движку, который уже установлен на вашем компьютере.
Ограничения:
- ОС Windows XP/Vista/7/8/10
- поддерживаются Python 2.3-3.4
- dll-файлы только версии x86
- тестировалось на Python 2.6.6, 2.7.10, 3.4.2 и их более ранних версиях
- запуск только из каталогов, не содержащих в путях буквы русского алфавита
Особенности:
- Реализован интерфейс близкий к классическим средам программирования:
- команды: выполнить редактируемый скрипт (Exec script), выполнить скрипт с параметрами (Execute script), скомпилировать скрипт (Compile script), выполнить скрипт из отдельного файла с параметрами (Parameters -> Execute) и др.
- компиляция путем простого сохранения загруженного скрипта в файл pyc-формата (Save as...) и компиляция отдельных файлов (Compile py-file...), групповая компиляция всех файлов в указанной папке (Compile py-folder...)
- декомпиляция скриптов при открытии pyc-файлов, декомпиляция отдельных файлов (Decompile pyc-file...) и групповая декомпиляция всех файлов в заданной папке (Decompile pyc-folder...), определение версии компилятора по заголовку файла и др.
- обработка питон-кода в редакторе различными встроенными функциями (меню Script)
- и др.
- Расширенные возможности ввода:
- собственный синтаксис Ориона (@!abc -> print abc; @!!module -> import module)
- автоматическое удаление префиксов строк ввода/вывода ">>> " и "<<< " при выполнении скрипта
- различные вспомогательные функции: вывод и добавление пути в окружение <sys.path>, вставка имён файлов (Insert file name), вставка текста из другого файла (Insert text from a file), переход на новую строку (Shift+Enter) и др.
- окно экспресс-ввода для выполнения отдельных скриптов/команд в текущем сеансе (Express Script)
- выпадающие списки атрибутов и свойств модулей, классов, объектов, элементов через меню и через символ ".", при этом объект должен быть предварительно идентифицирован средой
- и др.
- Формат данных:
- определение формата py-файла при загрузке по метке в первой строке и преамбуле в тексте
- в самом редакторе данные отображаются только в формате ANSI
- обмен данными с компилятором всегда идёт в формате ANSI для Python 2.X и в формате UTF-8 для Python 3.X
- имеется возможность вставки метки # -*- coding: -*- с описанием формата в начало скрипта через выпадающее меню в строке состояния
- Декомпиляторы:
- на данный момент Орион поддерживает 4 декомпилятора: Uncompile2, Decompyle++, Fupy и pyREtic
- все декомпиляторы "как они есть" вынесены в отдельную библиотеку dcpack.zip
- любой желающий может изменить, исправить, отредактировать, заменить исходники декомпиляторов в dcpack.zip, и даже сделать свой вариант библиотеки dcpack.zip
- Работа с запущенным WOT-клиентом напрямую:
- разработан специальный пакет WOT-Transmission (wottransmission.zip) для обмена данными с клиентом игры через файловые буферы
- реализованы функции кон****ного обмена данными со средой клиента, импорта, перезагрузки, удаления модулей и др.
- Обфускация скриптов и защита модов:
- имеется сервис для обфускации имён пользовательских переменных, классов и процедур
- обфускатор для модификации и запутывания байт-кода при компиляции py-файлов
- протектор для pyc-файлов, препятствующий анализу и дизассемблированию кода с целью его реверса
- также программа дополнена модифицированным дизассемблером dispack.zip на основе стандартного с выводом информации как в отдельный файл так и в самом редакторе в удобной форме
Как защитить свой код:
https://www.virustotal.com/ru/file/...e9a1ec373c8babcc29c307ce/analysis/1481997775/
Не следует!
- Применять протектор к необфусцированному скрипту, т.к. в этом случае код может быть декомпилирован непосредственно из среды питона
- Ограничиваться только обфускацией байт-кода скрипта без наложения протектора, т.к. в таком случае байт-код легко доступен для анализа и модификации с последующей декомпиляцией
- Применять протектор несколько раз к одному скрипту, т.к. на практике это не увеличивает стойкость защиты, но может нарушить работу скрипта
- Включать опцию "Lock attributes review and double import" если ваш скрипт подменяет реальный модуль клиента игры или у вас несколько модулей и они импортируют друг друга, так как атрибуты модулей из вне доступны не будут
Внимание! Если вы компилируете скрипт с обфускацией, то ни в коем случае предварительно не сжимайте его в строку командой "Move script to ZipBase64-box", так как байт-код вашего скрипта не будет обфусцирован и его можно легко извлечь!
История версий:
Декомпилированные питон-файлы WOT-клиента
Архивы:
0.9.10_Decompile_WOT.zip 2,81 Мб
0.9.9_Decompile_WOT.zip 2,79 Мб
Для работы с файлами:
- Скачайте архив и извлеките содержимое в любую папку.
- Откройте Notepad++ и перенесите в него папку scripts\client, затем дождитесь когда он загрузит файлы.
- Для поиска по всем файлам жмём CTRL+F, вводим строку поиска и жмём "Найти всё во всех Открытых Документах", затем наслаждаемся результатом.
- Чтобы закрыть все файлы в Notepad++ и при этом он не пытался их все открыть заново при следующем запуске, закрывайте файлы командой из главного меню "Файл - Закрыть все"
FAQ по PjOrion
Общие вопросы:
1. Какие файлы входят в состав Ориона и какого их назначение?
2. Минимальные требования для работы с Орионом
3. Как вернуть все настройки программы по умолчанию?
Для этого достаточно перед запуском программы удалить файл PjOrion.ini.
- PjOrion.exe - оконная графическая оболочка, именуемая далее редактором или терминалом, она позволяет редактировать py-скрипты Питона, выполнять их обработку, компиляцию, обфускацию, затем декомпилировать и дизассемблировать pyc-файлы, а также взаимодействовать с клиентом игры
- pythonXX.dll - библиотека Питона XX-версии для x86 систем, необходима для эмуляции исполняемой среды Питона, при этом подключение к библиотеке осуществляется через редактор
- pythonXX.zip - пакет основных скриптов из папки Lib из сборки Питона XX-версии, необходим для работы со стандартными функциями Питона через терминал
- dcpack.zip - пакет со скриптами и файлами декомпиляторов, можно свободно редактировать и дорабатывать
- dispack.zip - пакет со скриптами дизассемблера, используемого Орионом, можно свободно редактировать и дорабатывать
- wottransmission.zip - пакет со скриптами и файлами трансмиттера, обеспечивающего обмен данными с клиентом игры через редактор, можно свободно редактировать и дорабатывать
- PjOrion.ini - файл с настройками программы, автоматически сохраняется при выходе из программы и автоматически загружается при её запуске
2. Минимальные требования для работы с Орионом
- ОС Windows XP/Vista/7/8/10
- графическая оболочка PjOrion.exe
- Python 2.3-3.4 dll-файл для x86 систем
- каталог программы не должен содержать в путях буквы русского алфавита
3. Как вернуть все настройки программы по умолчанию?
Для этого достаточно перед запуском программы удалить файл PjOrion.ini.
Как Орион взаимодействует с Питоном?
Для эмуляции среды Питона используется pythonXX.dll библиотека. Она поставляется вместе с Питоном и входит в состав его x86 дистрибутива. Все дистрибутивы выкладываются разработчиками Питона здесь. Точно такой же dll-файл идёт в комплекте и с Орионом. Терминал посредством технологии Python4Delphi импортирует функции библиотеки, а затем использует их для эмуляции сеанса, передачи команд и получения результатов их выполнения.
[*]Как запустить на терминале нужную версию Питона?
Для этого необходимо подключиться к соответствующей версии dll-библиотеки. От версии библиотеки зависит и версия среды. При первом запуске Ориона он по умолчанию пытается установить связь с python27.dll, лежащей в папке вместе с ним, и инициализировать работу среды. В настройках Главное меню - Terminal - Settings - Paths вы можете самостоятельно указать к какой именно библиотеке ему следует подключаться. При этом можно указать как файл, лежащий в папке с Орионом, так и файл в папке оригинального Питона, например C:\PythonXX\
- 3. Как перезапустить сеанс работы с Питоном?
- Иногда необходимо завершить текущий сеанс и начать новый, т.е. сделать рестарт среды, не перезапуская Орион. Для этого в главном меню есть функция Terminal - Restart (Alt+R).
- >>> ================================ RESTART ================================
- 4. Как выполнить скрипты при загрузке Ориона?
- Если при подключении Ориона к dll-библиотеке необходимо каждый раз выполнять какой-то набор скриптов или команд, то для этого можно воспользоваться окном "Execute after connecting" в настройках программы Главное меню - Terminal - Settings. Например, запись в этом окне:
PHP:
print ('Hello user!')
5. Как узнать текущие пути в окружении среды?Окружение среды - это папки и пути на диске, которые доступны в Питоне. Вывести список путей можно, выполнив в редакторе код:
PHP:
import sys
print sys.path
Это довольно просто, если воспользоваться соответствующей командой в главном меню Terminal - Add folder to <sys.path>... Однако следует обратить внимание на то, что при перезагрузке среды или при перезапуске Ориона список путей вернется к первоначальному. Если вы хотите чтобы ваш путь добавлялся в окружение каждый раз при инициализации среды, то в окне Terminal - Settings в поле "Execute after connecting" следует прописать соответствующий скрипт, например такой:
PHP:
import sys
sys.path.insert(0, 'C:\\Developer\\MyScripts')
7. Какие модули импортированы в среду?
Список всех импортирован модулей храниться в системной переменной modules и может быть получен так:
PHP:
import sys
print sys.modules
Код:
<<< traceback: <module 'traceback' from 'C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion\python27.zip\traceback.pyc'>
<<< copy_reg: <module 'copy_reg' from 'C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion\python27.zip\copy_reg.pyc'>
<<< sre_compile: <module 'sre_compile' from 'C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion\python27.zip\sre_compile.pyc'>
<<< imp: <module 'imp' (built-in)>
...
Если вы используете dll-библиотеку и pythonXX.zip архив из папки с Орионом, то такая ситуация вполне может возникнуть. В zip-архиве нет стандартных pyd-библиотек из папки C:\PythonXX\DDLs\ оригинального Питона, так как обращения к ним из архива в Питоне не возможно. Поэтому использование модулей из таких библиотек по умолчанию будет не доступно. Например, выполнение вот такого кода:
PHP:
import urllib
Код:
<<< Traceback (most recent call last):
<<< File "<string>", line 1, in <module>
<<< File "", line 26, in <module>
<<< File "", line 47, in <module>
<<< ImportError: No module named _socket
Первый способ:
- копируем папку DDLs с pyd-файлами из оригинального Питона в папку с Орионом
- перезапускаем программу или делаем рестарт среды Terminal - Restart (Alt+R)
- подключаем терминал к dll-библиотеке в папке с оригинальным Питоном C:\PythonXX\pythonXX.dll, после чего весь его функционал станет доступен Ориону. Однако в этом случае у вас должна стоят x86 версия Питона
1. Режимы вывода строк и значений в Орионе
Несмотря на свои возможности Орион умеет отображать только печатаемые символы из ANSI, UTF, OEM и др. кодировок. Остальные символы, входящие в состав юникодовой таблицы ему не доступны. Однако любой символ кодировочной таблицы легко может быть представлен своим порядковым номером или кодом. Для вывода символов посредством их замещения на коды в программе реализовано несколько режимов вывода строк.
2. Как вывести непечатаемые символы в виде кодов?
3. Вместо кириллицы выводятся коды, что делать?
4. Как задать формат py-файла?
Несмотря на свои возможности Орион умеет отображать только печатаемые символы из ANSI, UTF, OEM и др. кодировок. Остальные символы, входящие в состав юникодовой таблицы ему не доступны. Однако любой символ кодировочной таблицы легко может быть представлен своим порядковым номером или кодом. Для вывода символов посредством их замещения на коды в программе реализовано несколько режимов вывода строк.
- Chars - символы не замещаются кодами, редактор пытается отобразить все символы согласно локальной ANSI кодировке
- Chars, Hex -
2. Как вывести непечатаемые символы в виде кодов?
3. Вместо кириллицы выводятся коды, что делать?
4. Как задать формат py-файла?
1. Подсветка кода
В редакторе реализована синтаксическая подсветка кода Питона, отдельно для версий 2.X и 3.X. Подсветка сделана за счет использования компонентов TSynEditor и TSynUniSyn из пакета SynEditStudio 5.8Fix3 под Delphi.
2. Синтаксис Ориона
Для удобства работы кон****ным способом в Орионе добавлены сокращения для вызова некоторых функций и команд.
В Питоне 2.X:
3. Список атрибутов
В Орионе есть возможность вызова и просмотра списка атрибутов у объектов, модулей, переменных, экземпляров классов и т.д. Для вызова списка необходимо чтобы объект был инициализирован в среде, после чего вызвать список можно прописав точку "." после его имени в редакторе. Если необходимо вывести не только публичные атрибуты, а также и приватные, то следует воспользоваться пунктом в выпадающем меню мыши Show attributes (Ctrl+Shift+Space).
4. Экспресс-редактор
Для удобства работы со средой в Орионе помимо основного редактора также сделан и дополнительный, так называемый, экспресс-редактор. Для его вызова достаточно нажать F10 или зайти в главное меню Run - Express script... (F10). С его помощью можно выполнять скрипты, не закрывая основной файл, копировать и хранить как во временном буфере отдельные отрывки кода, работать со средой в кон****ном режиме. Для временного сокрытия экспресс-редактора используйте клавишу ESC или кнопку Hide(ESC).
5. Ставим отступы
Как и в оригинальном Питоне в редакторе Ориона есть команды для работы с отступами:
6. Перенос на новую строку
Для переноса на новую строку в Питоне принято использовать левый слэш "\". Например:
Вставить такой слэш и перейти на новую строчку в редакторе по быстрому можно командой Continue on a new line (Shift+ENTER).
7. Вставка имени файла
Так как в Питоне имена файлов с путями должны быть записаны с двойными левыми слэшами "\\" (или одним, но правым "/"), то для упрощения этой задачи в Орионе есть функция Script - Insert - File name as text... Она вставит в текст полный путь к выбранному файлу, например вот так:
8. Вставка кода из файла
Если вам необходимо вставить с соблюдением отступа код из какого-либо файла, то для этого можно воспользоваться функцией Script - Insert - Text from a file...
9. Конвертирование текста из ANSI в UTF-8 и наоборот непосредственно в редакторе
Обычно такая необходимость появляется при работе с кириллицей, когда вы либо декомпилируете байт-код, либо хотите вставить строку на кириллице в текст скрипта, не меняя формат py-файла в целом. Для таких преобразований предусмотрены функции Script - Convert - Selected UTF-8 to ANSI (Alt+A) и Selected ANSI to UTF-8 (Alt+U). Чтобы ими воспользоваться достаточно предварительно выделить нужный текст в редакторе, после чего вызвать нужную функцию. Например, декодируем строку из UTF-8:
в читабельный ANSI:
10. Замена текста на hex-коды и наоборот
Довольно часто возникает задача конвертирования символов в последовательность шестнадцатеричных кодов (hex-кодов) и наоборот. Например, получить из ANSI строки:
строку в UTF-8:
а затем представить её hex-кодами:
В этом вам помогут функции Script - Convert - Selected Chars to Hex (Alt+H) и Selected Hex to Chars (Alt+C). В обоих случаях предварительно следует выделить исходный текст в редакторе.
11. Преобразование текста в Base64-кодировку и обратно
Хотите сохранить в скрипте текст из непечатаемыми символов, символов из другого языка или просто закодировать сообщение? Пожалуйста, Base64-кодировка содержит только видимые символы из ASCII-таблицы, что делает их всегда читабельными и печатаемыми. Для кодирования строки в редакторе достаточно выделить текст и воспользоваться функциями Script - Convert - Selected String to Base64 (Alt+B) и Selected Base64 to String (Alt+S). Например, строка:
легко может быть закодирована как:
В редакторе реализована синтаксическая подсветка кода Питона, отдельно для версий 2.X и 3.X. Подсветка сделана за счет использования компонентов TSynEditor и TSynUniSyn из пакета SynEditStudio 5.8Fix3 под Delphi.
2. Синтаксис Ориона
Для удобства работы кон****ным способом в Орионе добавлены сокращения для вызова некоторых функций и команд.
В Питоне 2.X:
- @!abc аналогично print abc
- @!!module тоже что и import module
- @!(abc) аналогично print(abc)
- @!!module тоже что и import module
3. Список атрибутов
В Орионе есть возможность вызова и просмотра списка атрибутов у объектов, модулей, переменных, экземпляров классов и т.д. Для вызова списка необходимо чтобы объект был инициализирован в среде, после чего вызвать список можно прописав точку "." после его имени в редакторе. Если необходимо вывести не только публичные атрибуты, а также и приватные, то следует воспользоваться пунктом в выпадающем меню мыши Show attributes (Ctrl+Shift+Space).
При работе с клиентом игры через WOT-Transmission атрибуты для объектов в среде клиента можно получить из трансмиттера, для чего достаточно переключить в выпадающем меню мыши источник атрибутов Select the attributes source с Orion на WOT.4. Экспресс-редактор
Для удобства работы со средой в Орионе помимо основного редактора также сделан и дополнительный, так называемый, экспресс-редактор. Для его вызова достаточно нажать F10 или зайти в главное меню Run - Express script... (F10). С его помощью можно выполнять скрипты, не закрывая основной файл, копировать и хранить как во временном буфере отдельные отрывки кода, работать со средой в кон****ном режиме. Для временного сокрытия экспресс-редактора используйте клавишу ESC или кнопку Hide(ESC).
5. Ставим отступы
Как и в оригинальном Питоне в редакторе Ориона есть команды для работы с отступами:
- при переводе каретки клавишей ENTER, после ввода символа ":", в новую строку отступы вставляются автоматически
- для быстрой вставки и удаления отступов перед строкой или перед блоком текста, достаточно выделить эту строку или целый блок и воспользоваться командами Increase Indent (Ctrl+]) и Decrease Indent (Ctrl+[)
- также юзверу доступны и альтернативные комбинации клавиш Tab и Shift+Tab
6. Перенос на новую строку
Для переноса на новую строку в Питоне принято использовать левый слэш "\". Например:
HTML:
message = 'Для переноса на новую строку в Питоне принято \
использовать левый слэш.'
7. Вставка имени файла
Так как в Питоне имена файлов с путями должны быть записаны с двойными левыми слэшами "\\" (или одним, но правым "/"), то для упрощения этой задачи в Орионе есть функция Script - Insert - File name as text... Она вставит в текст полный путь к выбранному файлу, например вот так:
HTML:
'C:\\Program Files (x86)\\Borland\\Delphi6\\Projects\\PjOrion\\Test\\test1.py'
Если вам необходимо вставить с соблюдением отступа код из какого-либо файла, то для этого можно воспользоваться функцией Script - Insert - Text from a file...
9. Конвертирование текста из ANSI в UTF-8 и наоборот непосредственно в редакторе
Обычно такая необходимость появляется при работе с кириллицей, когда вы либо декомпилируете байт-код, либо хотите вставить строку на кириллице в текст скрипта, не меняя формат py-файла в целом. Для таких преобразований предусмотрены функции Script - Convert - Selected UTF-8 to ANSI (Alt+A) и Selected ANSI to UTF-8 (Alt+U). Чтобы ими воспользоваться достаточно предварительно выделить нужный текст в редакторе, после чего вызвать нужную функцию. Например, декодируем строку из UTF-8:
HTML:
message = 'Привет!'
HTML:
message = 'Привет!'
Довольно часто возникает задача конвертирования символов в последовательность шестнадцатеричных кодов (hex-кодов) и наоборот. Например, получить из ANSI строки:
HTML:
message = 'Привет!'
HTML:
message = 'Привет!'
HTML:
message = '\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82\x21'
11. Преобразование текста в Base64-кодировку и обратно
Хотите сохранить в скрипте текст из непечатаемыми символов, символов из другого языка или просто закодировать сообщение? Пожалуйста, Base64-кодировка содержит только видимые символы из ASCII-таблицы, что делает их всегда читабельными и печатаемыми. Для кодирования строки в редакторе достаточно выделить текст и воспользоваться функциями Script - Convert - Selected String to Base64 (Alt+B) и Selected Base64 to String (Alt+S). Например, строка:
HTML:
message = '\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82\x21'
HTML:
message = 'XHhEMFx4OUZceEQxXHg4MFx4RDBceEI4XHhEMFx4QjJceEQwXHhCNVx4RDFceDgyXHgyMQ=='
print message.decode('base64')
<<< '\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82\x21'
1. Как получить pyc-файл?
В Орионе есть несколько способов скомпилировать скрипт в pyc-файл. Все они максимально упрощают этот процесс и делают его интуитивно понятым для пользователя.
2. Как скомпилировать за раз несколько скриптов в папке?
Для пакетной компиляции скриптов в папке и её подпапках следует использовать функцию Run - Compile py-folder... Скомпилированные файлы сохраняются в тех же папках, в которых лежат исходные скрипты. Если необходимо исходные py-файлы удалить после компиляции достаточно поставить галочку в главном меню Run - Delete py-files after compile.
В Орионе есть несколько способов скомпилировать скрипт в pyc-файл. Все они максимально упрощают этот процесс и делают его интуитивно понятым для пользователя.
- Самый быстрый способ это воспользоваться функцией в главном меню Run - Compile script (Ctrl+F9). В этом случае редактор потребует сохранить загруженный скрипт в py-файл, после чего создаст одноименный pyc-файл в той же папки, но уже с байт-кодом
- Если вы не хотите сохранять исходный скрипт на диск, то вы можете создать pyc-файл через функцию Terminal - Save as ... В диалоговом окне потребуется выбрать формат выходного файла. В данном случае *.pyc
- Наконец скомпилировать py-файл можно и не открывая его в редакторе. Для этого есть функция Run - Compile py-file...
2. Как скомпилировать за раз несколько скриптов в папке?
Для пакетной компиляции скриптов в папке и её подпапках следует использовать функцию Run - Compile py-folder... Скомпилированные файлы сохраняются в тех же папках, в которых лежат исходные скрипты. Если необходимо исходные py-файлы удалить после компиляции достаточно поставить галочку в главном меню Run - Delete py-files after compile.
1. Какие способы выполнения скриптов доступны в Орионе?
Орион позволяет исполнять в среде Питона как скрипты, так и скомпилированные pyc-файлы. Если вы хотите выполнить pyc-файл, то для этого необходимо воспользоваться окном запуска скриптов с параметрами Run - Parameters... и кнопкой Execute. В свою очередь py-скрипты могут быть выполнены гораздо большим числом способов:
Кон****ное выполнение скриптов - самый простой и часто используемый способ работы со средой Питона. Если вы написали в редакторе код или открыли в редакторе py-файл, то для его выполнения в среде достаточно воспользоваться функцией Run - Exec script (F5). Например, записываем в редакторе код:
выполняем его командой F5. Затем переписываем на
и выполняем через F5 уже новый код. В результате получаем:
Как видите, выполнение первого кода привело к инициализации в текущем сеансе среды переменной "a" c последующей записью в неё значения 123. В результате этого исполнение второго кода привело к выводу на экран содержимого этой переменной. Для удаления переменной "a" из памяти среды, достаточно выполнить вот такой код
Если вы хотите выполнить код из экспресс редактора, то для этого в его окне предусмотрена кнопка Exec (F5).
3. Запуск скриптов и pyc-файлом с передачей входных параметров
Для выполнения скрипта или байт-кода в среде не обязательно открывать файл в редакторе. Сделать это можно и удалённо. Для чего предусмотрено окно запуска скриптов с параметрами Run - Parameters...
Здесь:
Как известно в Питоне список входных параметров при выполнении скрипта передается в системную переменную sys.argv в виде строкового массива. При этом нулевая ячейка массива обычно указывает на полное имя исполняемого файла. Данное правило реализовано и в Орионе.
Рассмотрим пример скрипта, выводящего по порядку список входных параметров:
Cохраним скрипт как Example.py или Example.pyc, затем в окне Parameters укажем путь к файлу и зададим строку с двумя параметрами, например:
После чего выполним скрипт, нажав на Execute. Результатом выполнения будет:
Обратите внимание, что выполнить с параметрами можно также и скрипт, уже загруженный в редактор. Для этого в главном меню предусмотрена команда Run - Execute script (F9). При выполнении скрипта через эту команду в среду Питона предварительно передается список параметров из окна Parameters и полный путь к файлу скрипта.
По мимо этого пользователь предварительно может задать значение и для атрибута __name__. Данный атрибут обычно инициализируется непосредственно при выполнении или импорте скрипта и указывает на его статус. Если скрипт запущен как самостоятельная программа, то атрибут всегда возвращает значение "__main__", если скрипт импортирован в качестве модуля, то тогда возвращается его имя в иерархии модулей. Задавая параметр <__name__> в Орионе самостоятельно, пользователь может имитировать импорт текущего скрипта. Это может быть полезно, например, при его отладке.
4. Импортируем скрипт как модуль
Импорт модулей в Орионе по сути ни чем не отличается от импорта в оригинальном редакторе Питона. Если у вас на диске есть py- или pyc-файл, то вы можете импортировать его в среду Питона в любой момент. Для этого:
Добавляем папку со скриптом в пути окружения среды Питона (Главное меню - Terminal - Add folder to <sys.path>...)
Записываем в редакторе код
и выполняем его командой F5
В случае с Орионом добиться того же можно и более простым путем, если воспользоваться функцией импорта внешних файлов Run - Import/Reload script of file... Для импорта всех модулей из текущей папки предусмотрена функция Run - Import the all scripts from folder...
Наконец импортировать в Орионе можно не только отдельные файлы, но и непосредственно редактируемый скрипт, т.е. открытый в редакторе. Для этого предусмотрена команда Run - Import/Reload script (F6).
5. Перезагрузка модулей в среде
Будучи один раз импортированным в рабочую среду Питона модуль остается в её памяти, и для обращения к его процедурам и классам достаточно получить только соответствующую ссылку. Такой подход логичен с точки зрения экономии ресурсов, но создает проблему для тех кто пытается перезагрузить ранее импортированный модуль.
Суть проблемы в том, что созданный в памяти модуль может вызываться и использоваться многократно в других модулях, подпрограммах и во всех возможных уголках работающей среды. В тоже время перезагрузка модуля стандартной функцией reload() не приводит к уничтожению или замене новым старого кода в памяти Питона. Среда выделит новую память под модуль, не смотря на то, что его имя совпадает со старым. А наличие ссылок на старый модуль не даст сборщику мусора удалить его из памяти среды. Как результат старый экземпляр модуля так и останется в закоулках памяти и другие модули и подпрограммы, использовавшие его ранее, продолжат ссылаться на него.
Очевидно, что решение данной проблемы заключается в поиске всех ссылок на старую версию модуля с последующим их удалением или подменой на новую ссылку. Именно такой подход и реализован в Орионе в функциях Run - Import/Reload script (F6), Run - Import/Reload script of file... и Run - Selected <module> - Delete <module> and references it.
Обратите внимание для работы указанных функций необходим пакет wottransmission.zip. При его отсутствии функции работать не будут.
6. Как узнать, используется ли загруженный модуль другими модулями?
В большинстве случаев узнать об этом можно через поиск внешних ссылок, ссылающихся на интересующий вас модуль. Рассмотрим это на примере модуля math. Импортируем данный модуль и выясним сколько ссылок на него зарегистрировано сейчас в системе:
Полученная цифра 3 включает в себя:
Сохраним его как Example.py и импортируем командой F6, а затем повторно выведем число ссылок на модуль math. В результате получим:
Таким образом, любую ссылку начиная с четвёртой следует считать внешней ссылкой. В данном случае таковой является обращение math.pi.
Для упрощения вывода количества ссылок на модули в Орионе реализована функция Run - Selected <module> - Print <sys.getrefcount>. Чтобы ею воспользоваться потребуется предварительно выделить имя модуля или в верхнем окне Ориона или непосредственно в редакторе. Ниже показан результат работы функции для разных модулей:
7. Как правильно перезагрузить модуль?
Для перезагрузки модуля в Орионе не требуется каких-либо отдельных действий. Достаточно импортировать модуль еще раз встроенными функциями Run - Import/Reload script (F6), Run - Import/Reload script of file... Если обнаружиться что модуль с таким именем уже был импортирован, то будет выполнен поиск всех ссылок на элементы/объекты старого модуля с последующей их заменой на новые.
8. Удаляем модуль из системы и все ссылки на него
Для полноценного удаления импортированного модуля предусмотрена функция Run - Selected <module> - Delete <module> and references it. Данная операция удаляет модуль из окружения среды и пытается затереть все ссылки на него в других модулях. Если какую-либо ссылку удалить не удастся, то программа сообщит вам об этом. Перед вызовом команды следует предварительно выделить имя модуля или в верхнем окне Ориона или непосредственно в редакторе.
Орион позволяет исполнять в среде Питона как скрипты, так и скомпилированные pyc-файлы. Если вы хотите выполнить pyc-файл, то для этого необходимо воспользоваться окном запуска скриптов с параметрами Run - Parameters... и кнопкой Execute. В свою очередь py-скрипты могут быть выполнены гораздо большим числом способов:
- кон****ным способом через функции главного меню Run - Exec script (F5) и Run - Execute script (F9)
- через окно запуска скриптов с параметрами Run - Parameters..., используя кнопку Execute
- путем импорта скрипта в качестве модуля через Run - Import/Reload script (F6) или Run - Import/Reload script from file...
Кон****ное выполнение скриптов - самый простой и часто используемый способ работы со средой Питона. Если вы написали в редакторе код или открыли в редакторе py-файл, то для его выполнения в среде достаточно воспользоваться функцией Run - Exec script (F5). Например, записываем в редакторе код:
HTML:
a = 123
HTML:
print a
HTML:
<<< 123
HTML:
del a
3. Запуск скриптов и pyc-файлом с передачей входных параметров
Для выполнения скрипта или байт-кода в среде не обязательно открывать файл в редакторе. Сделать это можно и удалённо. Для чего предусмотрено окно запуска скриптов с параметрами Run - Parameters...
Здесь:
- File to be executed - pyc- или py-файл, который будет выполнен
- Parameters - список входных параметров
- <__name__> - значение, передаваемое в атрибут __name__
- Restart сonnection - опция автоматического перезапуска среды перед выполнением скрипта
Как известно в Питоне список входных параметров при выполнении скрипта передается в системную переменную sys.argv в виде строкового массива. При этом нулевая ячейка массива обычно указывает на полное имя исполняемого файла. Данное правило реализовано и в Орионе.
Рассмотрим пример скрипта, выводящего по порядку список входных параметров:
HTML:
import sys
for value in sys.argv:
print value
HTML:
Parameters
"Hello, users!" "It's parameter is the number two"
HTML:
<<< C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion\FAQ\Example.pyc
<<< Hello, users!
<<< It's parameter is the number two
>>> PjOrion: External script execution completed!
По мимо этого пользователь предварительно может задать значение и для атрибута __name__. Данный атрибут обычно инициализируется непосредственно при выполнении или импорте скрипта и указывает на его статус. Если скрипт запущен как самостоятельная программа, то атрибут всегда возвращает значение "__main__", если скрипт импортирован в качестве модуля, то тогда возвращается его имя в иерархии модулей. Задавая параметр <__name__> в Орионе самостоятельно, пользователь может имитировать импорт текущего скрипта. Это может быть полезно, например, при его отладке.
4. Импортируем скрипт как модуль
Импорт модулей в Орионе по сути ни чем не отличается от импорта в оригинальном редакторе Питона. Если у вас на диске есть py- или pyc-файл, то вы можете импортировать его в среду Питона в любой момент. Для этого:
Добавляем папку со скриптом в пути окружения среды Питона (Главное меню - Terminal - Add folder to <sys.path>...)
Записываем в редакторе код
HTML:
import <Имя_скрипта>
В случае с Орионом добиться того же можно и более простым путем, если воспользоваться функцией импорта внешних файлов Run - Import/Reload script of file... Для импорта всех модулей из текущей папки предусмотрена функция Run - Import the all scripts from folder...
HTML:
<<< Importing...
<<< C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion\FAQ\Example.py
<<< Module 'Example' imported!
5. Перезагрузка модулей в среде
Будучи один раз импортированным в рабочую среду Питона модуль остается в её памяти, и для обращения к его процедурам и классам достаточно получить только соответствующую ссылку. Такой подход логичен с точки зрения экономии ресурсов, но создает проблему для тех кто пытается перезагрузить ранее импортированный модуль.
Суть проблемы в том, что созданный в памяти модуль может вызываться и использоваться многократно в других модулях, подпрограммах и во всех возможных уголках работающей среды. В тоже время перезагрузка модуля стандартной функцией reload() не приводит к уничтожению или замене новым старого кода в памяти Питона. Среда выделит новую память под модуль, не смотря на то, что его имя совпадает со старым. А наличие ссылок на старый модуль не даст сборщику мусора удалить его из памяти среды. Как результат старый экземпляр модуля так и останется в закоулках памяти и другие модули и подпрограммы, использовавшие его ранее, продолжат ссылаться на него.
Очевидно, что решение данной проблемы заключается в поиске всех ссылок на старую версию модуля с последующим их удалением или подменой на новую ссылку. Именно такой подход и реализован в Орионе в функциях Run - Import/Reload script (F6), Run - Import/Reload script of file... и Run - Selected <module> - Delete <module> and references it.
Обратите внимание для работы указанных функций необходим пакет wottransmission.zip. При его отсутствии функции работать не будут.
6. Как узнать, используется ли загруженный модуль другими модулями?
В большинстве случаев узнать об этом можно через поиск внешних ссылок, ссылающихся на интересующий вас модуль. Рассмотрим это на примере модуля math. Импортируем данный модуль и выясним сколько ссылок на него зарегистрировано сейчас в системе:
HTML:
import math, sys
print sys.getrefcount(math)
<<< 3
- Собственно сам модуль math
- Затем ссылку на него в глобальном списке модулей системы
HTML:
import sys
print sys.modules
<<< ..., math: <module 'math' (built-in)>, ...
- И временную ссылку, передаваемую в функцию getrefcount()
HTML:
import math
print math.pi
HTML:
<<< 4
Для упрощения вывода количества ссылок на модули в Орионе реализована функция Run - Selected <module> - Print <sys.getrefcount>. Чтобы ею воспользоваться потребуется предварительно выделить имя модуля или в верхнем окне Ориона или непосредственно в редакторе. Ниже показан результат работы функции для разных модулей:
HTML:
<<< Count of references to 'math': 4 (external: 1)
import Example
<<< Count of references to 'Example': 3 (external: 0)
import sys
<<< Count of references to 'sys': 17 (external: 14)
Для перезагрузки модуля в Орионе не требуется каких-либо отдельных действий. Достаточно импортировать модуль еще раз встроенными функциями Run - Import/Reload script (F6), Run - Import/Reload script of file... Если обнаружиться что модуль с таким именем уже был импортирован, то будет выполнен поиск всех ссылок на элементы/объекты старого модуля с последующей их заменой на новые.
8. Удаляем модуль из системы и все ссылки на него
Для полноценного удаления импортированного модуля предусмотрена функция Run - Selected <module> - Delete <module> and references it. Данная операция удаляет модуль из окружения среды и пытается затереть все ссылки на него в других модулях. Если какую-либо ссылку удалить не удастся, то программа сообщит вам об этом. Перед вызовом команды следует предварительно выделить имя модуля или в верхнем окне Ориона или непосредственно в редакторе.
HTML:
<<< Removal... 14 external references are detected!
<<< del traceback.sys
<<< del sre_compile.sys
...
<<< del os.sys
<<< Module 'sys' removed!
1. Как минимизировать исходный код?
2. Что такое упаковка исходного кода?
3. Как упаковать код в ZipBase64-box?
4. Как распаковать ZipBase64-box?
2. Что такое упаковка исходного кода?
3. Как упаковать код в ZipBase64-box?
4. Как распаковать ZipBase64-box?
1. Общие принципы защиты скриптов
Основная задача защиты модов - это препятствовать получению первоначального или исходного питон-кода скрипта сторонними юзверами без разрешения автора. Так как скопилроанный код в питоне может юыьб
Основная задача защиты модов - это препятствовать получению первоначального или исходного питон-кода скрипта сторонними юзверами без разрешения автора. Так как скопилроанный код в питоне может юыьб
спасибоспасибо
Последнее редактирование: