Перейти к содержимому

Фото

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


  • Чтобы отвечать, сперва войдите на форум
2332 ответов в теме

Опрос: PjOrion - редактирование, компиляция, декомпиляция, обфускация модов (Версия: 1.3.4 Дата: 23.07.2017) (168 пользователей проголосовали)

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

  1. Часто пользуюсь (70 голосов [41.67%])

    Процент голосов: 41.67%

  2. Редко, но пользуюсь (52 голосов [30.95%])

    Процент голосов: 30.95%

  3. Не пользуюсь, но слежу за новостями и смотрю новые билды (23 голосов [13.69%])

    Процент голосов: 13.69%

  4. Не пользуюсь (23 голосов [13.69%])

    Процент голосов: 13.69%

Голосовать Гости не могут голосовать

#1 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 961 сообщений
  • WoT Server:RU (Русский)

Опубликовано 06 Май 2014 - 19:56

*
Популярное сообщение!

Project "ORION"

 

2787427.jpg

 

 

Версия: 1.3.4__|__Дата: 23.07.2017

 

"Когда на питоне начинаются разговоры про быстроту я сразу волнуюсь"  ©  ВЛ

 

Описание:
Перед вами универсальный инструмент для компиляции, декомпиляции и обфускации python-модов. Программа использует технологию Python4Delphi и взаимодействует с python-движком через dll-библиотеку. Исходники модулей питона запакованы в zip-архив, который идёт вместе с программой. Для полноценной автономной работы Ориона достаточно иметь dll-библиотеку и zip-архив с модулями питона. При этом вы можете подключиться и к любому python-движку, который уже установлен на вашем компьютере.
 

 

2787389.jpg

3309895.jpg

 

Ограничения:

  • ОС Windows XP/Vista/7/8/10
  • поддерживаются Python 2.3-3.6
  • dll-файлы только версии x86
  • тестировалось на Python 2.6.x, 2.7.x, 3.6.x и их более ранних версиях
  • запуск только из каталогов, не содержащих в путях буквы русского алфавита

Особенности:

 

Видео для новичков - YouTube

 

Скачать: 

  • Графическая оболочка PjOrion + Питон 2.7.x + *pack.zip:__Прикрепленный файл  PjOrion_1.3.4_23.07.2017.zip   5,39 Мб   102 раз скачано  |  VirusTotal: 0/62 | Старые версии здесь
  • Питон 2.6.x и Питон 3.x для PjOrion:_______________  ____в программе "Help - Download P2.6 and P3.5 for PjOrion"
  • DLLs x86 для разных версий Питона:_____________________  в программе "Help - Download DLLs for PjOrion"

 

 

Прикрепленный файл  key3.gif   1,94 Кб   15 раз скачано Прикрепленный файл  key1.gif   1,94 Кб   8 раз скачано Прикрепленный файл  key2.gif   1,88 Кб   3 раз скачано

Как защитить свой код:

 

Не следует!

  • Применять протектор к необфусцированному скрипту, так как в этом случае код может быть декомпилирован непосредственно из среды питона
  • Ограничиваться только обфускацией байт-кода скрипта без наложения протектора, так как в таком случае байт-код легко доступен для анализа и модификации с последующей декомпиляцией
  • Применять протектор несколько раз к одному скрипту, так как на практике это не делает защиту более стойкой, однако увеличивает время импорта модуля и может даже нарушить его работу
  • Включать опцию "Lock attributes review and double import", если ваш скрипт подменяет реальный модуль клиента игры или у вас несколько модулей и они импортируют друг друга, так как атрибуты модулей из вне доступны не будут
  • Использовать функцию def Init() для запуска вашего мода, если вы включили опцию "Lock attributes review and double import", так как с данной опцией загрузчик модов, встроенный в клиент, не сможет получить доступ к функции Init()

