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

03.02.2021 в 01:58, Molnio сказал:

Почему файл .pyc весит 45 кб а когда декомпилирую то 1 кб и внутри файла ничего нет кроме надписей:
# Python bytecode 2.7 (decompiled from Python 2.7)
# Embedded file name: mod_players_online
# Compiled at: 2021-01-27 10:19:54
 

А что надо от моего мода?

Share this post


Link to post

Short link
Share on other sites
Только что, Ekspoint сказал:

А что надо от моего мода?

спортивный интерес. Недавно начал пайтон изучать а конкретно интересно как ты реализовал функцию перетаскивания объекта по экрану. Даже в бою есть такие моды.

Share this post


Link to post

Short link
Share on other sites
5 минут назад, Molnio сказал:

спортивный интерес. Недавно начал пайтон изучать а конкретно интересно как ты реализовал функцию перетаскивания объекта по экрану. Даже в бою есть такие моды.

Это в сторону Action scripts копать надо, а не притон

Share this post


Link to post

Short link
Share on other sites
21 минуту назад, Ekspoint сказал:

Это в сторону Action scripts копать надо, а не притон

а есть какие то гайды или мануалы по редактированию данных скриптов, как и чем декомпилировать и так далее.

Share this post


Link to post

Short link
Share on other sites
25.02.2015 в 18:35, StranikS_Scan сказал:

 

Откройте его любым текстовым редактором например блокнотом. И смотрите что находиться в конце файла

 

1. Файл обработан защитой от mercger

 

post-7009-0-83615600-1424878467_thumb.jpg

 

2. Файл обработан защитой от lelicopter

 

post-7009-0-87709300-1424878468_thumb.jpg

 

3. файл обработан защитой от if_then_else 

 

post-7009-0-27126400-1424878469_thumb.jpg

 

4. Файл обфусцирован в Орионе

 

post-7009-0-60711100-1424878469_thumb.jpg

 

5. Файл обработан протектором в Орионе

 

post-7009-0-92738000-1424878469_thumb.jpg

Есть ещё такой протектор как scraZ. Гугление показало, что его можно было скачать с сайта scraz.me, который уже не существует. Это был платный или бесплатный продукт? Интересно в нём покопаться.

Share this post


Link to post

Short link
Share on other sites
45 минут назад, Dragon armor сказал:

Это был платный или бесплатный продукт?

Он имел две версии.

Share this post


Link to post

Short link
Share on other sites

@Dragon armor было две версии классическая на основе запутывания байт-кода и потом была еще с pyd-инжектором, который инжектил код в обход стандартного вызова exec (но это не точно, что он именно это умел делать, это я так думаю ибо нативный хук exec - это простой и эффективный способ обойти протектор)

Share this post


Link to post

Short link
Share on other sites
8 часов назад, DrWeb7_1 сказал:

Он имел две версии.

И все пользуются бесплатной, ясно.

Искал сайт через web.archive, но выдало, что результат не найден.

1 минуту назад, StranikS_Scan сказал:

нативный хук exec - это простой и эффективный способ обойти протектор

Там ещё и все строки выносятся отдельно, которые загрузчик создаёт. Простой дамп скрипта не покажет их. Хорошо, что однообразно делает это, а то можно было бы зарандомить немного и ещё на ровном месте усложнить протектор.

А поделиться scraZ_setup.exe кто-то может? Хотя, есть у меня подозрения, что исполняемый файл так же защищён чем-нибудь типа vmprotect.

Share this post


Link to post

Short link
Share on other sites
1 час назад, Dragon armor сказал:

усложнить протектор.

 

Протекторы обычно никто не ковыряет, ибо смысла нет, ведь на exec все равно подается расшифрованная строка. Достаточно её сдампить. И вот с этим очень тяжело бороться. Тут либо сделать так чтобы exec не использовался вообще*, либо бить код на части, добавлять ложные куски и делать много exec**, и то и другое в реальности - очень сложно и долго делать. А без протектора защита теряет сразу 50% своей прочности. Остальные 50% это обфускация байткода*** (того что в exec идет) и еще есть обфускация пайтон-кода**** (но это ерунда, только от детей, ибо никак не препятствует тому чтобы кто-то подсмотрел твои ключевые элементы кода).

 

*Например, либо создать пид, в котором реализовать собственный нативный код выполнения, но его тоже могут дизаснуть и потом сдампить строку, либо превращать пайтон-код скриптов в си-код и компилить из этого пид, это самый крутой способ, но очень сложный

**Задача тоже крайне не тривиальная и трудоёмкая

