DrWebber 5 #290836 Posted September 6, 2015 (edited) Что касается обфускации строки, то берем цифры выше. Пусть время, тратящееся на вызов aaa в тесте - это запас в худшую сторону, т.е. приплюсуем его ко времени вычисления строки, тогда на 1 строку весьма не слабой длины в 80 символов (4 символа тоже в запас), будет траться примерно 15/10^6 сек - если она обфусцирована, и в 100 раз меньше, если - не обфусцирована. Пусть в нашем моде таких строк 1000, т.е. у нас большой хороший мод-сборка, и эта 1000 строк крутиться в цикле незаметно для юзвера. Подсчитаем доп. задержку - 1000*15/10^6 = 15/10^3 = 15 мс. Выходит +15 мс к каждой итерации цикла. То есть если цикл занимает 100 мс, то получим 115 мс с обфускацией строк в данном примере. Для 99% модов цифры будут в десятки раз меньше. Таким образом, для wot-модов это копейки )))) У тебя какая-то странная математика. Обфусцированный код выполняется в 75! раз медленнее обычного(15/0.2), следовательно, если один цикл будет занимать 100мс, то тот же самый цикл с обфускацией будет длиться 100мс*75=7,5c. Edited September 6, 2015 by DrWebber Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #290841 Posted September 6, 2015 (edited) У тебя какая-то странная математика. Обфусцированный код выполняется в 75! раз медленнее обычного(15/0.2), следовательно, если один цикл будет занимать 100мс, то тот же самый цикл с обфускацией будет длиться 100мс*75=7,5c. Ни чего странного тут нет. Если цикл занимает 100мс и в нем нет обфускации строк, то он будет длиться 100мс. Если в нем есть одна обфусцированная строка длиной в 80 символов, то сколько составит время цикла? При всех допущениях, сделанных мной в посте выше, она составит 100 мс + (15/10^6 - 0.2/10^6) = 100 + 14.8/10^6. А если таких строк там 1000 окажется? Ну тогда 100 + 14.8/10^3 или 100 мс + 14.8 мс. ЗЫ: В 75 раз медлее выполняется не обф. мод, а лишь вызовы 80-символьных строк и то цифра 75 завышена, так как туда входит и вызов процедуры aaa ))) ЗЫЗЫ: Что касается цифры 100мс, то суть в сравнительной оценке с колбэками в wot - если у тебя цикл без обф. рубит каждый 10 мс, то с обф. как выше +15мс, ты получишь x2,5 прирост времени, а если у тебя цикл рубит каждые 100мс, то прирост составит всего 15% времени. Edited September 6, 2015 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
DrWebber 5 #290848 Posted September 6, 2015 Если цикл занимает 100мс и в нем нет обфускации строк, то он будет длиться 100мс.Согласен. Если в нем есть одна обфусцированная строка длиной в 80 символов, то сколько составит время цикла?Без понятия, смотря сколько итераций в цикле. При всех допущениях, сделанных мной в посте выше, она составит 100 мс + (15/10^6 - 0.2/10^6) = 100 + 14.8/10^6.Она составит 100мс + (14.8/10^6)*N, где N - количество итераций в цикле А если таких строк там 1000 окажется?100мс + (14.8/10^6)*N*1000 ЗЫ: В 75 раз медлее выполняется не обф. мод, а лишь вызовы 80-символьных строк и то цифра 75 завышена, так как туда входит и вызов процедуры aaa )))Ничего подобного, процедура aaa вызывается в обоих случаях и время затраченное на это учитывается тоже в обоих случаях. Да что там говорить, взял сейчас свой мод, обфусцировал. Там в цикле перебирается list из 2600 элементов. Ну и естественно ожидаемые фризы, когда до него доходит дело. Короче, все очевидно же, чем больше конструкций вида x.y при совместной обфускации(structure, затем strings), тем сильнее будут фризы. Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #290857 Posted September 7, 2015 (edited) Без понятия, смотря сколько итераций в цикле. 1 итерация, мы говорим об одной итерации цикла. Ничего подобного, процедура aaa вызывается в обоих случаях и время затраченное на это учитывается тоже в обоих случаях. Было бы так если бы ты посчитал (15-0.2)/0.2 = 74, а не 15/0.2 = 75 как выше )))) Там в цикле перебирается list из 2600 элементов. Я же говорил выше - ты опасный человек - делаешь циклы, в которых перебираешь многотысячные списки из строк и надеешься что не будет фризов )))) ЗЫ: Короче надо мне в массив строки гнать и от туда подставлять, как в том примере, который года два назад в теме про декомпиляцию приводили, иначе конечно куча лишних вызовов будет. @DrWebber, cделал вынос код в начало модуля: __PJO_737891=chr((211^178))+(chr((189^223))+chr((29^126))) __PJO_379697=chr((170^155))+(chr((240^194))+chr((30^45))) print __PJO_379697,__PJO_737891 качни со страницы теста новую версию, погляди как будет с производительностью. Edited September 7, 2015 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
DrWebber 5 #290897 Posted September 7, 2015 (edited) 1 итерация, мы говорим об одной итерации цикла.Я про Фому, ты про Ерему. Какой смысл вообще вести разговор о циклах и учитывать только одну итерацию? Было бы так если бы ты посчитал (15-0.2)/0.2 = 74, а не 15/0.2 = 75 как выше ))))Это конечно все очень сильно меняло бы, если это было бы так. Давай решим простую задачку для 5ого класса. Вася пробежал 100 метровку за 10с, а Маша за 30с. Во сколько раз медленнее Васи бегает 100м Маша? Собственно я об этом и говорил: "Обфусцированный код выполняется в 75! раз медленнее обычного(15/0.2)" (с) Я же говорил выше - ты опасный человек - делаешь циклы, в которых перебираешь многотысячные списки из строк и надеешься что не будет фризов )))) Ты серьезно вообще сейчас? 1) У меня до твоей обфускации не было ни одной строки в том цикле. Про что я тебе и пытаюсь сказать. o.attribute => getattr(o, 'attribute') <- вот появилась строка getattr(o, ''.join(map(chr,((181^212),(160^212),(160^212),(166^212),(189^212),(182^212),(161^212),(160^212),(177^212))))) <- а вот она уже жрет процессорное время 2) Ты действительно считаешь, что простой перебор 2600 строк это долго? Строки, с точки зрения питона, ничем не отличаются от других объктов. Это самый обыкновенный char* + PyObject_HEAD. PyObject_HEAD - стандартный заголовок, в котором содержится счетчик ссылок и информация о типе. Блин, вот не поленился и специально провел замеры. Взял один и тот же реплей и сделал 3 испытания: 1) Запустил вообще без модов. 2) Запустил с модом без обфускации, в котором каждые 200мс вызывается тот самый перебор 2600 элементов. 3) Запустил обфусцированный мод из пункта 2. Вот результаты: Думаю дальше о чем-то спорить нет смысла. UPD: @DrWebber, cделал вынос код в начало модуля: __PJO_737891=chr((211^178))+(chr((189^223))+chr((29^126))) __PJO_379697=chr((170^155))+(chr((240^194))+chr((30^45))) print __PJO_379697,__PJO_737891 качни со страницы теста новую версию, погляди как будет с производительностью. А вот это уже норм должно быть. Edited September 7, 2015 by DrWebber 1 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #290901 Posted September 7, 2015 Ты серьезно вообще сейчас? Ты меня пымал ))) По большим скриптам там лимита рекурсии может не хватать, тогда в Init Ориона можно вместо pass прописать: import sys sys.setrecursionlimit(10000) Quote Share this post Link to post Short link Share on other sites
DrWebber 5 #290905 Posted September 7, 2015 @DrWebber, cделал вынос код в начало модуля: __PJO_737891=chr((211^178))+(chr((189^223))+chr((29^126))) __PJO_379697=chr((170^155))+(chr((240^194))+chr((30^45))) print __PJO_379697,__PJO_737891 качни со страницы теста новую версию, погляди как будет с производительностью. Как-то так: 1 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #290950 Posted September 7, 2015 Интересно почему просадка осталась, подозреваю - причина в задержке на поиск глобальный переменной? Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #291002 Posted September 7, 2015 Думаю дальше о чем-то спорить нет смысла.Недопустимое падение производительности. Необходимо все вычисления обфускатора выносить в начало модуля... Или... Можно запилить конструктор codeObject на лету. Но чтобы в процессе выполнения кода никаких таких вещей не было. А то если так несколько мододелов заюзают, половина юзеров играть не сможет. Играл сегодня в раритетный первый Crysis... Игра на топовой сложности учит не перестреливаться с противниками в лоб, а использовать маскировку для обхода, или даже просто отрубать ее на короткое время для точного выстрела и потом обратно стелс. Или вообще с ними не перестреливаться. Брони на топовой сложности нет, временами она спасает, но абсолютно не защищает. Вобщем-то, как и в танках. Самый лучший способ не получать пилюли - это просто не светиться. К чему я все это... Не обязательно что-то очень прям хорошо защищать (защита не всегда помогает и довольно быстро сдувается против мощных инструментов и грамотных взломщиков), порой намного эффективней грамотно заныкать. Ибо для того, чтобы покопаться, надо сначала найти)) А еще, как говорит народная мудрость - хочешь спрятать - спрячь на самом видном месте. А найти в игре нужный модуль, когда различных объектов в игре больше нескольких миллионов (модуль - тоже объект, причем standalone мод - самостоятельный скрипт и на него по сути никто не ссылается, кроме загрузчика), не так то уж и просто, особенно, если не знаешь толком, что ищешь. Интересно почему просадка осталась, подозреваю - причина в задержке на поиск глобальный переменной?Откуда? Он ее не ищет как бы, у него есть locals, globals... Другое дело, если в globals дофига чего... Quote Share this post Link to post Short link Share on other sites
o-0-0-0 77 #291122 Posted September 7, 2015 (edited) Вы о чём тут вообще ? За обнову проги спасибо ! Edited September 7, 2015 by o-0-0-0 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #291319 Posted September 8, 2015 @DrWebber, давай еще вот этот вариант затестим со словарем. Перекачай архив. __PJO_a4719d={933295:chr((56^9))+(chr((244^198))+chr((215^228))), 908963:''.join(map(chr,((66^115),(65^115),(64^115),(71^115),(70^115),(69^115),(68^115),(75^115),(74^115),(67^115))))} print __PJO_a4719d[1040311^123416] print __PJO_a4719d[367139^541824] 1 Quote Share this post Link to post Short link Share on other sites
DrWebber 5 #291501 Posted September 9, 2015 (edited) @DrWebber, давай еще вот этот вариант затестим со словарем. Перекачай архив. __PJO_a4719d={933295:chr((56^9))+(chr((244^198))+chr((215^228))), 908963:''.join(map(chr,((66^115),(65^115),(64^115),(71^115),(70^115),(69^115),(68^115),(75^115),(74^115),(67^115))))} print __PJO_a4719d[1040311^123416] print __PJO_a4719d[367139^541824] Пойдет. Тест PS Не используй в качестве префикса двойное нижнее подчеркивание - это приводит к проблемам внутри классов. PPS Вот такая штука приводит к неправильной работе обфускатора: def trace(exc=None): print "/------------------------ Traceback --------------------------------\\" if exc is not None: log("[ERROR] " + str(exc)) traceback.print_exc() else: traceback.print_stack() print "\\------------------------------------------------------------------/" Edited September 9, 2015 by DrWebber 1 Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #291502 Posted September 9, 2015 Как поставить протектор на скрипт игры так что бы игра не вылетала? Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #291539 Posted September 10, 2015 Как поставить протектор на скрипт игры так что бы игра не вылетала? Не понял вопроса. Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #291543 Posted September 10, 2015 Не понял вопроса.Если я ставлю протектор на код игры (cameranode) то вылет 1 Quote Share this post Link to post Short link Share on other sites
fecell 125 #291544 Posted September 10, 2015 сли я ставлю протектор на код игры (cameranode) то вылет Вероятно обфускация (если используешь) изменяет название публичных методов, переменных или классов в данном скрипте. После игра начинает вылетать, т.к. при обращении к ним, их, с оригинальными названиями, уже нет в камераноде. Попробуй без обфускации наложить протектор. 1 Quote Share this post Link to post Short link Share on other sites
myk92lee 0 #291546 Posted September 10, 2015 Just a Wot gamer hereSometimes I'd like to do some fixing on the mods of WOT and sometimes PjOrion doesn't work very well with wot third-party addons...can someone pls show me how to decrypt properly? http://rghost.net/845VMTfpM say.. this one? Many thanks. And sry for the English... Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #291547 Posted September 10, 2015 (edited) Если я ставлю протектор на код игры (cameranode) то вылет Во-первых, CameraNode - это файл клиента игры, а не юзверный мод, а значит в опциях протектора нельзя ставить галочку "Lock attr review...". Об этом написано в рамке в первом посте. И там же сказано почему. Зайди в первый пост посмотри. Ну а, во-вторых, что-либо обфуцировать в тексте (строки, имена переменных) в таких файлах на автомате наверно не стоит, так как не известно как поведет себя клиент. show me how to decrypt properly? No. Mod obfuscated by PjOrion and can not decrypt. Find the author of this mod and communicate with him. Edited September 10, 2015 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
myk92lee 0 #291549 Posted September 10, 2015 No. Mod obfuscated by PjOrion and can not decrypt. Find the author of this mod and communicate with him. Yeah...Thank you anyway. Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #291550 Posted September 10, 2015 Во-первых, CameraNode - это файл клиента игры, а не юзверный мод, а значит в опциях протектора нельзя ставить галочку "Lock attr review...". Об этом написано в рамке в первом посте. И там же сказано почему. Зайди в первый пост посмотри. Ну а, во-вторых, что-либо обфуцировать в тексте (строки, имена переменных) в таких файлах на автомате наверно не стоит, так как не известно как поведет себя клиент. Понял, спс Quote Share this post Link to post Short link Share on other sites