Jump to content
Korean Random
StranikS_Scan

PjOrion - редактирование, компиляция, декомпиляция, обфускация модов (Версия: 1.3.5 Дата: 11.08.2019)

Пользуетесь ли вы Орионом?  

314 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

Если у вас остался шеллскрипт оттуда, а ещё лучше сам репозиторий, то восстановить не проблема.

Ничего не осталось.

Я начал писать свой скрипт, но есть пара проблем:

  1. bwxml очень много пишет в консоль... Слишком много... Решено добавлением опции в программу.

  2. uncompyle2 как-то странно декомпилирует: файл client/account_helpers/init.pyc он декомпилирует в client/account_helpers_init.py. Возможно, стоит поискать форк.

 

#!/usr/bin/env bash
if [[ $1 ]]; then #Первый аргумент может содержать директорию с файлами
	INPUTDIR=$1
	if [[ $2 ]]; then #А второй - выходную директорию
		OUTPUTDIR=$2
	else
		OUTPUTDIR="$INPUTDIR.output"
	fi
else 
	INPUTDIR="$PWD/scripts"
	OUTPUTDIR="$INPUTDIR.output"
fi
# Создаём выходную директорию, если её нет.
if [[ ! -d $OUTPUTDIR ]]; then
	mkdir $OUTPUTDIR
fi

# Декомпилируем Python
for i in $(find $INPUTDIR -name '*.pyc'); do
	if [[ ! -d $OUTPUTDIR$(dirname ${i#$INPUTDIR}) ]]; then
		mkdir $OUTPUTDIR$(dirname ${i#$INPUTDIR})
	fi	
	uncompyle2 --py -o $OUTPUTDIR$(dirname ${i#$INPUTDIR})$(basename $i '.pyc').py $i
done

# Расшифровываем xml	
for i in $(find $INPUTDIR -name '*.xml'); do
	bwxml --output $OUTPUTDIR$(dirname ${i#$INPUTDIR}) $i
done	

Edited by Azbuka_slovensko

Share this post


Link to post

Short link
Share on other sites

Уважаемый StranikS_Scan, не понял баг это или фича. Открыт .py-файл в орионе. Редактирую файл во внешнем редакторе, открываю орион - он сообщает что файл изменен и предлагает переоткрыть (спасибо кстати за эту фичу, которую я просил), после чего выполняю <compile script>  и орион ПОВТОРНО выдает сообщение что файл изменен и предлагает переоткрытие.

 

PjOrion Версия: 1.2.1

 

 

upd:

Странное дело, вышеописанное происходит когда редактирую файл с помощью notepad++ или akelpad, если же редактирую файл в PyCharm то Орион, как и положено, выдает только один запрос на переоткрытие, но при этом, после нескольких редактирований/компиляций файла, Орион вообще перестает реагировать на обновление исходного файла и не предлагает переоткрытие. Лечится перезапуском Ориона. Непонятно.

Edited by poget

Share this post


Link to post

Short link
Share on other sites

Всех с наступившим! Вышла новая версия Ориона 1.2.2

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

 

Выложил тестовую версию программы с новыми фичами для защиты скриптов:

  • Обфускатор байт-кода Bytecode - Obfuscate
  • Протектор pyc-файлов Bytecode - Protect
  • Простенький обфускатор имён переменных, процедур и классов в питон-скрипте Script - Obfuscate 

 

Как это работает и как этим пользоваться:

 

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

2. Компилим py-файл нашего мода через обфускатор Bytecode - Obfuscate - Compile and obfuscate py-file... и получаем на выходе обфусцированный pyc-файл. Технически ваш мод уже защищен и без долгих танцев с бубном и тяжелой артиллерии его ни как не декомпилировать

3. Однако для того чтобы его нельзя было так просто начать расковыривать накладываем сверху протектор. Для чего обрабатываем наш pyc-файл функцией Bytecode - Protect - Protect obfuscated pyc-file... В результате код исходного pyc-файла шифруется и прячется в протекторе, который его тем сам и защищает. Фактически протектор можно наложить на любой pyc-файл.

 

Кроме этого перед компиляцией можно сделать замену имен переменных в скрипте на всякие путанные буквы и абракадабру, для этого юзаем опцию Script - Obfuscate - Names...

 

Также в первом посте под спойлером  "Как защитить свой код" добавил подробную статья по основам защиты модов. Можно почитать.

 

Еще кое-какие фичи будут добавлены чуть позже.

 

Посты с замечаниями я выше все прочитал, в список себе записал, в следующей версии буду делать.

Edited by StranikS_Scan
  • Upvote 8

Share this post


Link to post

Short link
Share on other sites

Да наступит новая эра :)

Ага, новая эра с обфускацией, Странник спасибо ещё раз за отличнейшую программу! Edited by KACTET
  • Upvote 1
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Ага, новая эра с обфускацией, Странник спасибо ещё раз за отличнейшую программу!

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

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

По крайней мере лагающий на хуке файл и метод, на который этот хук поставлен, должен быть определяем по логам.

  • Upvote 1
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Оффтоп

Кто знает питон и в нём разбирается сможет сделать всё, что вы написали. На данный момент именно, что многие авторы не могут сделать свою достойную защиту в модах и гуляют кучи модов которые бьют ошибки.
Edited by KACTET
  • Upvote 1
  • Downvote 5

Share this post


Link to post

Short link
Share on other sites

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

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

По крайней мере лагающий на хуке файл и метод, на который этот хук поставлен, должен быть определяем по логам.

 

АполЭтично рассуждаЭшь, дорогой! ))))) Слово "должен" нужно как раз применять к юзверам, типа "юзвер должен...." А вот слово "уважение" следует в первую очередь применять к авторам модов, типа "нужно уважать авторов и не...". А у тебя судя по контексту поста всё наоборот )))

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Слово "должен" нужно как раз применять к юзверам, типа "юзвер должен...." А вот слово "уважение" следует в первую очередь применять к авторам модов, типа "нужно уважать авторов и не...". А у тебя судя по контексту поста всё наоборот )))

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

