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

 

 

Осталась только проблема мелкого шрифта на hidpi мониторах.

 

Которая  решается масштабированием интерфейса в винде.

Share this post


Link to post

Short link
Share on other sites

Которая решается масштабированием интерфейса в винде.

Которое ухудшает UI почти всех программ.

Share this post


Link to post

Short link
Share on other sites

Которое ухудшает UI почти всех программ.

 

Другого пути нет. Всякие древние программы используешь. Не используй.

 

Шрифт у интерфейса сейчас 9-ка как у всех программ.

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Откопал в тырнете ноябрьское чтиво "О том как чувачки протектор pjorion ломали и чем это закончилось" - тыц. Наслаждайтесь ))))))

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Откопал в тырнете ноябрьское чтиво "О том как чувачки протектор pjorion ломали и чем это закончилось" - тыц. Наслаждайтесь ))))))

честно пытался вникнуть в суть их беседы. Прям старательные парни попались)))

Последний пост 20 Nov 2015 .

 

В итоге чем у них все закончилось? 

 

Деревья логики красивые получились у них. Заморочились таки, рисовали.

Edited by MAHINATOR

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.3.2, без обфускации исходного кода.

 

Шаблон для тестирования:

def test():
    def f(a):
        q = ''
        if a == 6:
            return -1
        try:
            a += 1
            1/a
        except:
            for c in 'decompile me':
                q += c
            a += 200
        else:
            a += 30
        finally:
            a += 400
        if a != 0:
            return a
        else:
            return None
    q = f(0)
    q = f(-1)
    q = f(6)

import timeit
print 'timeit:',
print(timeit.timeit("test()", setup="from __main__ import test", number=100000))

Результаты:

 

исходный код:

timeit: 0.373438518288

ALT+F9 (bytecode - obfuscate - compile):

timeit: 0.567744915082

ALT+P (bytecode - protect - protect .pyc-file) БЕЗ "Lock attr review...":

timeit: 0.565783986549

upd:

Краткая резолюция:

Обфускация байткода снижает производительность скрипта на ~52%, что вполне приемлемо для задач не требующих сверхпроизводительности.

Протектор вообще никак не влияет на производительность.

При включении опции "Lock attr review.." публичные методы скрипта "закрываются", т.е. при включении данной опции зашифрованный скрипт нельзя будет использовать подобным образом __import__('srcipt').some_func() однако это обеспечивает более надежную защиту внутренних ресурсов скрипта (переменных, функций) от доступа к ним.

Вывод: защита байткода скрипта реализована достаточно хорошо.

Edited by fecell

Share this post


Link to post

Short link
Share on other sites

 

 

timeit: Error in module '__main__': cannot import name test

 

Убери галочку  "Lock attr review...". 


UPD: И после обфускации текста вызов "test()", setup="from __main__ import test" уже не прокатит ведь имя функции станет случайным.

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, contextlib довольно интересная библиотека, как я её раньше не замечал...

Печально, что фичами обзавелась только начиная с Python 3.x

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, contextlib довольно интересная библиотека, как я её раньше не замечал...

Печально, что фичами обзавелась только начиная с Python 3.x

 

Гыгы, да это же допил with инструкции, а я все удивлялся не уж-то её только ради работы с файлами сделали. А тут моно её по нормальному юзать как в других языках )))))

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, может обновишь pythonversion.py?

Уже Python 3.6 есть, а в этом файле еще для релиза 3.5 чисел нет.

 

3.5 там вписан.

Share this post


Link to post

Short link
Share on other sites

Я обновлял

'''
Python codes and versions
Updated 18.12.2015 by ...Python35-32\Lib\importlib\_bootstrap_external.py
'''

А релиз 3.5.1 был 6 декабря.

Share this post


Link to post

Short link
Share on other sites

StranikS_Scan

Не мог бы ты по подробнее описать функцию протектора EXE-Injector

Что это и как работает

 

p/s/

 

Хотел спросить ещё про правку функции обфускатора Structure (со скобками ты говорил проблема). Когда можно ожидать исправленный вариант?

Спасибо.

Share this post


Link to post

Short link
Share on other sites

StranikS_Scan

Не мог бы ты по подробнее описать функцию протектора EXE-Injector

Что это и как работает

 

В общих чертах написано тут

NAtq7t3.png

 

Единственное что там не указана, сейчас иногда инжектор остается в ...\TEMP\ и нубоантивирусы могут заглянув туда хрюкнуть, что мол нашли подозрительный пакованый файл. Но это я поправлю.

 

Хотел спросить ещё про правку функции обфускатора Structure (со скобками ты говорил проблема). Когда можно ожидать исправленный вариант? Спасибо.

 

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

 

Вместо

if BigWorld.player().arena.vehicles.get(id)['isAlive']:

 

Лучше

 

player = BigWorld.player()

arena = player.arena

id_vehicle = arena.vehicles.get(id)

if id_vehicle['isAlive']:

 

PS: Косяк с player() это конечно не рашает, его я поправлю, совет дается в общем

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Обновил пакет с декомпиляторами dcpack.zip

------------------------------

 

Cделал так, что декомпилятор теперь сравнивает имя файла (пути отсекаются, анализируются только имена с расширениями), куда он декомпилирует, с именем файла в co_filename и если разница только в регистре букв, то декомпилятор берет название из co_filename и переименовывает в него конечный файл. Это позволяет восстановить оригинальные имена скриптов.

 

Клиенту игры на это чихать, он не учитывает регистр, а вот для других программ это может иметь значение.

 

Скачать: dcpack.zip

 

UPD: Внес исправления от spoter

Edited by StranikS_Scan
  • Upvote 4

Share this post


Link to post

Short link
Share on other sites

Обновил пакет с декомпиляторами dcpack.zip

------------------------------

 

Cделал так, что декомпилятор теперь сравнивает имя файла (пути отсекаются, анализируются только имена с расширениями), куда он декомпилирует, с именем файла в co_filename и если разница только в регистре букв, то декомпилятор берет название из co_filename и переименовывает в него конечный файл. Это позволяет восстановить оригинальные имена скриптов.

 

Клиенту игры на это чихать, он не учитывает регистр, а вот для других программ это может иметь значение.

 

Скачать: attachicon.gifdcpack.zip

Всё клёво, только надо чуток поправить )

 

dcpack.zip

При переименовывании файла в итоге ты ошибку допустил, путь неверно собирал

было:

rename(output, path_output+filename2_output)

надо:

rename(output, path_output+'\\'+filename2_output)

 

мелочь конечно, но я был в недоумении почему не работало )

Edited by spoter
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

надо: rename(output, path_output+'\\'+filename2_output)

 

Для чего? Там же os.path.split он не урезает слэш

import os
print os.path.split('c:\\34.txt')
<<< ('c:\\', '34.txt')

UPD: Хотя нет урезает

import os
print os.path.split('c:/23/34.txt')
<<< ('c:/23', '34.txt')
Edited by StranikS_Scan

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