***Тут тоже можно всякого наворотить, если скажем игра с JMP-опкодами это позавчерашний день, то из современного (на мой взгляд) это полное видоизменение байткода для опосредованного управления регистрами и содержимом стека, когда интерпретатор выполняет непонятные действия (причем рандомные в каждом новом скрипте), но в итоге они приводят к нужному результату. Декомпилировать такой байткод автоматически нереально, потому что сопоставить ему пайтон-код однозначно можно будет только вручную. Ну и производительность от этого падает, т.к. "процессорное" время тратится впустую.

****Это когда пайтон-код переписывается в запутанный, сюда же кстати относиться и переименование/шифрование строк и имен переменных, функций и атрибутов. Но это все может шибко убить производительность интерпретатора

 

Есть такое вот июнь 2017-го.

2017 год.zip

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites
1 час назад, StranikS_Scan сказал:

Есть такое вот июнь 2017-го.

PEiD утверждает, что тут UPolyX v0.5. Так и есть, исполняемый файл защищён.

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

Цитата

signing key:  scraZ ~ Balina

Вот что это означает. Теперь ясно-понятно.

Да, это оно. Ещё и про-лицензия. Всё так же, константы в одном месте, код в другом, вызов через функцию в третьем месте.

 

Share this post


Link to post

Short link
Share on other sites
2 часа назад, Dragon armor сказал:

PEiD утверждает, что тут UPolyX v0.5.

 

Сигнатуры старые скорее всего. Он часто так показывает. Скорее всего там какой-то из современных протекторов.

Share this post


Link to post

Short link
Share on other sites
09.02.2021 в 19:37, Dragon armor сказал:

Вот что это означает. Теперь ясно-понятно.

Да, это оно. Ещё и про-лицензия. Всё так же, константы в одном месте, код в другом, вызов через функцию в третьем месте.

Прикольно =) Не совсем так, но частично верно.

09.02.2021 в 16:18, Dragon armor сказал:

И все пользуются бесплатной, ясно.

Искал сайт через web.archive, но выдало, что результат не найден.

версия с .pyd имела большие ограничения, поэтому её разработка была прекращена.

в той версии любой скрипт после декомпиляции был лишь.

__import__('scraZ').scarZ()

в свою очередь pyd из вызываемого скрипта брал все остальное, расшифровывал и запускал.

ёмнип, в lnotab хранились сами зашифрованные данные. как запускался после расшифровки не помню, надо поднимать исходники, Py_EvalEx вроде вызывался. Был расшифрованный скрипт еще чем-то защищен или нет (типа перемешать байткод), уже забыл. Та версия никогда нигде не публиковалась, была тестовой предварительной. В сети её не найти.

Share this post


Link to post

Short link
Share on other sites
09.02.2021 в 10:06, StranikS_Scan сказал:

превращать пайтон-код скриптов в си-код и компилить из этого пид, это самый крутой способ, но очень сложный

не такой уж и сложный, но минусы имеются - постоянно нужно тягать зависимости (а-ля xfw.native), которые будут экспортировать нужные питоновские символы

тут нет серебрянной пули, каждая защита должна выбираться исходя из требований к ее стойкости

Share this post


Link to post

Short link
Share on other sites

Есть повторяемая проблема обфускации кода.

Шаги:
Иерархия папок:
-modTest
--res\scripts\client\gui\mods

---mod_test.py
--meta.xml

mod_test.py:

# -*- coding: utf-8 -*-

print('Hello world')

 

Через PjOrion делаю Bytecode->Obfuscate->Compile py-file и выбираю mod_test.py

>>> Obfuscating... Please wait the completion message!
>>> Compile obfuscated file 'mod_test.py' [0.03 seconds]


Собираю в .wotmod файл, кидаю в mods чистого клиент танков. Запускаю игру, в лог выводится 

/------------------------------------------------------------------------------------------\
WorldOfTanks(x86) 0.0.0.0 (compiled at 07:18:44 Jul  8 2021) starting on Sat Jul 31 02:15:09 2021

2021-07-31 02:15:09.864: INFO: [Config] Command line: C:/Games/World_of_Tanks_RU/win32/WorldOfTanks.exe ""
2021-07-31 02:15:11.778: INFO: [SOUND] Start loading Main task
2021-07-31 02:15:11.778: INFO: [SOUND] Start loading Mod task
2021-07-31 02:15:11.779: INFO: [Scaleform] Create Scaleform Manager...
2021-07-31 02:15:11.854: INFO: Scaleform initialized
2021-07-31 02:15:11.867: INFO: [Scaleform] Scaleform Manager created.
2021-07-31 02:15:11.867: INFO: Unbound initialized
2021-07-31 02:15:12.469: INFO: WOT-Transmission initialization completed!
2021-07-31 02:15:12.471: INFO: You are in the __main__ module, use a WOT-Transmission menu command to work with the client
2021-07-31 02:15:12.472: INFO: =====================================================================================
2021-07-31 02:15:12.568: TRACE: monkeyPatchOpen: BWUtil.monkeyPatchOpen: Patching open() True
2021-07-31 02:15:12.570: INFO: [Config] Default encoding set to utf-8
2021-07-31 02:15:12.572: TRACE: revertPatchedOpen: BWUtil.revertPatchedOpen: Reverting open()
2021-07-31 02:15:12.610: INFO: [PY_DEBUG] Release Client - Content Type: sd