Traceback (most recent call last):
File "", line 372, in <lambda>
File "", line 349, in directionRepeat
BigWorld.EntityIsDestroyedException: Avatar 22510902 has been destroyed

#или

Traceback (most recent call last):
File "mHXJ", line 15, in __onResourcesLoaded
File "twbJk", line 3, in __setupModel
File "TMSxG", line 55, in __assembleModel
File "OCrJaW", line 24, in __setupEmblems
AttributeError: 'PlayerAvatar' object has no attribute 'stats'
Определи лагающий объект. Я про имя файла - его нет (или оно бессмысленное). Как будешь искать лагающий мод, если у тебя их много? Вот об этом я и говорю.

 

То что в модах лаги - это бывает, а вот когда защита мешает определить источник и причину помех - вот это уже хреново. А то ни моды нормально написать не могут, ни защиту делать по-нормальному. А пользователи потом страдают.

Share this post


Link to post

Short link
Share on other sites
То что в модах лаги - это бывает, а вот когда защита мешает определить источник и причину помех - вот это уже хреново. А то ни моды нормально написать не могут, ни защиту делать по-нормальному. А пользователи потом страдают.

 

Чего-то я тебя не понял. Ты говоришь что юзверы суют пальцы в розетки, их бьёт током, а виноваты во всем энергетики? Нееее, так не бывает.

 

"Вышел новый клиент? Ищи новые версии модов или ставь по одному старому моду и смори будут ли косяки" - вот золотое правило, которому должен следовать каждый юзвер, юзающий моды, а иначе его будет бить током и он будет страдать. А вместе с ним будут страдать... фигней... и те самаритянины, которые в порыве своего альтруизма бросятся разгребать чужие косяки.

 

