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

если Decompyle++ встречает обфуцированный код то обычно он крашиться как у вас на скрине. Значит код обфусцирован.

А у меня pycdc часто крашится и на обычных скриптах, без защиты.
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Решил создать простенькую модельку в ангаре.

model = BigWorld.Model('objects/test.model')
И прощай клиент.

Стабильно вылетает, зараза.

Share this post


Link to post

Short link
Share on other sites

А у меня pycdc часто крашится и на обычных скриптах, без защиты.

 

Да он любит крашиться на всяких вычурных инструкциях. 

Решил создать простенькую модельку в ангаре.

model = BigWorld.Model('objects/test.model')
И прощай клиент.

Стабильно вылетает, зараза.

 

 

А ВГ-шный код создания модели танка в ангаре пробовал повторить?

Share this post


Link to post

Short link
Share on other sites

А ВГ-шный код создания модели танка в ангаре пробовал повторить?

Если эту часть кода

model = BigWorld.Model('objects/test.model')
выполнять в Орионе, то крашится клиент. Если создать мини-мод

import BigWorld, Math
BigWorld.tmdl = BigWorld.Model('objects/test.model')
А потом оперировать с моделью BigWorld.tmdl

То все нормально.

Крашится именно из-за вызова BigWorld.Model() в Орионе.

 

З.Ы. Прикол тот же, что и с модулем GUI когда-то.

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites

З.Ы. Прикол тот же, что и с модулем GUI когда-то.

 

Ну это логично, косяк все тот же - область среды. Я кстати тогда помню немного поковырялся но проблему так и не решил. Если обвернуть процедурой и вызывать в контексте игры то проблем нет. Моды же через Орион в игру импортируются через SHIFT+F5

Share this post


Link to post

Short link
Share on other sites

, а в чем у тебя были проблемы в плане контекстных подменю? Я вот тут статейку взял - тыц.

 

Для проверки сварганил вручную вложенные контекстные подменю по Варианту №2 как там на Windows 8.1. Ни каких проблем. Может на Висте ли на XP так не робит? Отпишись пока я не реализовал еще.

 

Я уже делаю на Делфи, скрипт твой помог но только в плане того что сократил мне время на то чтобы вникнуть в механизм. На Делфи мне проще и быстрее будет реализовать поддержку ассоции с файлами и контексты. Согласно статье можно засунуть в подменю 16 пунктов. Думаю нам заглаза будет.


UPD: Проверил в XP нет подменю, значит робит только на Win7-8.1

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Я вот тут статейку взял

И я о том же писал пару страниц назад.

 

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

Есть один момент - спецификация типа файла может быть описана сразу в разделе типа файла, а может быть задана ссылкой на общий тип. На один общий тип может ссылаться несколько типов. Тогда контекстное меню для них будет одинаковым.

Например

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.py]
@="Python.File"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\Python.File]
@="Python File"

[HKEY_CLASSES_ROOT\Python.File\DefaultIcon]
@="C:\\Python27\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.File\shell]

[HKEY_CLASSES_ROOT\Python.File\shell\Edit with IDLE]

[HKEY_CLASSES_ROOT\Python.File\shell\Edit with IDLE\command]
@="\"C:\\Python27\\pythonw.exe\" \"C:\\Python27\\Lib\\idlelib\\idle.pyw\" -e \"%1\""

[HKEY_CLASSES_ROOT\Python.File\shell\open]

