StranikS_Scan 4,149 Posted May 6, 2014 (edited) Project "ORION" "Когда на питоне начинаются разговоры про быстроту я сразу волнуюсь" © ВЛ Версия: 1.3.5 Дата обновления: 11.08.2019 Описание:Перед вами универсальный инструмент для компиляции, декомпиляции и обфускации python-модов. Программа использует технологию Python4Delphi и взаимодействует с python-движком через dll-библиотеку. Исходники модулей питона запакованы в zip-архив, который идёт вместе с программой. Для полноценной автономной работы Ориона достаточно иметь dll-библиотеку и zip-архив с модулями питона. При этом вы можете подключиться и к любому python-движку, который уже установлен на вашем компьютере. Ограничения: ОС Windows XP/Vista/7/8/10 поддерживаются Python 2.3-3.6 dll-файлы только версии x86 тестировалось на Python 2.6.x, 2.7.x, 3.6.x и их более ранних версиях запуск только из каталогов, не содержащих в путях буквы русского алфавита Особенности: Реализован интерфейс близкий к классическим средам программирования: команды - выполнить редактируемый скрипт (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-модуля - импорта, атрибутов, строковых констант, имён пользовательских переменных, классов и процедур и т.д. обфускатор для модификации и запутывания байт-кода при компиляции py-модулей протектор для pyc-модулей, препятствующий анализу и дизассемблированию кода для его реверса также программа дополнена модифицированным дизассемблером dispack.zip на основе стандартного с выводом информации как в отдельный файл, так и в самом редакторе в удобной форме Видео для новичков - YouTube Скачать: Графическая оболочка PjOrion+Питон 2.7.x+*pack.zip:PjOrion_1.3.5_11.08.2019.zip (архив с DLLs)PjOrion_1.3.5_WebUpdOff_UpdWOTTrans.zip (архив без DLLs, можно скопировать папку из первого архива) Старые версии программы: Здесь Как защитить свой код: "Выходило так, что, тот у кого исходный код - тот и автор. А теперь наоборот будет, кто автор - у того и исходный код, а остальные пусть идут по шоссе и сосут сушки." © 4cheat Основная задача любой защиты - это препятствовать получению первоначального или исходного питон-кода скрипта сторонними юзверами без разрешения автора. Для этого в Орионе разработан небольшой функционал, включающий в себя: модификацию питон-кода исходного скрипта; обфускацию байт-кода при компиляции; протекцию скомпилированного байт-кода. Модификация питон-кода исходного скрипта. Самый надежный способ защитить код от анализа, это сделать его нечитабельным и при этом максимально усложнить понимание логики и алгоритма его работы. В идеале при таком способе защиты юзверу потребуется на анализ и разбор кода столько же времени, сколько и на его написание с нуля. Что в конечном итоге должно привести его к отказу от первой затеи в пользу второй. Однако добиться такого результата весьма не просто. В Орионе реализовано несколько простейших инструментов для модификации исходного кода. С их помощью можно модифицировать исходный скрипт каким-либо образом: заменить элементы структуры скрипта, например, импорты, атрибуты и т.д. на менее понятные и менее читабельные аналоги без потери производительности (Script - Obfuscate - Structure...) зашифровать текстовые константы (Script - Obfuscate - Strings...) сделать имена переменных/функций/классов/констант нечитабельными (Script - Obfuscate - Names...) Обфускация байт-кода при компиляции. Главная проблема защиты скриптов в питоне это самоинспектируемость и самоанализируемость запущенного кода. По этой причине код модуля, импортированного в среду, можно легко, частично или полностью, извлечь средствами marshal-функций и затем дизассемблировать или декомпилировать. По этой причине защищать байт-код нужно не только, когда он находиться в pyc-файле, но также и после его импорта в среду питона. Для этого в Орионе предусмотрена функция Bytecode - Obfuscate - Compile script (Alt+F9). При компиляции скрипта этой функцией байт-код на выходе модифицируется таким образом, что даже после извлечения из среды питона его дизассемблирование и декомпилирование становятся затруднительными. Протекция скомпилированного кода. Протекцию кода применяют в тех случаях, когда необходимо скрыть исходный код мода в pyc-файле. Для этого в Орионе реализована функция Bytecode - Protect - Protect pyc-file... Протектор ни как не обфусцирует и не модифицирует исходный код, однако в тоже время он не позволяет его просто так увидеть или получить. Он скрывает его и защищает, тем самым препятствуя каким-либо попыткам юзвера исследовать или модифицировать исходный код скрипта. При этом может предоставлять автору широкий функционал по встраиванию в скрипт различных проверок и ограничений - по версии, по времени, по ключу и т.д. Комплексный подход. Сегодня большое внимание уделяется различным способом защиты pyc-файлов. Однако стойкость любой защиты определяется не её самым сильным, а её самым слабым звеном. Протектор защищает исходный код только с момента его обработки автором до момента его импорта в среду питона. В процессе импорта исходный код извлекается из недр протектора после чего его можно дизассемблировать и декомпилировать непосредственно из самой среды. Поэтому протекция pyc-файла имеет смысл только если его байт-код был заранее обфусцирован при компиляции. В тоже время если автор мода ограничивается только обфускацией байт-кода или исходного скрипта, то при таком подходе скрипт становиться доступен для анализа и может быть легко дизассемблирован, проанализирован, а затем и модифицирован с целью последующей декомпиляции. В случае же наложения протектора юзверу придется либо взломать протектор, либо отказаться от этого и попытаться получить обфусцированный код непосредственно из самой среды питона. Таким образом, для защиты скриптов имеет смысл применять комплексный подход, включающий в себя и запутывание исходного кода и обфускацию байт-кода и его протекцию. Гибридные технологии. Для защиты скрипта от реверса, помимо многократного усложнения и запутывания исходного питон-кода, его часть, в данном случае элементы протектора, могут быть написаны на другом языке, а затем либо встроены в исходный скрипт, либо вынесены из него в отдельный pyd-, dll- или exe-файл. Такие методы защиты наверно стоит считать гибридными. Они существенно повышают уровень защищённости скрипта, однако при этом усложняют его импорт в среду и могут оказаться не совместимы с некоторыми приложениями. В Орионе имеется опция Use EXE-Injector, добавляющая в протектор exe-инжектор, на который при импорте скрипта возлагается задача внедрения шифрованного байт-кода непосредственно в память запущенного процесса. В случае применения опции рекомендуется проверять работоспособность скрипта в программе, для которой вы его создаете. Для защиты скриптов от реверса в Орионе имеются обфускатор и протектор. Рекомендуются следующие варианты их применения. Вариант №1 Обфусцировать элементы структуры скрипта, константы, имена и т.д.: воспользоваться универсальной функцией Script - Obfuscate - Applay all... Сохранить скрипт в защищенный pyc-файл: воспользоваться командой Terminal - Save as... и выбрать в диалоговом окне формат "Python obfuscated and protected files (*.pyc)" Вариант №2 Обфусцировать элементы структуры скрипта, константы, имена и т.д.: воспользоваться универсальной функцией Script - Obfuscate - Applay all... Скомпилировать pyc-файл с обфускацией байт-кода: применить функцию Bytecode - Obfuscate - Compile script (Alt+F9) Наложить протектор на скомпилированный pyc-файл: применить функцию Bytecode - Protect - Protect pyc-file... (Alt+P) Чего делать не следует ни в коем случае. Не смотря на все сложности применяемых защит, довольно часто их можно легко обойти по вине самого автора мода, который своими действиями сводит эффективность защиты к нулю. Ниже перечислен список таких возможных действий. Нельзя кодировать исходный скрипт в строку, сжимать его zip-функцией, кодировать в ZipBase64-box или помещать в какой-либо другой строковый контейнер, в противном случае эта строка, а затем и ваш код могут быть легко извлечены и раскодированы. Не следует обфусцировать скрипт и не накладывать протектор, точно также как не следует накладывать протектор на не обфусцированный скрипт, так как обфускация и протекция не взаимозаменяемы, они должны применяться совместно и дополнять друг друга. Не следует! Применять протектор к необфусцированному скрипту, так как в этом случае код может быть декомпилирован непосредственно из среды питона Ограничиваться только обфускацией байт-кода скрипта без наложения протектора, так как в таком случае байт-код легко доступен для анализа и модификации с последующей декомпиляцией Применять протектор несколько раз к одному скрипту, так как на практике это не делает защиту более стойкой, однако увеличивает время импорта модуля и может даже нарушить его работу Включать опцию "Lock attributes review and double import", если ваш скрипт подменяет реальный модуль клиента игры или у вас несколько модулей и они импортируют друг друга, так как атрибуты модулей из вне доступны не будут Использовать функцию def Init() для запуска вашего мода, если вы включили опцию "Lock attributes review and double import", так как с данной опцией загрузчик модов, встроенный в клиент, не сможет получить доступ к функции Init() Внимание! Если вы компилируете скрипт с обфускацией, то ни в коем случае предварительно не сжимайте его в строку командой "Move script to ZipBase64-box", так как байт-код вашего скрипта не будет обфусцирован и его можно легко извлечь! История версий: Версия: 1.3.5 Дата: 23.08.2017 Список изменений: Убрано сообщение о потере связи с сервером обновлений при запуске программы Переработана опция выбора режима окна при запуске клиенте игры через WOT-Transmission Добавлена опция "WOT-Transmission - WOT-Сlient verification" для запуска проверки клиента игры Назначена горячая клавиша F12 на запуск первого реплея в списке Изменен алгоритм подключения WOT-Transmission для отображения всей информации, отправляемой клиентом в лог из питона Версия: 1.3.4 Дата: 23.07.2017 Список изменений: Исправлена неверная подсветка скобок в тексте с табуляцией Восстановлена работа функции разблокировки мультизапуска клиента "Unlock Multi-Start" Исправлены ошибки в работе парсера строк при распознавании строки вида '\\' Добавлена возможность сохранять файлы с произвольным расширением Добавлена загрузка новой версии программы с сервера и опция автоматической проверки новых версий Добавлены в главное меню в пункт "Help" ссылки на загрузку новой версии и дополнительных пакетов Добавлены в редактор комбинации клавищ Ctrl+D для дублирования строки, Ctrl+Backspace и Ctrl+Del для удаления слова слева и справа от каретки Добавлена возможность сохранить скрипт непосредственно в wotmod-файл Обновлены dll-файлы и zip-архивы на Python 2.7.13 и Python 3.6.2. Версия: 1.3.3 Дата: 27.05.2017 Список изменений: Восстановлена работа функции разблокировки мультизапуска клиента "Unlock Multi-Start" Внесены исправления в работу модуля WOTTransmission с учетом изменений в новых клиентах игры. Версия: 1.3.2U6 Дата: 12.03.2017 Список изменений: Исправлен баг с потерей фокуса экспресс-окном Исправлен баг с подсветкой скобок в многострочном тексте При декомпиляции теперь восстанавливается оригинальный регистр букв в названиях файлов и папок из поля co_filename (опция) В дизассемблере добавил вывод строк кода с отступами, показывающими его структуру Заменен декомпилятор Uncompyle2 на Uncompyle6, в новом декомпиляторе исправлены ошибки при декомпиляции Питона 2.7, а также доступна декомпиляция Питона 3.4 и 3.5 Во избежание переполнения стэка при декомпиляции скриптов максимальный его размер увеличен до 16Мб, также увеличено и предельное число рекурсивных переходов до 50000 Исправлена ошибка в работе распаковщика xml-файлов, когда в тэгах встречаются символы пунктуации Внесены исправления в работу модуля WOTTransmission с учетом изменений в новых клиентах игры Убран из программы EXE-Injector Версия: 1.3.2 Дата: 30.01.2016 Список изменений: Если при изменении настроек программы потребуются права Администратора программа выдаст сообщение Увеличил размер шрифта в окнах Добавил возможность выбрать или указать файл с любым расширением в диалоге "Сохранить" Включил полноценную поддержку символов табуляции редактором и функциями Ориона Добавил в настройки программы опцию "Convert Tab to Spaces" (по умолчанию включена) и продублировал её в статус-баре с возможностью переключения правой кнопкой мышки Переписал в нативный код компонента TSynEditor все пользовательские функции из Ориона, включая такие вещи как: подчеркивание заголовков функций и классов подсветку выделенных слов и подсветку парных скобок подсветку отступов и спецсимволов выделение строк через гуттер подсветку произвольных строк Исправил баг в нативном коде - не правильно вычислялся размер буфера выделенного текста в редакторе, из-за чего были возможны падения программы Исправил неверную работу Undo-функции при отмене блочной табуляции Исправил старый баг - иногда вставлялся лишний отступ при нажатии клавиши ENTER после двоеточия, когда курсор уже на новой строке При выделении слова теперь показывается количество повторений за вычетом самого слова Добавил опцию подсветки отступов в тексте "Highlight left indents" Добавил опцию отрисовки спецсимволом серым цветом "Show special characters" -> "Paint chars as Gray" Добавил опцию подсветки цветовых кодов "Highlight color codes" как в XCPad (по умолчанию выключена) Добавил возможность подкраски фона строк текста пятью стилями "Styles" по принципу чем больше номер стиля тем выше у него приоритет Добавил в статус-бар отображение числа выделенных строк и количество выделенных символов Оптимизировал функцию подсветки парных скобок, добавил прерывание поиска после анализа 50000 символов Добавил функции для замены таб-отступов на пробельные отступы "Indents" -> "Replace Tabs to Spaces" и "Replace Spaces to Tabs" В функции "Set indent width..." добавил выбор символа - табуляция или пробел Добавил функцию ставящую/убирающую символы комментариев в начале выделенных строк "Comment set or remove" (CTRL+L) Добавил опцию "Autoconnect to Python" в настройки программы, а также выпадающее меню в статус-бар с командами "Connect...", "Disconnect", "Restart..." Добавил автоматическую проверку синтаксиса скрипта в редакторе при наборе текста, опция "Automatic syntax cheking", с подсветкой курсорной строки красным цветом и выводом информации об ошибке в статус-баре Добавил подсветку красным цветом строки в тексте, в которой произошла ошибка выполнения скрипта Добавил несколько дополнительных опций в Express-окно Добавил синтаксическую подсветку XML-текста при отключении от Питона Внес исправления в свой парсер питон-кода для улучшения работы функции Minimize В функции Minimize: исправил излишнее удаление символа конца строки перед if исправил и улучшил работу подфункции, удаляющей многострочные комментарии исправил вылет функции, если в тексте встречаются склеенные строки вида 'abc''def' исправил излишнее удаление преамбулы в начале скрипта добавил удаление излишних пробелов между именами и аргументами Исправлена ошибка в работе Obfuscate - Structure при обфускации сложных аргументов функций Исключил из обфускации Obfuscate - Structure обработку атрибутов с двойным подчеркиванием в начале имени Исправил смещение преамбулы в начале скрипта при использовании Obfuscate - Strings Исправлены ошибки при обработке текста в UTF-8 формате функциями Obfuscate - Strings и Obfuscate - Variable names Добавил в контекстное меню файлов и папок пункты минимизации текста, обфускации и протекции скриптов Программа запоминает последнюю выбранную папку в диалогах после выхода из программы Исправлены периодические несрабатывания модуля "Autodetect changes and file reloading" при манипуляциях с файлом вне программы Если в аргументе --run-game не указывать путь к wotreplay-файлу, то программа запустит игру с трансмиттером без реплея Форматы *.visual_processed, *.track и *.font добавлены в список форматов, распаковываемых программой Исправлены ошибки при распаковке xml с отрицательными числами, длинными строками и тэгами вида <xml... Исправлен вылет игры при загрузке реплея, в имени которого есть пробелы или кириллица Обновлены dll-файлы и zip-архивы на Python 2.7.11 и Python 3.5.1 Версия: 1.3.1 Дата: 11.10.2015 Список изменений: Устранена проблема с переполнением аргументов в jrel- и jabs-инструкциях при обфускации скриптов больших размеров, обфускатор обучен правильной работе с EXTENDED_ARG Внесены улучшения в протектор: добавлено шифрование целых чисел в co_consts оптимизирован код наложения протектора, а также код шифрования, что позволило многократно снизить время протекции и время запуска скриптов больших размеров добавлен внешний шифрующий слой с zip-сжатием и компактным загрузчиком, уменьшающий размер модуля и препятствующий экспресс-анализу и расшифровке кода протектора В механизме File Assoсiation добавил удаление дублирующих ключей в HKCU, мешающих ассоциации файлов с программой Если файлы *.info.txt и *.dis.txt уже существуют, то создаются файлы *.info1.txt и *.dis1.txt и т.д. Исправил неверное отображение вертикальной полосы курсора при горизонтальной прокрутке текста Исправил ошибку в определении пути к файлу при запуске программы из командной строки Исправил ошибку при исполнении py-файлов в UTF-8 формате из контекстного меню командной Run Проверил и исправил ошибки в работе некоторых функций и команд в Орионе под Python 3.x Добавил возможность компиляции файлов с точками в именах Команда Save теперь не затирает Undo- и Redo-списки операций Зациклил поиск в редакторе, а также добавил вызов поиска и замены в экспресс-окне по горячим клавишам CTRL+F, CTRL+R и др. Добавил вывод в статус-баре количества присутствующих в тексте повторений при выделении строки в редакторе Добавил новые опции в окне настройки программы Terminal - Settings: количество строк, прокручиваемых скроллером мыши включение/отключение автоматической вставки отступа в начало новой строки после двоеточия запоминание положения и размеров главного окна автоматическое обнаружение изменений в файла на диске и его перезагрузка (если в редакторе не было изменений, то делается автоматически, иначе выдается запрос пользователю) автосохранение с выбором временного интервала автоматическое создание бэкапа при сохранениях Добавил новые функции в меню Terminal: сделать копию скрипта Terminal - Make a copy... переоткрыть файл Terminal - Reopen загрузить текст из бэкапа Terminal - Reopen from backup-file Ускорил работу алгоритма, формирующего список атрибутов в выпадающем меню после точки В синтаксис Ориона добавил операцию @!(abc), приводящую к вызову pprint(abc), данный вариант структурирует списки и словари при выводе На вкладке Settings - Basic setup добавил опцию "Ignore <Exit> in Python" В функции Minimize script улучшил распознавание docstrings, также исправил ошибки парсинга строковых констант В обфускаторе имен Script - Obfuscate - Variables добавлена обфускация аргумента self в функциях по его имени Добавлен обфускатор строковых констант Script - Obfuscate - Strings... Добавлен обфускатор кода Script - Obfuscate - Structure...: умеет заменять цепочки атрибутов вида a.b.c... на вложенные вызовы getattr заменяет import xxx на xxx = __import__('xxx') в любых его вариациях, кроме import * В обфускаторе имен добавлена опция, сохраняющая нижнее подчеркивание в именах переменных Исправил ошибку с обрезанием текста при открытии запакованных xml-файлов через программу Исправлена ошибка в работе распаковщика xml-файлов с параллельными потоками при его вызове через контекстное меню папки Подправил логику функции, распаковывающей xml-файлы, теперь в список "Not unpacked:" попадают только запакованные файлы, которые программа не смогла распаковать В WOT-Transmission исправил ошибку при добавлении путей в sys.path и добавил компиляцию скриптов на лету перед exec Оптимизировал модуль wottransmission.zip\converter.py Обновил python34.dll и архив python34.zip до Python 3.4.3 Версия: 1.3.0 Дата: 10.08.2015 Список изменений: Внесены улучшения в код протектора. В алгоритм протектора добавлен exe-инжектор (опция Use EXE-Injector), выполняющий вставку зашифрованного байт-кода непосредственно в память запущенного процесса Добавлена поддержка вывода данных в лог из потоков, выполняющихся в питоне Добавил функцию для разблокировки мультизапуска клиента игры путем модификации файла WorldOfTanks.exe Добавлены функции чтения и пакетной распаковки различных игровых файлов xml-формата При обработке большого числа файлов с целью повышения быстродействия программы убран вывод промежуточной информации в окне редактора, информацию о ходе операции можно увидеть в строке состояния Модифицированы Функции "Show pyc-file bytecode info..." и "Disassemble pyc-file..." на запись информации в файлы txt-формата взамен вывода данных в окне редактора. Добавлена поддержка аргументов командной строки (список в FAQ) Добавил возможность ассоциации файлов питона с программой и сделал различающиеся иконки для py- и pyc-файлов (нужны права Администратора) Добавил функционал работы с программой через контекстное меню проводника (нужны права Администратора) В WOT-Transmission: алгоритм подключения сделан универсальным и независящим от версии клиента добавлен проброс логов в файл python.log добавлен вывод сообщений об ошибках из флеша (LOG_LEVEL.RELEASE = 1) изменена область выполнения кода с модуля wottransmission.transmitter на модуль __main__ Обновлены dll-файл и zip-архив на Python 2.7.10 Если файл не декомпилируется - скорее всего он защищён Файлы могут не декомпилироваться по нескольким причинам: Версия питона, в котором скомпилирован файл, не совместима с версией декомпилятора Например, декомпиляторы в Орионе не понимают Python 3.x, но работают с питоном более младших версий. В таких случаях нужно искать соответствующий декомпилятор. Выбранный декомпилятор не смог правильно распознать байт-код или его структуру Как известно декомпиляторы несовершенны, а потому их много разных и все они работают с разным результатом. По этой причине в Орионе собрано несколько декомпиляторов из наиболее известных. Если один не справился, то пробуйте другой. Байт-код защищён от декомпиляции автором файла Если файл защищён, то выполнить реверс скрипта доступными в сети декомпиляторами и общеизвестными инструментами, как правило, нельзя, так как файл как раз от этого и защищён. В таких случаях я всегда рекомендую искать автора файла, обращаться к нему, и если он сочтёт нужным, то поделится с вами исходником или какой-либо еще информацией, интересующей вас. Если вы сомневаетесь защищён ли файл от декомпиляции, то вот тут можно посмотреть примеры. Декомпилированные pyc-файлы и распакованные xml-файлы игры Файлы: Репозитарий c файлами клиентов игры WorldOfTanks-Decompiled Для каждой версии клиента игры создана отдельная ветка, список веток Network Для поиска кода в py-файлах клиента: Скачайте архив с нужной веткой и извлеките содержимое в любую папку. Откройте Notepad++ и перенесите в него папку scripts\client, затем дождитесь когда он загрузит файлы. Для поиска по всем файлам жмём CTRL+F, вводим строку поиска и жмём "Найти всё во всех Открытых Документах", затем наслаждаемся результатом. Чтобы закрыть все файлы в Notepad++ и при этом он не пытался их все открыть заново при следующем запуске, закрывайте файлы командой из главного меню "Файл - Закрыть все". Как самому декомпилировать и распаковать файлы игры: Скачиваем PjOrion, извлекаем в любую папку (русские символы в пути не желательны). Запускаем программу от имени администратора, вызываем окно настроек Terminal - Settings - Context menu..., ставим галочку "Integrate into the Explorer context..." и жмем кнопку "Apply...". Выходим из программы, заходим в папку с игрой и копируем в любое место подпапку World_Of_Tanks\res\scripts. У скопированной папки scripts вызываем правой кнопкой мыши контекстное меню проводника и выбираем команду PjOrion - Decompile pyc-files - Uncompyle2, затем ожидаем окончания работы программы, за ходом декомпиляции можно следить по статистике внизу программы в строке состояния. После завершения декомпиляции, распаковываем xml-файлы, для этого опять вызываем контекстно меню проводника на папке и выбираем команду PjOrion - Unpack XML-files, затем ждем завершения. Edited June 18, 2021 by StranikS_Scan 71 1 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,149 #181580 Posted May 6, 2014 (edited) FAQ по PjOrion Общие вопросы: 1. Какие файлы входят в состав Ориона и какого их назначение? 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.6 dll-файл для x86 систем каталог программы не должен содержать в путях буквы русского алфавита 3. Как вернуть все настройки программы по умолчанию? Для этого достаточно перед запуском программы удалить файл PjOrion.ini. Среда Питона: 1. Как Орион взаимодействует с Питоном? Для эмуляции среды Питона используется pythonXX.dll библиотека. Она поставляется вместе с Питоном и входит в состав его x86 дистрибутива. Все дистрибутивы выкладываются разработчиками Питона здесь. Точно такой же dll-файл идёт в комплекте и с Орионом. Терминал посредством технологии Python4Delphi импортирует функции библиотеки, а затем использует их для эмуляции сеанса, передачи команд и получения результатов их выполнения. 2. Как запустить на терминале нужную версию Питона? Для этого необходимо подключиться к соответствующей версии dll-библиотеки. От версии библиотеки зависит и версия среды. При первом запуске Ориона он по умолчанию пытается установить связь с python27.dll, лежащей в папке вместе с ним, и инициализировать работу среды. В настройках Главное меню - Terminal - Settings - Paths вы можете самостоятельно указать к какой именно библиотеке ему следует подключаться. При этом можно указать как файл, лежащий в папке с Орионом, так и файл в папке оригинального Питона, например C:\PythonXX\ 3. Как перезапустить сеанс работы с Питоном? Иногда необходимо завершить текущий сеанс и начать новый, т.е. сделать рестарт среды, не перезапуская Орион. Для этого в главном меню есть функция Terminal - Restart (Alt+R). >>> ================================ RESTART ================================ 4. Как выполнить скрипты при загрузке Ориона? Если при подключении Ориона к dll-библиотеке необходимо каждый раз выполнять какой-то набор скриптов или команд, то для этого можно воспользоваться окном "Execute after connecting" в настройках программы Главное меню - Terminal - Settings. Например, запись в этом окне: print ('Hello user!') приведет к вот такому результату: >>> PjOrion: 1.0.9 23/07/2014 (C) StranikS_Scan for http://www.koreanrandom.com/forum/ >>> Python connected: 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] >>> Orion syntax: @!abc -> print abc; @!!module -> import module <<< Hello user! 5. Как узнать текущие пути в окружении среды? Окружение среды - это папки и пути на диске, которые доступны в Питоне. Вывести список путей можно, выполнив в редакторе код: import sys print sys.path или же воспользовавшись более удобной командой в главном меню Terminal - Print <sys.path> (Alt+P). <<< 0 C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion\wottransmission.zip\wottransmission ... <<< 12 C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion <<< 13 C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion\lib\site-packages 6. Как добавить папку в список путей окружения среды? Это довольно просто, если воспользоваться соответствующей командой в главном меню Terminal - Add folder to <sys.path>... Однако следует обратить внимание на то, что при перезагрузке среды или при перезапуске Ориона список путей вернется к первоначальному. Если вы хотите чтобы ваш путь добавлялся в окружение каждый раз при инициализации среды, то в окне Terminal - Settings в поле "Execute after connecting" следует прописать соответствующий скрипт, например такой: import sys sys.path.insert(0, 'C:\\Developer\\MyScripts') 7. Какие модули импортированы в среду? Список всех импортирован модулей храниться в системной переменной modules и может быть получен так: import sys print sys.modules В Орионе вывести этот же список в более наглядной форме можно командой Terminal - Print <sys.modules> (Alt+M). <<< 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)> ... 8. Компилятор не нашел стандартную функцию, что делать? Если вы используете dll-библиотеку и pythonXX.zip архив из папки с Орионом, то такая ситуация вполне может возникнуть. В zip-архиве нет стандартных pyd-библиотек из папки C:\PythonXX\DDLs\ оригинального Питона, так как обращения к ним из архива в Питоне не возможно. Поэтому использование модулей из таких библиотек по умолчанию будет не доступно. Например, выполнение вот такого кода: 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 и др. кодировок. Остальные символы, входящие в состав юникодовой таблицы ему не доступны. Однако любой символ кодировочной таблицы легко может быть представлен своим порядковым номером или кодом. Для вывода символов посредством их замещения на коды в программе реализовано несколько режимов вывода строк. Chars - символы не замещаются кодами, редактор пытается отобразить все символы согласно локальной ANSI кодировке Chars, Hex - Переключение между режима осуществляется в строке состояния: 2. Как вывести непечатаемые символы в виде кодов? 3. Вместо кириллицы выводятся коды, что делать? 4. Как задать формат py-файла? Редактирование скриптов: 1. Подсветка кода В редакторе реализована синтаксическая подсветка кода Питона, отдельно для версий 2.X и 3.X. Подсветка сделана за счет использования компонентов TSynEditor и TSynUniSyn из пакета SynEditStudio 5.8Fix3 под Delphi. 2. Синтаксис Ориона Для удобства работы консольным способом в Орионе добавлены сокращения для вызова некоторых функций и команд. В Питоне 2.X: @!abc аналогично print abc @!!module тоже что и import module В Питоне 3.X: @!(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 Орион в качестве отступов использует только пробелы, символы табуляции не используются. Кроме того, нажатие клавиши Tab приводит к вставке не символа табуляции, а пробелов. Количество пробелов в отступе по умолчанию (обычно 4) можно задать в настройках Главное меню - Terminal - Settings - Indentation Width. 6. Перенос на новую строку Для переноса на новую строку в Питоне принято использовать левый слэш "\". Например: message = 'Для переноса на новую строку в Питоне принято \ использовать левый слэш.' Вставить такой слэш и перейти на новую строчку в редакторе по быстрому можно командой Continue on a new line (Shift+ENTER). 7. Вставка имени файла Так как в Питоне имена файлов с путями должны быть записаны с двойными левыми слэшами "\\" (или одним, но правым "/"), то для упрощения этой задачи в Орионе есть функция Script - Insert - File name as text... Она вставит в текст полный путь к выбранному файлу, например вот так: 'C:\\Program Files (x86)\\Borland\\Delphi6\\Projects\\PjOrion\\Test\\test1.py' 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: message = 'Привет!' в читабельный ANSI: message = 'Привет!' 10. Замена текста на hex-коды и наоборот Довольно часто возникает задача конвертирования символов в последовательность шестнадцатеричных кодов (hex-кодов) и наоборот. Например, получить из ANSI строки: message = 'Привет!' строку в UTF-8: message = 'Привет!' а затем представить её hex-кодами: message = '\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82\x21' В этом вам помогут функции 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). Например, строка: message = '\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82\x21' легко может быть закодирована как: message = 'XHhEMFx4OUZceEQxXHg4MFx4RDBceEI4XHhEMFx4QjJceEQwXHhCNVx4RDFceDgyXHgyMQ==' print message.decode('base64') <<< '\xD0\x9F\xD1\x80\xD0\xB8\xD0\xB2\xD0\xB5\xD1\x82\x21' Компиляция скриптов: 1. Как получить pyc-файл? В Орионе есть несколько способов скомпилировать скрипт в pyc-файл. Все они максимально упрощают этот процесс и делают его интуитивно понятым для пользователя. Самый быстрый способ это воспользоваться функцией в главном меню Run - Compile script (Ctrl+F9). В этом случае редактор потребует сохранить загруженный скрипт в py-файл, после чего создаст одноименный pyc-файл в той же папки, но уже с байт-кодом Если вы не хотите сохранять исходный скрипт на диск, то вы можете создать pyc-файл через функцию Terminal - Save as ... В диалоговом окне потребуется выбрать формат выходного файла. В данном случае *.pyc Наконец скомпилировать py-файл можно и не открывая его в редакторе. Для этого есть функция Run - Compile py-file... Обратите внимание! Версия pyc-файла на выходе определяется версией Питона, к которому подключен ваш Орион в данный момент. 2. Как скомпилировать за раз несколько скриптов в папке? Для пакетной компиляции скриптов в папке и её подпапках следует использовать функцию Run - Compile py-folder... Скомпилированные файлы сохраняются в тех же папках, в которых лежат исходные скрипты. Если необходимо исходные py-файлы удалить после компиляции достаточно поставить галочку в главном меню Run - Delete py-files after compile. Выполнение скриптов: 1. Какие способы выполнения скриптов доступны в Орионе? Орион позволяет исполнять в среде Питона как скрипты, так и скомпилированные 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... 2. Как выполнить скрипт в среде консольным способом? Консольное выполнение скриптов - самый простой и часто используемый способ работы со средой Питона. Если вы написали в редакторе код или открыли в редакторе py-файл, то для его выполнения в среде достаточно воспользоваться функцией Run - Exec script (F5). Например, записываем в редакторе код: a = 123 выполняем его командой F5. Затем переписываем на print a и выполняем через F5 уже новый код. В результате получаем: <<< 123 Как видите, выполнение первого кода привело к инициализации в текущем сеансе среды переменной "a" c последующей записью в неё значения 123. В результате этого исполнение второго кода привело к выводу на экран содержимого этой переменной. Для удаления переменной "a" из памяти среды, достаточно выполнить вот такой код del a Если вы хотите выполнить код из экспресс редактора, то для этого в его окне предусмотрена кнопка Exec (F5). 3. Запуск скриптов и pyc-файлом с передачей входных параметров Для выполнения скрипта или байт-кода в среде не обязательно открывать файл в редакторе. Сделать это можно и удалённо. Для чего предусмотрено окно запуска скриптов с параметрами Run - Parameters... Здесь: File to be executed - pyc- или py-файл, который будет выполнен Parameters - список входных параметров <__name__> - значение, передаваемое в атрибут __name__ Restart сonnection - опция автоматического перезапуска среды перед выполнением скрипта Если входных параметров у скрипта нет, то достаточно указать только путь к исходному файлу, а затем нажать Execute. При необходимости ввода входных параметров их следует перечислить в строке Parameters, разделяя пробелом. В случае передачи в качестве параметра текстовой строки с пробелами её следует заключать в двойные кавычки "...". Как известно в Питоне список входных параметров при выполнении скрипта передается в системную переменную sys.argv в виде строкового массива. При этом нулевая ячейка массива обычно указывает на полное имя исполняемого файла. Данное правило реализовано и в Орионе. Рассмотрим пример скрипта, выводящего по порядку список входных параметров: import sys for value in sys.argv: print value Cохраним скрипт как Example.py или Example.pyc, затем в окне Parameters укажем путь к файлу и зададим строку с двумя параметрами, например: Parameters "Hello, users!" "It's parameter is the number two" После чего выполним скрипт, нажав на Execute. Результатом выполнения будет: <<< 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! Обратите внимание, что выполнить с параметрами можно также и скрипт, уже загруженный в редактор. Для этого в главном меню предусмотрена команда Run - Execute script (F9). При выполнении скрипта через эту команду в среду Питона предварительно передается список параметров из окна Parameters и полный путь к файлу скрипта. Помимо этого пользователь предварительно может задать значение и для атрибута __name__. Данный атрибут обычно инициализируется непосредственно при выполнении или импорте скрипта и указывает на его статус. Если скрипт запущен как самостоятельная программа, то атрибут всегда возвращает значение "__main__", если скрипт импортирован в качестве модуля, то тогда возвращается его имя в иерархии модулей. Задавая параметр <__name__> в Орионе самостоятельно, пользователь может имитировать импорт текущего скрипта. Это может быть полезно, например, при его отладке. 4. Импортируем скрипт как модуль Импорт модулей в Орионе по сути ни чем не отличается от импорта в оригинальном редакторе Питона. Если у вас на диске есть py- или pyc-файл, то вы можете импортировать его в среду Питона в любой момент. Для этого: Добавляем папку со скриптом в пути окружения среды Питона (Главное меню - Terminal - Add folder to <sys.path>...) Записываем в редакторе код import <Имя_скрипта> и выполняем его командой F5 В случае с Орионом добиться того же можно и более простым путем, если воспользоваться функцией импорта внешних файлов Run - Import/Reload script of file... Для импорта всех модулей из текущей папки предусмотрена функция Run - Import the all scripts from folder... <<< Importing... <<< C:\Program Files (x86)\Borland\Delphi6\Projects\PjOrion\FAQ\Example.py <<< Module 'Example' imported! Наконец импортировать в Орионе можно не только отдельные файлы, но и непосредственно редактируемый скрипт, т.е. открытый в редакторе. Для этого предусмотрена команда 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. Импортируем данный модуль и выясним сколько ссылок на него зарегистрировано сейчас в системе: import math, sys print sys.getrefcount(math) <<< 3 Полученная цифра 3 включает в себя: Собственно сам модуль math Затем ссылку на него в глобальном списке модулей системы import sys print sys.modules <<< ..., math: <module 'math' (built-in)>, ... И временную ссылку, передаваемую в функцию getrefcount() Следовательно, сейчас нет ни одной внешней ссылки из других модулей, ссылающейся на модуль math. Исправим это, написав скрипт, использующий каким-либо образом математический модуль. Например такой: import math print math.pi Сохраним его как Example.py и импортируем командой F6, а затем повторно выведем число ссылок на модуль math. В результате получим: <<< 4 Таким образом, любую ссылку начиная с четвёртой следует считать внешней ссылкой. В данном случае таковой является обращение math.pi. Для упрощения вывода количества ссылок на модули в Орионе реализована функция Run - Selected <module> - Print <sys.getrefcount>. Чтобы ею воспользоваться потребуется предварительно выделить имя модуля или в верхнем окне Ориона или непосредственно в редакторе. Ниже показан результат работы функции для разных модулей: <<< 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) 7. Как правильно перезагрузить модуль? Для перезагрузки модуля в Орионе не требуется каких-либо отдельных действий. Достаточно импортировать модуль еще раз встроенными функциями Run - Import/Reload script (F6), Run - Import/Reload script of file... Если обнаружиться что модуль с таким именем уже был импортирован, то будет выполнен поиск всех ссылок на элементы/объекты старого модуля с последующей их заменой на новые. 8. Удаляем модуль из системы и все ссылки на него Для полноценного удаления импортированного модуля предусмотрена функция Run - Selected <module> - Delete <module> and references it. Данная операция удаляет модуль из окружения среды и пытается затереть все ссылки на него в других модулях. Если какую-либо ссылку удалить не удастся, то программа сообщит вам об этом. Перед вызовом команды следует предварительно выделить имя модуля или в верхнем окне Ориона или непосредственно в редакторе. <<< 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? Декомпиляция байткода: Дизассемблирование байткода: WOT-Transmission: Аргументы командной строки: WIN32-формат DOS-формат Описание --help /help Вызов списка ключей --exit /exit Выход из программы по завершении операций --exec-string="" /exec-string "" Выполнить питон-строку "" в среде --run-file="" /run-file "" Выполнить код py- или pyc-файла "" в среде --import-file="" /import-file "" Импортировать py- или pyc-файл "" в среду как модуль --compile-file="" /compile-file "" Скомпилировать py-файл "" --minimize-text-file="" /minimize-text-file "" Минимизировать текст в py-файле "" --obfuscate-text-file="" /obfuscate-text-file "" Обфусцировать текст в py-файле "" --obfuscate-bytecode-file="" /obfuscate-bytecode-file "" Скомпилировать py-файле "" с обфускацией байткода --protect-bytecode-file="" /protect-bytecode-file "" Наложить протектор на pyc-файл "" --compile-folder="" /compile-folder "" Скомпилировать все py-файлы в папке "" --minimize-text-folder="" /minimize-text-folder "" Минимизировать текст во всех py-файлах в папке "" --obfuscate-text-folder="" /obfuscate-text-folder "" Обфусцировать текст во всех py-файлах в папке "" --obfuscate-bytecode-folder="" /obfuscate-bytecode-folder "" Скомпилировать все py-файлы в папке "" с обфускацией байткода --protect-bytecode-folder="" /protect-bytecode-folder "" Наложить протектор на все pyc-файлы в папке "" --decompile-file-uncompyle6="" /decompile-file-uncompyle6 "" Декомпилировать pyc-файл "" c помощью Uncompyle6 --decompile-file-decompylepp="" /decompile-file-decompylepp "" Декомпилировать pyc-файл "" c помощью Decompyle++ --decompile-file-fupy="" /decompile-file-fupy "" Декомпилировать pyc-файл "" c помощью Fupy --decompile-file-pyretic="" /decompile-file-pyretic "" Декомпилировать pyc-файл "" c помощью pyREtic --decompile-folder-uncompyle6="" /decompile-folder-uncompyle2 "" Декомпилировать все pyc-файл в папке "" c помощью Uncompyle6 --decompile-folder-decompylepp="" /decompile-folder-decompylepp "" Декомпилировать все pyc-файл в папке "" c помощью Decompyle++ --decompile-folder-fupy="" /decompile-folder-fupy "" Декомпилировать все pyc-файл в папке "" c помощью Fupy --decompile-folder-pyretic="" /decompile-folder-pyretic "" Декомпилировать все pyc-файл в папке "" c помощью pyREtic --info-file="" /info-file "" Собрать информацию о байт-коде pyc-файла "" в *.info.txt файл --disassemble-file="" /disassemble-file "" Дизассемблировать pyc-файл "" в *.dis.txt файл --unpack-file="" /unpack-file "" Распаковать XML-файл "" --unpack-folder="" /unpack-folder "" Распаковать все XML-файлы в папке "" --run-game /run-game Запустить игру с WOT-Transmission --run-game="" /run-game "" Запустить WOT-Transmission с реплеем "" Горячие клавиши и их комбинации: Terminal New Ctrl+N Open... Ctrl+O Save Ctrl+S Reopen Ctrl+P Reopen from backup-file Ctrl+B Make a copy... Ctrl+M Connect... Alt+E Restart... Alt+R Disconnect... Alt+T Exit Ctrl+W Search Search... Ctrl+F Replace... Ctrl+R Search next F3 Search previous Shift+F3 Run Exec script (for ANSI) F5 Exec selected script Ctrl+F5 Execute script (with Parameters) F9 Compile script Ctrl+F9 Import/Reload script (for UTF-8) F6 Express script... F10 Disassemble Disassemble selected Object Alt+D Load pyc-file bytecode to selected variable... Alt+L Save marshal-code from variable to pyc-file... Alt+M Script Insert - Globally Unique Identifier (GUID) Alt+G Insert - File name as text... Alt+F Convert - Selected UTF-8 to ANSI Alt+A Convert - Selected ANSI to UTF-8 Alt+U Convert - Selected Chars to Hex Alt+H Convert - Selected Hex to Chars Alt+C Convert - Selected String to Base64 Alt+B Convert - Selected Base64 to String Alt+S Packing - Move script to ZipBase64-box Alt+Z Bytecode Obfuscate - Compile script Alt+F9 Obfuscate - Compile py-file... Alt+O Protect - Protect obfuscated pyc-file... Alt+P WOT-Transmission Run - WorldOfTanks F11 Close WorldOfTanks Ctrl+F11 Exec script in client (for ANSI) Shift+F5 Exec selected script in client Shift+Ctrl+F5 Import/Reload script (for UTF-8) Shift+F6 Disassemble selected Object Shift+Alt+D Load pyc-file bytecode to selected variable... Shift+Alt+L Save marshal-code from variable to pyc-file... Shift+Alt+M Mouse Popup-Menu Cut Ctrl+X Copy Ctrl+C Paste Ctrl+V Select all Ctrl+A Increase Indent Ctrl+] Decrease Indent Ctrl+[ Continue on a new line Shift+Enter Comment set or remove Ctrl+L Undo Ctrl+Z Redo Shift+Ctrl+Z Show attributes Shift+Ctrl+Space Show public attributes Ctrl+Space Видео: http://youtu.be/k0YddpNLir8 http://youtu.be/1QjM9k1-2ok http://youtu.be/biX1QPTOWXs http://youtu.be/_F4watQdN2E'>http://youtu.be/_F4watQdN2E Edited May 3, 2018 by StranikS_Scan 18 1 Quote Share this post Link to post Short link Share on other sites
fecell 125 #181588 Posted May 6, 2014 (edited) <reserved> Edited May 24, 2016 by fecell Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,149 #181592 Posted May 7, 2014 (edited) Круто=)) ТОлько пару минигайдов не помешало... Что и с чем едят... Видео сегодня залью на ютубку, самый наверно простой вариант. А для реализовано подключение к WOT? под рукой нет клиента чтобы проверить.. верно думаю, чтобы в сприпты танковые скомпилированный скрипт сразу копировался? "Подключение" в кавычках к WOT есть. А вот чего с этим дальше делать уже вы предлагайте. Могу сделать как вы написали. Могу добавить функцию на декомпиляцию всех WOT скриптов в отдельную папку. Могу еще чего реализовать. Edited May 7, 2014 by StranikS_Scan 1 Quote Share this post Link to post Short link Share on other sites
fecell 125 #181593 Posted May 7, 2014 @StranikS_Scan, момент один обнаружил некритичный - запустил орион, переименовал папку с ним, вышел из него и.. "программа выполнила недопустимую операцию бла-бла-бла".. вероятно ini файл пытался сохраниться, а папка где он был уже переименована.. случайно так вышло, сразу не заметил что не вышел перед переименованием папки... Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,149 #181619 Posted May 7, 2014 @StranikS_Scan, момент один обнаружил некритичный - запустил орион, переименовал папку с ним, вышел из него и.. "программа выполнила недопустимую операцию бла-бла-бла".. вероятно ini файл пытался сохраниться, а папка где он был уже переименована.. случайно так вышло, сразу не заметил что не вышел перед переименованием папки... Это "связь с dll порвалась", при выходе он завершает сеанс работы и вот тут он и зарычал :))) Quote Share this post Link to post Short link Share on other sites
lportii 14 #181785 Posted May 7, 2014 >>> WOT connected: client not found or corrupted! Не хочет ни в какую. У меня вин8 х64, может по этому? Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,149 #181787 Posted May 7, 2014 >>> WOT connected: client not found or corrupted! Не хочет ни в какую. У меня вин8 х64, может по этому? Клиент стоит? Если стоит значит просто пути в реестре не соот. реальному расположению клиента. Зайдите в настройки через главное меню и укажите путь к папке вручную. Quote Share this post Link to post Short link Share on other sites
lportii 14 #181794 Posted May 7, 2014 (edited) Клиент стоит? Если стоит значит просто пути в реестре не соот. реальному расположению клиента. Зайдите в настройки через главное меню и укажите путь к папке вручную. Да, снял галку автоопределения, и все нашлось. Еще вопрос, подключаются только питоновские модули? Попробовал: import BigWorld BigWorld.wg_enableTreeHiding(True) BigWorld.wg_setTreeHidingRadius(10000,10000) <<< Traceback (most recent call last): <<< File "<string>", line 1, in <module> <<< ImportError: No module named BigWorld И в какой момент скрипты подхватываются, сразу или при загрузке карты, например? Edited May 7, 2014 by lportii Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,149 #181801 Posted May 7, 2014 Да, снял галку автоопределения, и все нашлось. Еще вопрос, подключаются только питоновские модули? Попробовал: import BigWorld BigWorld.wg_enableTreeHiding(True) BigWorld.wg_setTreeHidingRadius(10000,10000) <<< Traceback (most recent call last): <<< File "<string>", line 1, in <module> <<< ImportError: No module named BigWorld И в какой момент скрипты подхватываются, сразу или при загрузке карты, например? Импортировать BigWorld извне не возможно, он встроен в движок игры, точнее в exe-шник (что с этим делать я не знаю, максимум - это можно попробовать сделать эмуляцию модуля BigWorld, т.е. заглушку, такая идея была). А вот с остальными питоновскими модулями игры можно работать, папки c:\Games\World_of_Tanks\res\scripts\client\ и c:\Games\World_of_Tanks\res\scripts\common\ и соответственно скрипты в них будут доступны в среде Ориона. Последний вопрос не понял. Quote Share this post Link to post Short link Share on other sites
lportii 14 #181806 Posted May 7, 2014 (edited) Последний вопрос не понял. Если бы с BigWorld можно было бы работать, было бы просто шикарно. По поводу вопроса, я подумал, что возможно программа инжектит скрипт, который имеет луп с exec string. И таким образом исполняет практически все. То есть программа инжектит строку которая исполняется. Edited May 7, 2014 by lportii Quote Share this post Link to post Short link Share on other sites
MakcT40 330 #181819 Posted May 7, 2014 (edited) Offtop On (10000,10000)Второй параметр - это альфа, не нужно туда ставить такие большие числа. Хотя, по факту, этот параметр не работает, так что пофиг, что туда прописывать. :) Но мало ли... Offtop Off Edited May 7, 2014 by MakcT40 Quote Share this post Link to post Short link Share on other sites
lportii 14 #181821 Posted May 7, 2014 Offtop On Второй параметр - это альфа, не нужно туда ставить такие большие числа. Хотя, по факту, этот параметр не работает, так что пофиг, что туда прописывать. :) Но мало ли... Offtop Off Второй параметр это вроде как радиус, но для другого режима. Могу ошибатся, инфы по функциям не нашел. Quote Share this post Link to post Short link Share on other sites
fecell 125 #181833 Posted May 7, 2014 (edited) можно попробовать сделать эмуляцию модуля BigWorld имхо, других вариантов нет.. и по _FMOD вопрос, аналогично, открыт, правда с ним проще.. есть _fmodstubs.py который эмулирует функции _FMOD в случае неудачного импорта fmod Edited May 8, 2014 by fecell Quote Share this post Link to post Short link Share on other sites
deutscher_Adler 13 #181867 Posted May 8, 2014 Thats rly nice! Big thanks for this nice tool Stranik Quote Share this post Link to post Short link Share on other sites
lportii 14 #181879 Posted May 8, 2014 (edited) имхо, других вариантов нет.. и по _FMOD вопрос, аналогично, открыт, правда с ним проще.. есть _fmodstubs.py который эмулирует функции _FMOD в случае неудачного импорта fmod вот как я делаю - открываю в нотпад++ файл test_script/test_script делаю изменения, нажимаю на эконку "дискета" - скрипт срабатывает. Ниже файлики. http://rghost.ru/55025199 Криво конечно, но время иногда экономит. Edited May 8, 2014 by lportii 1 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,149 #181884 Posted May 8, 2014 (edited) @lportii, т.е. вы сразу тестите загрузку скрипта и смотрите результат в клиенте. Ну отлично. Можно сие запилить в Орион, скажем так: - запуск клиента через Орион - при запуске он инжектит ссылку на пользовательскую папку и скрипт realtime-загрузчика через path.xml - после этого можно спокойно работать со криптами в пользовательской папке и они сохранении сразу же будут исполняться в загруженном клиенте, вывод ошибок можно будет перенаправить куда нам надо, а не в python.log - после выхода из клиента, Орион уберет инжект ссылку из path.xml Пример на коленке, логика как у Интрудера. Edited May 8, 2014 by StranikS_Scan 1 Quote Share this post Link to post Short link Share on other sites
lportii 14 #181885 Posted May 8, 2014 @lportii, т.е. вы сразу тестите загрузку скрипта и смотрите результат в клиенте. Ну отлично. Можно сие запилить в Орион, скажем так: - запуск клиента через Орион - при запуске он инжектит ссылку на пользовательскую папку и скрипт realtime-загрузчика через path.xml - после этого можно спокойно работать со криптами в пользовательской папке и они сохранении сразу же будут исполняться в загруженном клиенте, вывод ошибок можно будет перенаправить куда нам надо, а не в python.log - после выхода из клиента, Орион уберет инжект ссылку из path.xml Пример на коленке. Вот это будет замечательно. Особенно если ошибки можно будет видеть раньше чем они сохраняются в лог. Quote Share this post Link to post Short link Share on other sites
MakcT40 330 #181889 Posted May 8, 2014 (edited) если ошибки можно будет видеть раньше чем они сохраняются в логА чем это лучше отдельного модика? def auto_FlushPythonLog(): BigWorld.flushPythonLog() BigWorld.callback(1.0, auto_FlushPythonLog) Edited May 8, 2014 by MakcT40 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,149 #181890 Posted May 8, 2014 Вот это будет замечательно. Особенно если ошибки можно будет видеть раньше чем они сохраняются в лог. Можно в ваш загрузчик дописать простейший хук на stderror и на время работы хука перенаправить вывод ошибок куда угодно :) Ладно, сделаем. Я сам не так часто пишу моды, потому и в голову такое мне даже и не пришло, но я такие знал что у народ что-то уже придумал для взаимодействия с клиентом... :))) В принципе при таком подходе отпадает надобность в заглушках на встроенные модули. К тому же есть один полезный момент - при запущенном клиенте с realtime-загрузчиком я могу через него сделать обмен данными между средами Ориона и клиента :)))) 1 Quote Share this post Link to post Short link Share on other sites