Что касается разработки и обфускации мода - то ты как разработчик сам принимаешь решение, либо выкладывать как есть и кушать кактус, видя как его бесцеремонно ковыряют и переделывают всякие бюргеры ;) без твоего участия, либо ставить защиту и... перестать уже писать моды ногами ;)

 

ЗЫ: directionRepeat - привет от ProstoNoob-а ))))

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

...

 

Debug кода ни кто не отменял, если "шифруем" то и на отладочной информации не скупай.

Спасение программиста, дело рук самих программистов.

Share this post


Link to post

Short link
Share on other sites

Чего-то я тебя не понял. Ты говоришь что юзверы суют пальцы в розетки, их бьёт током, а виноваты во всем энергетики? Нееее, так не бывает.

В том то и смысл, что не понял. Если что-то где-то работает не так / конфликтует это можно поправить / решить конфликт, на основе отладочной информации, а вот когда она ***** настолько, что непонятно, откуда и где оно сыпется, как на примере, даже непонятно в сторону какого мода копать, вот это хреново.

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

Debug кода ни кто не отменял, если "шифруем" то и на отладочной информации не скупай.

А вот кто-то этим правилом пренебрегает, вот в чем проблема. А потом ищи причину лагов, вылетов, перегрузок по процессору и памяти, просадок фпс. С нешифрованными модами проще - они нормально декомпилируются и трассировка у них нормальная. Обфускатор имен уничтожает трассировку, косой пакер тоже, обфускатор байт-кода может сбивать номера строк в трейсе (последнее имеет значение только для автора). А зашифровать так, чтобы и дебаг был нормальным, и защита была нормальной - это скилл. Защита - это такая вещь, что ее нужно либо делать по-нормальному (с нормальным дебагом), либо не делать вообще. Иначе в итоге получается то, что я постил.
  • Upvote 1
  • Downvote 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 создавать с нормальным именем файла. Там всего три параметра - файл, строка, метод. Строкой и методом можно пренебречь. Но файл должен указываться (имя файла-мода), чтоб был виден источник ошибки.

Ты сам-то понял что написал? Сделать сейф и раздать всем желающим его чертежи и описание - это не скилл - это наивная глупость и явное не понимание сути вопроса.

Суть вопроса я как раз понимаю. В отладке пишется файл, метод и строка. Для пользователя важно по сути только имя файла (узнать в каком моде лаги). Остальное нужно автору для устранения ошибки, когда ему лог скинут. Из этих соображений можно грамотно изменять lnotab с учетом изменения кода, а глобальным именам давать названия, понятные только автору (как в СССР с секретными хим. соединениями) (грамотно подменять по списку соответствия varnames или просто изначально давать им не понятные посторонним названия).

 

Ибо самая мощная защита - это не крипто-алгоритм, а грамотный человек. Хотя индусы тоже криптовать умеют)

Share this post


Link to post

Short link
Share on other sites
А вот кто-то этим правилом пренебрегает, вот в чем проблема. А потом ищи причину лагов, вылетов, перегрузок по процессору и памяти, просадок фпс. С нешифрованными модами проще - они нормально декомпилируются и трассировка у них нормальная. Обфускатор имен уничтожает трассировку, косой пакер тоже, обфускатор байт-кода может сбивать номера строк в трейсе (последнее имеет значение только для автора). А зашифровать так, чтобы и дебаг был нормальным, и защита была нормальной - это скилл. Защита - это такая вещь, что ее нужно либо делать по-нормальному (с нормальным дебагом), либо не делать вообще. Иначе в итоге получается то, что я постил.

 

Try и Except, никто не отменял с дополнительными выходными параметрами на определенный вид ошибок (если сложно без них).

Достаточно вставить в 1 место и обработать под разные распространены ошибки, дальше уже твой код, если ты в нем не ориентируешься.

Edited by BossBox

Share this post


Link to post

Short link
Share on other sites