[HKEY_CLASSES_ROOT\Python.File\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"

[HKEY_CLASSES_ROOT\Python.File\shellex]

[HKEY_CLASSES_ROOT\Python.File\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.wotreplay]
@="World of Tanks Battle Replay"

[HKEY_CLASSES_ROOT\.wotreplay\DefaultIcon]
@="\"D:\\-=!GAMES!=-\\World of Tanks\\worldoftanks.exe\",1"

[HKEY_CLASSES_ROOT\.wotreplay\shell]

[HKEY_CLASSES_ROOT\.wotreplay\shell\open]

[HKEY_CLASSES_ROOT\.wotreplay\shell\open\command]
@="\"D:\\-=!GAMES!=-\\World of Tanks\\worldoftanks.exe\" \"%1\""

 

Ну это логично, косяк все тот же - область среды. Я кстати тогда помню немного поковырялся но проблему так и не решил. Если обвернуть процедурой и вызывать в контексте игры то проблем нет. Моды же через Орион в игру импортируются через SHIFT+F5

А если ресивер сделать как мод-файл, скажем, подменой game.pyc, по такому принципу:

Тыц

#***
# Load original file
#***
def loadOriginalFile():
	import os, marshal
	originalFilePath = 'res/' + __file__
	if os.path.exists(originalFilePath) and os.path.isfile(originalFilePath):
		with open(originalFilePath, 'rb') as originalFile:
			exec marshal.loads(originalFile.read()[8:]) in globals()
	return

loadOriginalFile()
del loadOriginalFile

И дальше код инициализации ресивера. Почему game.py? Грузится в самом начале, содержимое приличное, поэтому его никто не трогает. А код под спойлером нечувствителен к патчам.

Share this post


Link to post

Short link
Share on other sites

 

 

Может на Висте ли на XP так не робит?
 

На счёт Vista можно не волноваться.

В XP некоторые программы создают контекстные подменю с помощью каких-то хитрых манипуляций с динамическими библиотеками и кучей записей в реестр.

Нашёл подобное в исходниках 7zip по пути ./CPP/7zip/UI/Explorer/.

Share this post


Link to post

Short link
Share on other sites

Подскажите, этот файл невозможно открыть(нужно удалить несколько строк) или я что то не так делаю.

1.rar

Share this post


Link to post

Short link
Share on other sites

Подскажите, этот файл невозможно открыть(нужно удалить несколько строк) или я что то не так делаю.

 

Файл обработан защитой от декомпиляции, "открыть" не удастся.

Share this post


Link to post

Short link
Share on other sites

Файл обработан защитой от декомпиляции, "открыть" не удастся.

А как узнать что файл защищен?

Share this post


Link to post

Short link
Share on other sites

А как узнать что файл защищен?

 

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

 

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

Share this post


Link to post

Short link
Share on other sites

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

Скрипты с rf все покрыты маршалом и к ним относиться свыше предостережение?
Можно мне объяснить - если я прокололся что обфусцированный мод с протектором перевёл в py маршалом и наложил ещё протектор и мод взломали а все скрипты покрыты тем же маршалом с сайта rf значит ли что они также щёлкаются и в чём отличие если нет?   :ok:

Edited by KACTET

Share this post


Link to post

Short link
Share on other sites

Если сделать из скрипта одну строку, то что там обфусцировать то?

Share this post


Link to post

Short link
Share on other sites

Можно мне объяснить - если я прокололся что обфусцированный мод с протектором перевёл в py маршалом и наложил ещё протектор и мод взломали а все скрипты покрыты тем же маршалом с сайта rf значит ли что они также щёлкаются и в чём отличие если нет?   :ok:

 

Там под маршалом байт-код с кучей джампов.

Share this post


Link to post

Short link
Share on other sites

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

 

Скрипты с rf все покрыты маршалом и к ним относиться свыше предостережение?

Можно мне объяснить - если я прокололся что обфусцированный мод с протектором перевёл в py маршалом и наложил ещё протектор и мод взломали а все скрипты покрыты тем же маршалом с сайта rf значит ли что они также щёлкаются и в чём отличие если нет?   :ok:

 

 

Привожу пример явного идиотизма:

- берем скрипт

text = 'Secret code'
key=17453628
print 'Secret code %s' % int(key * 3 / 4)

- сжимаем в строку

exec __import__('marshal').loads('eNpLZoACFiB2AOJidSCRwsAQBSQZGaIYGVKYGFKBCMhgZhBJYWEQbWZkEHP3SGFlCNZgA2ngBhLBqclFqSUKyfkpqZk2QVyMxXyoggqqxZnMQKFMkDV+GiBmCYhZklpRUgLiZadWgunMvBINkHMQRAmY4AASNrn5KaU5qXaMIFtButkY2RgB9+gd+A=='.decode('base64').decode('zlib'))

- компилируем с обфускацией в файл MegaMode.pyc

- накладываем кучу всяких хитрых протекторов и защит

- отдаем pyc-файл Васе

 

Вася пишет код:

import marshal

old_loads = marshal.loads

def new_loads(value):
    print value
    return old_loads(value)

marshal.loads = new_loads

import MegaModе

marshal.loads = old_loads

Что получит Вася в value сам догадаешься?

Там под маршалом байт-код с кучей джампов.

 

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

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Привожу пример явного идиотизма:

- берем скрипт

text = 'Secret code'
key=17453628
print 'Secret code %s' % int(key * 3 / 4)
- сжимаем в строку

exec __import__('marshal').loads.....- компилируем с обфускацией в файл MegaMode.pyc

- накладываем кучу всяких хитрых протекторов и защит

- отдаем pyc-файл Васе

 

 

Так это то понятно. Если скрипт обфусцирован и поставлен на него протектор а потом сжат маршалом то как Вася выдирает исходный код из него?

Share this post


Link to post

Short link
Share on other sites

 Если скрипт обфусцирован и поставлен на него протектор а потом сжат маршалом то как Вася выдирает исходный код из него?

 

В этом случае ни как не выдирает.

 

ЗЫ: Если он конечно реально обфусцирован как в Орионе или у Мерца, а не как у Леликоптера храниться в не защищенном виде да еще и в переменной.

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

В этом случае ни как не выдирает.

 

ЗЫ: Если он конечно реально обфусцирован как в Орионе или у Мерца, а не как у Леликоптера храниться в не защищенном виде да еще и в переменной.

Ясно. Спс. Вот теперь ситуация прояснилась для меня...

Ещё вопрос обязательно ли при обфускации ставить галку на Insert Unused Bytecode? Т.к. очень часто если скрипт обфусцирован сторонней программой он ломается!

Сильно влияет ли это на качество самой обфускации Ориона?

Share this post


Link to post

Short link
Share on other sites

Пытаюсь отследить TankmanDismiss (демобилизация)

from gui.shared.gui_items.processors import tankman

original_TankmanDismiss_successHandler = tankman.TankmanDismiss._successHandler

def new_TankmanDismiss_successHandler(self, code, ctx=None):
    print('TankmanDismiss___')
    print(code)
    print(ctx)
    return original_TankmanDismiss_successHandler(code, ctx)

tankman.TankmanDismiss._successHandler = new_TankmanDismiss_successHandler

После демобилизации вот что получаю

*** TankmanDismiss___
*** 0
*** None
*** Traceback (most recent call last):
***   File "scripts/client/Account.py", line 299, in onCmdResponse
***   File "scripts/client/account_helpers/Inventory.py", line 168, in <lambda>
***   File "scripts/client/gui/shared/gui_items/processors/tankman.py", line 50, in <lambda>
***   File "scripts/client/gui/shared/gui_items/processors/__init__.py", line 273, in _response
***   File "res_mods\0.9.6\scripts\client\mods\dismiss.py", line 9, in new_TankmanDismiss_successHandler
***     return original_TankmanDismiss_successHandler(code, ctx)
*** TypeError: unbound method _successHandler() must be called with TankmanDismiss instance as first argument (got int instance instead)

Скажите, что я делаю не так?

P.S.На всякий случай выкладываю декомпилированный tankman.pytankman.zip

 

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