Внимание! Если вы компилируете скрипт с обфускацией, то ни в коем случае предварительно не сжимайте его в строку командой "Move script to ZipBase64-box", так как байт-код вашего скрипта не будет обфусцирован и его можно легко извлечь!

 

История версий:

 

Если файл не декомпилируется - скорее всего он защищён

 

Файлы могут не декомпилироваться по нескольким причинам:

  1. Версия питона, в котором скомпилирован файл, не совместима с версией декомпилятора
    Например, декомпиляторы в Орионе не понимают Python 3.x, но работают с питоном более младших версий. В таких случаях нужно искать соответствующий декомпилятор.
  2. Выбранный декомпилятор не смог правильно распознать байт-код или его структуру
    Как известно декомпиляторы несовершенны, а потому их много разных и все они работают с разным результатом. По этой причине в Орионе собрано несколько декомпиляторов из наиболее известных. Если один не справился, то пробуйте другой.
  3. Байт-код защищён от декомпиляции автором файла
    Если файл защищён, то выполнить реверс скрипта доступными в сети декомпиляторами и общеизвестными инструментами, как правило, нельзя, так как файл как раз от этого и защищён. В таких случаях я всегда рекомендую искать автора файла, обращаться к нему, и если он сочтёт нужным, то поделится с вами исходником или какой-либо еще информацией, интересующей вас.

​​​Если вы сомневаетесь защищён ли файл от декомпиляции, то вот тут можно посмотреть примеры.

 

Декомпилированные pyc-файлы и распакованные xml-файлы игры

 

Файлы:

Для поиска кода в py-файлах клиента:

  1. Скачайте архив и извлеките содержимое в любую папку.
  2. Откройте Notepad++ и перенесите в него папку scripts\client, затем дождитесь когда он загрузит файлы.
  3. Для поиска по всем файлам жмём CTRL+F, вводим строку поиска и жмём "Найти всё во всех Открытых Документах", затем наслаждаемся результатом.
  4. Чтобы закрыть все файлы в Notepad++ и при этом он не пытался их все открыть заново при следующем запуске, закрывайте файлы командой из главного меню "Файл - Закрыть все".

Как самому декомпилировать и распаковать файлы игры:

  1. Скачиваем PjOrion, извлекаем в любую папку (русские символы в пути не желательны).
  2. Запускаем программу от имени администратора, вызываем окно настроек Terminal - Settings - Context menu..., ставим галочку "Integrate into the Explorer context..." и жмем кнопку "Apply...".
  3. Выходим из программы, заходим в папку с игрой и копируем в любое место подпапку World_Of_Tanks\res\scripts.
  4. У скопированной папки scripts вызываем правой кнопкой мыши контекстное меню проводника и выбираем команду PjOrion - Decompile pyc-files - Uncompyle2, затем ожидаем окончания работы программы, за ходом декомпиляции можно следить по статистике внизу программы в строке состояния.
  5. После завершения декомпиляции, распаковываем xml-файлы, для этого опять вызываем контекстно меню проводника на папке и выбираем команду PjOrion - Unpack XML-files, затем ждем завершения.

Изменено: StranikS_Scan, 24 Июль 2017 - 19:47

  • 62

#2 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 961 сообщений
  • WoT Server:RU (Русский)

Опубликовано 06 Май 2014 - 22:23

FAQ по PjOrion

 

Общие вопросы:

Среда Питона:

Ввод/Вывод

Редактирование скриптов:

Компиляция скриптов:

Выполнение скриптов:

Обработка скриптов:

Декомпиляция байткода:

Дизассемблирование байткода:

WOT-Transmission:

 

Аргументы командной строки:

Горячие клавиши и их комбинации:

Видео:


Изменено: StranikS_Scan, 23 Июль 2017 - 16:43

  • 12

#3 fecell

fecell
  • Пользователь
  • 286 сообщений
  • Nick: fecell

Опубликовано 07 Май 2014 - 00:58

<reserved>


Изменено: fecell, 25 Май 2016 - 00:46

  • 0