Try и Except, никто не отменял с дополнительными выходными параметрами на определенный вид ошибок (если сложно без них). Достаточно вставить в 1 место и обработать под разные распространены ошибки, дальше уже твой код, если ты в нем не ориентируешься.

Не совсем понял, к чему тут о try-except-finally. Про это мне кажется все знают). Речь идет о том, что некоторые защиты "портят" логи и идентифицировать лагающий мод невозможно.
  • Upvote 2
  • Downvote 2

Share this post


Link to post

Short link
Share on other sites

Тем более

 

Про лицензионное соглашение забыл. Сначала идет оно и то что в нем определено, а потом уже выдержка из статьи, которая и определяет все вопросы не оглашенные и не урегулированные в соглашении.

 

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

 

Вот ты опять пишешь о том с чем не сталкивался. Обфускацию нуно делать так чтоб вообще ни черта извлечь нельзя было ни каких читабельных имен и ни какой дебаг-инфы. Это и есть один из признаков качества сокрытия. А иначе её тогда вообще нет смысла делать. Только время впустую тратить. Если ты попытаешься что-то оставить в скрипте, то это сразу даст минус защите, она станет уязвимой. Ибо любая полезная инфа, оставленная обфускатором - это уязвимость.

 

Думаю нуно тебе копать не в сторону - "ребята делайте обфускаторы более уязвимыми", а в сторону - "надо бы доработать дебаггер чтоб и с защищенными скриптами можно было маломальски комфортно работать".

 

Из этих соображений можно грамотно изменять lnotab с учетом изменения кода

 

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

 

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

 

Ну опять же ты просишь ослабить защиту. Ну  это же противоречит самим принципам защиты - максимально все скрыть.

 

Ибо самая мощная защита - это не крипто-алгоритм, а грамотный человек. Хотя индусы тоже криптовать умеют)

 

Завязывай эти Гоголевские чтения )))) Может реально стоит нормальный дебаггер поискать или доработать. Нуно отследить кашу малу в логе. Кидаем его и запускаем. Дальше он отмониторит. Кстати видел статью вроде на хабре про снифер выполняющегося кода? Там какие-то преподы делали в познавательных целях. Выложили исходники. Нашёл.

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Про лицензионное соглашение забыл. Сначала идет оно и то что в нем определено, а потом уже выдержка из статьи, которая и определяет все вопросы не оглашенные и не урегулированные в соглашении.

Сначала идет закон. По крайней мере в РФ. И никакое соглашение не может ему противоречить. А это статья из ГК.

 

Думаю нуно тебе копать не в сторону - "ребята делайте обфускаторы более уязвимыми", а в сторону - "надо бы доработать дебаггер чтоб и с защищенными скриптами можно было маломальски комфортно работать".

Ага. Обучать дебаггер качественно форматировать рандомный текст в имени файла.) Дебаггер и так качественно сделан.

 

Ну опять же ты просишь ослабить защиту. Ну  это же противоречит самим принципам защиты - максимально все скрыть.

Я говорю не о том, чтобы оставить глобальные имена незашифрованными, а шифровать их по-особому, то есть обратимо для автора. Список или старый советский метод) Чтобы можно было нормально парсить логи.

 

Завязывай эти Гоголевские чтения ))))

Я тут Гоголя не цитировал)

Кстати видел статью вроде на хабре про снифер выполняющегося кода? Там какие-то преподы делали в познавательных целях. Выложили исходники. Нашёл.

Хук на __import__ и возвращать враппер на объект. В обертке перехватывать всю внешку. Так половину модов можно и не ломать защиту - по внешней активности все понятно будет)

Share this post


Link to post

Short link
Share on other sites

Сначала идет закон.

Вот и найди в законе статью о лиц. соглашениях.

 

Ага. Обучать дебаггер качественно форматировать рандомный текст в имени файла.) Дебаггер и так качественно сделан.

 

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

 

то есть обратимо для автора.

 

Ключевое слово подчеркнул.

 

Хук на __import__

 

Жалко не прокатит. Протекторы присекают такие вещи.

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