Jump to content
Korean Random
StranikS_Scan

PjOrion - редактирование, компиляция, декомпиляция, обфускация модов (Версия: 1.3.5 Дата: 11.08.2019)

Пользуетесь ли вы Орионом?  

310 members have voted

You do not have permission to vote in this poll, or see the poll results. Please sign in or register to vote in this poll.

Recommended Posts

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\

 

post-7009-0-05512800-1422983929_thumb.jpg

 

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

Переключение между режима осуществляется в строке состояния:

 

post-7009-0-34119700-1422984033_thumb.jpg

 

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).

 

post-7009-0-51171600-1422984066_thumb.jpg

 

При работе с клиентом игры через 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"последующей записью в неё значения 123. В результате этого исполнение второго кода привело к выводу на экран содержимого этой переменной. Для удаления переменной "a" из памяти среды, достаточно выполнить вот такой код


del a

Если вы хотите выполнить код из экспресс редактора, то для этого в его окне предусмотрена кнопка Exec (F5).

 

3. Запуск скриптов и pyc-файлом с передачей входных параметров

Для выполнения скрипта или байт-кода в среде не обязательно открывать файл в редакторе. Сделать это можно и удалённо. Для чего предусмотрено окно запуска скриптов с параметрами Run - Parameters...

 

post-7009-0-11460200-1422984093_thumb.jpg

 

Здесь:

  • 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-файл, то вы можете импортировать его в среду Питона в любой момент. Для этого:

  1. Добавляем папку со скриптом в пути окружения среды Питона (Главное меню - Terminal - Add folder to <sys.path>...)
  2. Записываем в редакторе код 
    
    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

 

Видео:

 

Edited by StranikS_Scan
  • Upvote 18
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Круто=)) ТОлько пару минигайдов не помешало... Что и с чем едят...

 

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

 

А для реализовано подключение к WOT? под рукой нет клиента чтобы проверить.. верно думаю, чтобы в сприпты танковые скомпилированный скрипт сразу копировался?

 

"Подключение" в кавычках к WOT есть. А вот чего с этим дальше делать уже вы предлагайте. Могу сделать как вы написали. Могу добавить функцию на декомпиляцию всех WOT скриптов в отдельную папку. Могу еще чего реализовать.

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, момент один обнаружил некритичный - запустил орион, переименовал папку с ним, вышел из него и.. "программа выполнила недопустимую операцию бла-бла-бла".. вероятно ini файл пытался сохраниться, а папка где он был уже переименована.. случайно так вышло, сразу не заметил что не вышел перед переименованием папки...

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, момент один обнаружил некритичный - запустил орион, переименовал папку с ним, вышел из него и.. "программа выполнила недопустимую операцию бла-бла-бла".. вероятно ini файл пытался сохраниться, а папка где он был уже переименована.. случайно так вышло, сразу не заметил что не вышел перед переименованием папки...

 

Это "связь с dll порвалась", при выходе он завершает сеанс работы и вот тут он и зарычал :)))

Share this post


Link to post

Short link
Share on other sites

>>> WOT connected: client not found or corrupted!

Не хочет ни в какую. У меня вин8 х64, может по этому?

Share this post


Link to post

Short link
Share on other sites

>>> WOT connected: client not found or corrupted!

Не хочет ни в какую. У меня вин8 х64, может по этому?

 

Клиент стоит? Если стоит значит просто пути в реестре не соот. реальному расположению клиента. Зайдите в настройки через главное меню и укажите путь к папке вручную.

Share this post


Link to post

Short link
Share on other sites

Клиент стоит? Если стоит значит просто пути в реестре не соот. реальному расположению клиента. Зайдите в настройки через главное меню и укажите путь к папке вручную.

Да, снял галку автоопределения, и все нашлось.

Еще вопрос, подключаются только питоновские модули?

Попробовал:

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 by lportii

Share this post


Link to post

Short link
Share on other sites

Да, снял галку автоопределения, и все нашлось.

Еще вопрос, подключаются только питоновские модули?

Попробовал:

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\ и соответственно скрипты в них будут доступны в среде Ориона.

 

Последний вопрос не понял.

Share this post


Link to post

Short link
Share on other sites

Последний вопрос не понял.