2021-07-31 02:15:12.610: INFO: [PY_DEBUG] Checking C:/Games/World_of_Tanks_RU/res_mods/1.13.0.1/: mods not found
2021-07-31 02:15:12.610: INFO: [PY_DEBUG] Checking C:/Games/World_of_Tanks_RU/mods/1.13.0.1/: mods found
2021-07-31 02:15:12.611: INFO: [PY_DEBUG] Mod package 'c:/games/world_of_tanks_ru/mods/1.13.0.1/mod.testmod_0.0.1.wotmod' loaded
2021-07-31 02:15:14.530: INFO: [Scaleform] Create GUI Component: 'empty'
2021-07-31 02:15:14.530: INFO: [Scaleform] Change Owner on GUI Component: 'empty' -> 'loading_screen.gui'
2021-07-31 02:15:14.542: INFO: [Scaleform] Create GUI Component: 'FlashGUIComponent'
2021-07-31 02:15:14.542: INFO: [Scaleform] Change Owner on GUI Component: 'FlashGUIComponent' -> 'gui/flash/gameLoadingApp.swf'
2021-07-31 02:15:14.543: INFO: [gui.Scaleform.game_loading] Build: RELEASE 07:18:44 Jul  8 2021. Version: 2.8.0
2021-07-31 02:15:14.544: INFO: [gui.Scaleform.game_loading] App Startup
2021-07-31 02:15:14.616: DEBUG: [helpers.uniprof.regions] Region is entered: label=offline.game_loading, color=0xCE2606
2021-07-31 02:15:14.730: INFO: [gui.Scaleform.game_loading] Registering graphics settings
2021-07-31 02:15:14.747: INFO: [gui.Scaleform.game_loading] Preloading Resources
2021-07-31 02:15:23.843: WARNING: [web.web_client_api] Do not use "required" and "default" at the same time!
2021-07-31 02:15:23.844: WARNING: [web.web_client_api] Do not use "required" and "default" at the same time!
2021-07-31 02:15:23.845: WARNING: [web.web_client_api] Do not use "required" and "default" at the same time!
2021-07-31 02:15:23.846: WARNING: [web.web_client_api] Do not use "required" and "default" at the same time!
2021-07-31 02:15:24.022: INFO: [Scaleform] Create GUI Component: 'FlashGUIComponent'
2021-07-31 02:15:24.022: INFO: [Scaleform] Change Owner on GUI Component: 'FlashGUIComponent' -> 'gui/flash/waitingTransitionsApp.swf'
2021-07-31 02:15:24.745: INFO: Hello world

После чего игра крашится без каких либо дополнительных ошибок. 

Тот же самый мод скомпиленный без обфускации игру не крашит, hello world выводит

В чём может быть проблема? 

Share this post


Link to post

Short link
Share on other sites
6 часов назад, SoprachevAK сказал:

# -*- coding: utf-8 -*- print('Hello world')

 

Добавьте строку import BigWorld в начало модуля и будет ОК. Это древняя штука у них, появилась несколько лет назад после очередной оптимизации нативного пайтона. Научного объяснения этому я не знаю, но думаю это связано с памятью и областями видимости и исполнения кода. То что сам скрипт и обфускация кода тут не причем, это очевидно. Модуль без проблем работает в обычным пайтоне.

 

# -*- coding: utf-8 -*-

import BigWorld

print('Hello world')

 

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Такой вопрос, у меня в моде есть папка objects с разными файлами
Как со скрипта PjOrion можно их открыть, получить локальный путь?
не загружая в самом моде

если их хранить вне мода то уже StaticObjectMarker3D не видит по полному пути
решение - conf_file = openSection('scripts/client/gui/mods/objects')
 

Edited by baka01998
нашел ответ на вопрос

Share this post


Link to post

Short link
Share on other sites


>>> Connection to WOT: v.1.14.1.0 Common Test build 978 [C:\Games\World_of_Tanks_CT\]
>>> Start the game...
>>> WOT-Transmission closed

Hi, the game launches without issues however the transmission is instantly closed. How can I fix this?

I am following this video.

 

pjorion.gif

Edited by Buster2002

Share this post


Link to post

Short link
Share on other sites

Point it to either win32/WorldOfTanks.exe or win64/WorldOfTanks.exe.

You also need to create symlinks to paths.xml and version.xml (IIRC).

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