MakcT40 331 #252590 Posted February 17, 2015 если Decompyle++ встречает обфуцированный код то обычно он крашиться как у вас на скрине. Значит код обфусцирован.А у меня pycdc часто крашится и на обычных скриптах, без защиты. 1 Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #252592 Posted February 17, 2015 Решил создать простенькую модельку в ангаре. model = BigWorld.Model('objects/test.model') И прощай клиент.Стабильно вылетает, зараза. Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #252605 Posted February 17, 2015 А у меня pycdc часто крашится и на обычных скриптах, без защиты. Да он любит крашиться на всяких вычурных инструкциях. Решил создать простенькую модельку в ангаре. model = BigWorld.Model('objects/test.model') И прощай клиент.Стабильно вылетает, зараза. А ВГ-шный код создания модели танка в ангаре пробовал повторить? Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #252609 Posted February 17, 2015 (edited) А ВГ-шный код создания модели танка в ангаре пробовал повторить?Если эту часть кода model = BigWorld.Model('objects/test.model')выполнять в Орионе, то крашится клиент. Если создать мини-мод import BigWorld, Math BigWorld.tmdl = BigWorld.Model('objects/test.model') А потом оперировать с моделью BigWorld.tmdlТо все нормально. Крашится именно из-за вызова BigWorld.Model() в Орионе. З.Ы. Прикол тот же, что и с модулем GUI когда-то. Edited February 17, 2015 by GPCracker Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #252611 Posted February 17, 2015 З.Ы. Прикол тот же, что и с модулем GUI когда-то. Ну это логично, косяк все тот же - область среды. Я кстати тогда помню немного поковырялся но проблему так и не решил. Если обвернуть процедурой и вызывать в контексте игры то проблем нет. Моды же через Орион в игру импортируются через SHIFT+F5 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #254035 Posted February 22, 2015 (edited) , а в чем у тебя были проблемы в плане контекстных подменю? Я вот тут статейку взял - тыц. Для проверки сварганил вручную вложенные контекстные подменю по Варианту №2 как там на Windows 8.1. Ни каких проблем. Может на Висте ли на XP так не робит? Отпишись пока я не реализовал еще. Я уже делаю на Делфи, скрипт твой помог но только в плане того что сократил мне время на то чтобы вникнуть в механизм. На Делфи мне проще и быстрее будет реализовать поддержку ассоции с файлами и контексты. Согласно статье можно засунуть в подменю 16 пунктов. Думаю нам заглаза будет. UPD: Проверил в XP нет подменю, значит робит только на Win7-8.1 Edited February 22, 2015 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #254052 Posted February 22, 2015 Я вот тут статейку взял А так?И я о том же писал пару страниц назад. На Делфи мне проще и быстрее будет реализовать поддержку ассоции с файлами и контексты.Есть один момент - спецификация типа файла может быть описана сразу в разделе типа файла, а может быть задана ссылкой на общий тип. На один общий тип может ссылаться несколько типов. Тогда контекстное меню для них будет одинаковым. Например 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? Грузится в самом начале, содержимое приличное, поэтому его никто не трогает. А код под спойлером нечувствителен к патчам. Quote Share this post Link to post Short link Share on other sites
Azbuka 278 #254104 Posted February 23, 2015 Может на Висте ли на XP так не робит? На счёт Vista можно не волноваться. В XP некоторые программы создают контекстные подменю с помощью каких-то хитрых манипуляций с динамическими библиотеками и кучей записей в реестр. Нашёл подобное в исходниках 7zip по пути ./CPP/7zip/UI/Explorer/. Quote Share this post Link to post Short link Share on other sites
kap_lun 4 #254731 Posted February 25, 2015 Подскажите, этот файл невозможно открыть(нужно удалить несколько строк) или я что то не так делаю. 1.rar Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #254733 Posted February 25, 2015 Подскажите, этот файл невозможно открыть(нужно удалить несколько строк) или я что то не так делаю. Файл обработан защитой от декомпиляции, "открыть" не удастся. Quote Share this post Link to post Short link Share on other sites
kap_lun 4 #254738 Posted February 25, 2015 Файл обработан защитой от декомпиляции, "открыть" не удастся. А как узнать что файл защищен? Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #254745 Posted February 25, 2015 А как узнать что файл защищен? Откройте его любым текстовым редактором например блокнотом. И смотрите что находиться в конце файла 1. Файл обработан защитой от mercger 2. Файл обработан защитой от lelicopter 3. файл обработан защитой от if_then_else 4. Файл обфусцирован в Орионе 5. Файл обработан протектором в Орионе Quote Share this post Link to post Short link Share on other sites
KACTET 317 #255079 Posted February 27, 2015 (edited) Внимание! Если вы компилируете скрипт с обфускацией, то не надо сжимать его в строку командой "Move script to ZipBase64-box",в противном случае байт-код вашего скрипта не будет обфусцирован и его легко извлечь!Скрипты с rf все покрыты маршалом и к ним относиться свыше предостережение?Можно мне объяснить - если я прокололся что обфусцированный мод с протектором перевёл в py маршалом и наложил ещё протектор и мод взломали а все скрипты покрыты тем же маршалом с сайта rf значит ли что они также щёлкаются и в чём отличие если нет? Edited February 27, 2015 by KACTET Quote Share this post Link to post Short link Share on other sites
lportii 14 #255142 Posted February 27, 2015 Если сделать из скрипта одну строку, то что там обфусцировать то? Quote Share this post Link to post Short link Share on other sites
DrWebber 5 #255147 Posted February 27, 2015 Можно мне объяснить - если я прокололся что обфусцированный мод с протектором перевёл в py маршалом и наложил ещё протектор и мод взломали а все скрипты покрыты тем же маршалом с сайта rf значит ли что они также щёлкаются и в чём отличие если нет? Там под маршалом байт-код с кучей джампов. Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #255249 Posted February 27, 2015 (edited) Внимание! Если вы компилируете скрипт с обфускацией, то не надо сжимать его в строку командой "Move script to ZipBase64-box",в противном случае байт-код вашего скрипта не будет обфусцирован и его легко извлечь! Скрипты с rf все покрыты маршалом и к ним относиться свыше предостережение? Можно мне объяснить - если я прокололся что обфусцированный мод с протектором перевёл в py маршалом и наложил ещё протектор и мод взломали а все скрипты покрыты тем же маршалом с сайта rf значит ли что они также щёлкаются и в чём отличие если нет? Привожу пример явного идиотизма: - берем скрипт 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 February 27, 2015 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
KACTET 317 #255441 Posted February 28, 2015 Привожу пример явного идиотизма: - берем скрипт text = 'Secret code' key=17453628 print 'Secret code %s' % int(key * 3 / 4)- сжимаем в строкуexec __import__('marshal').loads.....- компилируем с обфускацией в файл MegaMode.pyc - накладываем кучу всяких хитрых протекторов и защит - отдаем pyc-файл Васе Так это то понятно. Если скрипт обфусцирован и поставлен на него протектор а потом сжат маршалом то как Вася выдирает исходный код из него? Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #255445 Posted February 28, 2015 (edited) Если скрипт обфусцирован и поставлен на него протектор а потом сжат маршалом то как Вася выдирает исходный код из него? В этом случае ни как не выдирает. ЗЫ: Если он конечно реально обфусцирован как в Орионе или у Мерца, а не как у Леликоптера храниться в не защищенном виде да еще и в переменной. Edited February 28, 2015 by StranikS_Scan 1 Quote Share this post Link to post Short link Share on other sites
KACTET 317 #255455 Posted February 28, 2015 В этом случае ни как не выдирает. ЗЫ: Если он конечно реально обфусцирован как в Орионе или у Мерца, а не как у Леликоптера храниться в не защищенном виде да еще и в переменной. Ясно. Спс. Вот теперь ситуация прояснилась для меня... Ещё вопрос обязательно ли при обфускации ставить галку на Insert Unused Bytecode? Т.к. очень часто если скрипт обфусцирован сторонней программой он ломается! Сильно влияет ли это на качество самой обфускации Ориона? Quote Share this post Link to post Short link Share on other sites
伝説の 15 #255459 Posted February 28, 2015 Пытаюсь отследить 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.py: tankman.zip Quote Share this post Link to post Short link Share on other sites