Если бы с BigWorld можно было бы работать, было бы просто шикарно.

 

По поводу вопроса, я подумал, что возможно программа инжектит скрипт, который имеет

луп с exec string. И таким образом исполняет практически все. То есть программа инжектит строку

которая исполняется.

Edited by lportii

Share this post


Link to post

Short link
Share on other sites

Offtop On

(10000,10000)

Второй параметр - это альфа, не нужно туда ставить такие большие числа. Хотя, по факту, этот параметр не работает, так что пофиг, что туда прописывать. :) Но мало ли...

Offtop Off

Edited by MakcT40

Share this post


Link to post

Short link
Share on other sites

Offtop On

Второй параметр - это альфа, не нужно туда ставить такие большие числа. Хотя, по факту, этот параметр не работает, так что пофиг, что туда прописывать. :) Но мало ли...

Offtop Off

Второй параметр это вроде как радиус, но для другого режима.

Могу ошибатся, инфы по функциям не нашел.

Share this post


Link to post

Short link
Share on other sites
можно попробовать сделать эмуляцию модуля BigWorld

 

имхо, других вариантов нет.. и по _FMOD вопрос, аналогично, открыт, правда с ним проще.. есть _fmodstubs.py который эмулирует функции _FMOD в случае неудачного импорта fmod

Edited by fecell

Share this post


Link to post

Short link
Share on other sites

имхо, других вариантов нет.. и по _FMOD вопрос, аналогично, открыт, правда с ним проще.. есть _fmodstubs.py который эмулирует функции _FMOD в случае неудачного импорта fmod

вот как я делаю -

 

открываю в нотпад++ файл test_script/test_script делаю изменения, нажимаю на эконку "дискета" - скрипт срабатывает.

Ниже файлики.

http://rghost.ru/55025199

 

Криво конечно, но время иногда экономит.

Edited by lportii
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@lportii, т.е. вы сразу тестите загрузку скрипта и смотрите результат в клиенте. Ну отлично. Можно сие запилить в Орион, скажем так:

- запуск клиента через Орион

- при запуске он инжектит ссылку на пользовательскую папку и скрипт realtime-загрузчика через path.xml

- после этого можно спокойно работать со криптами в пользовательской папке и они сохранении сразу же будут исполняться в загруженном клиенте, вывод ошибок можно будет перенаправить куда нам надо, а не в python.log

- после выхода из клиента, Орион уберет инжект ссылку из path.xml

 

Пример на коленке, логика как у Интрудера.

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@lportii, т.е. вы сразу тестите загрузку скрипта и смотрите результат в клиенте. Ну отлично. Можно сие запилить в Орион, скажем так:

- запуск клиента через Орион

- при запуске он инжектит ссылку на пользовательскую папку и скрипт realtime-загрузчика через path.xml

- после этого можно спокойно работать со криптами в пользовательской папке и они сохранении сразу же будут исполняться в загруженном клиенте, вывод ошибок можно будет перенаправить куда нам надо, а не в python.log

- после выхода из клиента, Орион уберет инжект ссылку из path.xml

 

Пример на коленке.

Вот это будет замечательно. Особенно если ошибки можно будет видеть раньше чем они сохраняются в лог.

Share this post


Link to post

Short link
Share on other sites

если ошибки можно будет видеть раньше чем они сохраняются в лог

А чем это лучше отдельного модика?

def auto_FlushPythonLog():
    BigWorld.flushPythonLog()
    BigWorld.callback(1.0, auto_FlushPythonLog)
Edited by MakcT40

Share this post


Link to post

Short link
Share on other sites

Вот это будет замечательно. Особенно если ошибки можно будет видеть раньше чем они сохраняются в лог.

Можно в ваш загрузчик дописать простейший хук на stderror и на время работы хука перенаправить вывод ошибок куда угодно :)

 

Ладно, сделаем.

 

Я сам не так часто пишу моды, потому и в голову такое мне даже и не пришло, но я такие знал что у народ что-то уже придумал для взаимодействия с клиентом... :)))

 

В принципе при таком подходе отпадает надобность в заглушках на встроенные модули.

 

К тому же есть один полезный момент - при запущенном клиенте с realtime-загрузчиком я могу через него сделать обмен данными между средами Ориона и клиента :))))

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...