#4 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 961 сообщений
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 01:50

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

 

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

 

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

 

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


Изменено: StranikS_Scan, 07 Май 2014 - 01:51

  • 0

#5 fecell

fecell
  • Пользователь
  • 286 сообщений
  • Nick: fecell

Опубликовано 07 Май 2014 - 02:22

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


  • 0

#6 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 961 сообщений
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 08:28

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

 

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


  • 0

#7 lportii

lportii
  • Пользователь
  • 72 сообщений
  • Nick: lportii
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 20:34

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

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


  • 0

#8 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 961 сообщений
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 20:39

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

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

 

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


  • 0

#9 lportii

lportii
  • Пользователь
  • 72 сообщений
  • Nick: lportii
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 21:28

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

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

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

Попробовал:

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

 

И в какой момент скрипты подхватываются, сразу или при загрузке карты, например?


Изменено: lportii, 07 Май 2014 - 21:31

  • 0

#10 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 961 сообщений
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 21:46

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

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

Попробовал:

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

 

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


  • 0

#11 lportii

lportii
  • Пользователь
  • 72 сообщений
  • Nick: lportii
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 21:58

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

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

 

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

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

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


Изменено: lportii, 07 Май 2014 - 22:02

  • 0

#12 MakcT40

MakcT40
  • Пользователь
  • 479 сообщений
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 22:54

Offtop On

(10000,10000)

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

Изменено: MakcT40, 07 Май 2014 - 22:58

  • 0

#13 lportii

lportii
  • Пользователь
  • 72 сообщений
  • Nick: lportii
  • WoT Server:RU (Русский)

Опубликовано 07 Май 2014 - 23:05

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

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

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


  • 0

#14 fecell

fecell
  • Пользователь
  • 286 сообщений
  • Nick: fecell

Опубликовано 07 Май 2014 - 23:50

можно попробовать сделать эмуляцию модуля BigWorld

 

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


Изменено: fecell, 08 Май 2014 - 04:36

  • 0

#15 deutscher_Adler

deutscher_Adler
  • Пользователь
  • 68 сообщений
  • Nick: deutscher_Adler
  • WoT Server:EU (European)

Опубликовано 08 Май 2014 - 07:27

Thats rly nice!

Big thanks for this nice tool Stranik


  • 0

#16 lportii

lportii
  • Пользователь
  • 72 сообщений
  • Nick: lportii
  • WoT Server:RU (Русский)

Опубликовано 08 Май 2014 - 08:33

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

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

 

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

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

http://rghost.ru/55025199

 

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


Изменено: lportii, 08 Май 2014 - 08:36

  • 1

#17 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 961 сообщений
  • WoT Server:RU (Русский)

Опубликовано 08 Май 2014 - 08:50

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

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

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

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

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

 

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


Изменено: StranikS_Scan, 08 Май 2014 - 08:52

  • 0

#18 lportii

lportii
  • Пользователь
  • 72 сообщений
  • Nick: lportii
  • WoT Server:RU (Русский)

Опубликовано 08 Май 2014 - 08:53

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

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

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

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

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

 

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

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


  • 0

#19 MakcT40

MakcT40
  • Пользователь
  • 479 сообщений
  • WoT Server:RU (Русский)

Опубликовано 08 Май 2014 - 09:05

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

А чем это лучше отдельного модика?
def auto_FlushPythonLog():
    BigWorld.flushPythonLog()
    BigWorld.callback(1.0, auto_FlushPythonLog)

Изменено: MakcT40, 08 Май 2014 - 09:05

  • 0

#20 StranikS_Scan

StranikS_Scan

    Теоретик WorldOfTanks

  • Premium Member
  • 5 961 сообщений
  • WoT Server:RU (Русский)

Опубликовано 08 Май 2014 - 09:10

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


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

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

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

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

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





0 пользователей читают эту тему

0 зарегистрированных, 0 гостей, 0 невидимых

© Mr 13