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

Что касается обфускации строки, то берем цифры выше. Пусть время, тратящееся на вызов 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 by DrWebber

Share this post


Link to post

Short link
Share on other sites

У тебя какая-то странная математика.

Обфусцированный код выполняется в 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 by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Если цикл занимает 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), тем сильнее будут фризы.

Share this post


Link to post

Short link
Share on other sites

Без понятия, смотря сколько итераций в цикле.

 

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 by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

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.

 

Вот результаты:

cGCflnF.png

 

Думаю дальше о чем-то спорить нет смысла.

 

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 by DrWebber
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Ты серьезно вообще сейчас?

Ты меня пымал )))

 

По большим скриптам там лимита рекурсии может не хватать, тогда в Init Ориона можно вместо pass прописать:

 

import sys
sys.setrecursionlimit(10000)

Share this post


Link to post

Short link
Share on other sites

@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
качни со страницы теста новую версию, погляди как будет с производительностью.

 

Как-то так:

53lXKt0.png

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

Думаю дальше о чем-то спорить нет смысла.

Недопустимое падение производительности. Необходимо все вычисления обфускатора выносить в начало модуля... Или... Можно запилить конструктор codeObject на лету.

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

Играл сегодня в раритетный первый Crysis... Игра на топовой сложности учит не перестреливаться с противниками в лоб, а использовать маскировку для обхода, или даже просто отрубать ее на короткое время для точного выстрела и потом обратно стелс. Или вообще с ними не перестреливаться. Брони на топовой сложности нет, временами она спасает, но абсолютно не защищает. Вобщем-то, как и в танках. Самый лучший способ не получать пилюли - это просто не светиться.

К чему я все это... Не обязательно что-то очень прям хорошо защищать (защита не всегда помогает и довольно быстро сдувается против мощных инструментов и грамотных взломщиков), порой намного эффективней грамотно заныкать. Ибо для того, чтобы покопаться, надо сначала найти)) А еще, как говорит народная мудрость - хочешь спрятать - спрячь на самом видном месте. А найти в игре нужный модуль, когда различных объектов в игре больше нескольких миллионов (модуль - тоже объект, причем standalone мод - самостоятельный скрипт и на него по сути никто не ссылается, кроме загрузчика), не так то уж и просто, особенно, если не знаешь толком, что ищешь.

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

Откуда? Он ее не ищет как бы, у него есть locals, globals... Другое дело, если в globals дофига чего...

Share this post


Link to post

Short link
Share on other sites

Вы о чём тут вообще ?

За обнову проги спасибо !

post-19497-0-95590600-1441651616.gif

Edited by o-0-0-0

Share this post


Link to post

Short link
Share on other sites

@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]
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@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]

 

 

Пойдет.

 

Тест

nNFfgrU.png

 

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 by DrWebber
  • Upvote 1

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

Не понял вопроса.

Если я ставлю протектор на код игры (cameranode) то вылет
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

сли я ставлю протектор на код игры (cameranode) то вылет

Вероятно обфускация (если используешь) изменяет название публичных методов, переменных или классов в данном скрипте. После игра начинает вылетать, т.к. при обращении к ним, их, с оригинальными названиями, уже нет в камераноде. Попробуй без обфускации наложить протектор.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Just a Wot gamer here
Sometimes 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...

Share this post


Link to post

Short link
Share on other sites

Если я ставлю протектор на код игры (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 by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

No. Mod obfuscated by PjOrion and can not decrypt. Find the author of this mod and communicate with him.

 

Yeah...Thank you anyway.

Share this post


Link to post

Short link
Share on other sites

Во-первых, CameraNode - это файл клиента игры, а не юзверный мод, а значит в опциях протектора нельзя ставить галочку "Lock attr review...". Об этом написано в рамке в первом посте. И там же сказано почему. Зайди в первый пост посмотри. Ну а, во-вторых, что-либо обфуцировать в тексте (строки, имена переменных) в таких файлах на автомате наверно не стоит, так как не известно как поведет себя клиент.

Понял, спс

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