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

Возможно я где-то накосячил, но

assert True is True, 'Error!!!'
Компилится питоном 2.7.10 в

raise True is True or AssertionError('Error!!!')
Это выдается при декомпиляции. Что и объясняет ошибку.

TypeError: exceptions must be old-style classes or derived from BaseException, not bool
От такого кода крашится даже сам 2.7.10, сгенерировавший код... Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites
Это выдается при декомпиляции. Что и объясняет ошибку.

 

Код питона - правильный, так как ты сам его проверил

Байткод - тоже правильный, так как компилятор не может ошибиться с интепретацией питон-скрипта

 

А вот декомпилятор - может выдать что угодно Гы ))))) Он же не абсолютный ревёрсер.

Uncompyle2

raise True is True or AssertionError('Error!!!')

Decompyle++

if not True is True:
    raise AssertionError('Error!!!')

Fupy

if True is True:
    return
else:
    raise AssertionError('Error!!!')
Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Код питона - правильный, так как ты сам его проверил Байткод - тоже правильный, так как компилятор не может ошибиться с интепретацией питон-скрипта   А вот декомпилятор - может выдать что угодно Гы ))))) Он же не абсолютный ревёрсер.

Блин я тоже нихрена не могу понять... Только что пересобрал этот скрипт - все норм. В клиенте тоже. На основе 9.9.

А собранный мною мод (автоскриптом) на тесте 9.10 у товарища выбрасывает

TypeError: exceptions must be old-style classes or derived from BaseException, not bool
В чем прикол - хз.

Единственное, что приходит в голову - что мод прогоняли через этот самый uncompile ориона и обратно, вопрос только зачем...

Ладно, там по сути уже поправили косяк, но

 

@StranikS_Scan, декомпилятор uncompile кастомный (всмысле правленный)?

Share this post


Link to post

Short link
Share on other sites
StranikS_Scan, декомпилятор uncompile кастомный (всмысле правленный)?

 

Эээ, он правленый с момент своего создания, правился, правится и будет правиться. В связи с чем я не понял что ты имел ввиду?

 

Единственное, что приходит в голову - что мод прогоняли через этот самый uncompile ориона и обратно, вопрос только зачем...

 

Будешь делать впопен-сурс моды еще и ни такое увидишь ))))))

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Возможно я где-то накосячил, но

assert True is True, 'Error!!!'
Компилится питоном 2.7.10 в

raise True is True or AssertionError('Error!!!')

 

У меня декомпилируется в оригинал.

Share this post


Link to post

Short link
Share on other sites

Возможно я где-то накосячил, но

assert True is True, 'Error!!!'
Компилится питоном 2.7.10 в

а по хорошему это компилится в pass

  1           0 LOAD_CONST               0 (None)
              3 RETURN_VALUE       

если использовать опции оптимизации при вызове компилятора.

 

cp27.cmd

@echo off
set PYTHON=C:\Python27
set PYTHONHOME=%PYTHON%
set PATH=%PATH%;%PYTHON%
set LIB=%LIB%;%PYTHON%\Lib
echo %1c
if exist %1c del %1c
%PYTHON%\python.exe -OO -c "import py_compile;py_compile.compile('%1')"
ren %1o %1c
Edited by fecell

Share this post


Link to post

Short link
Share on other sites

Здравствуйте! Не удаеться компилировать файл, получаю следующее:
Error decompiling file 'D:\World_of_Tanks\res_mods\0.9.9\scripts\client\mods\modpack.pyc' (Error: array indices must be integers)
Что означает эта ошибка.

И что означает содержимое другого файла после преобразования:
# Embedded file name: __init__.py
pass

Спасибо за помощь!

 

Share this post


Link to post

Short link
Share on other sites

 

 

Здравствуйте! Не удаеться компилировать файл, получаю следующее:
Error decompiling file 'D:\World_of_Tanks\res_mods\0.9.9\scripts\client\mods\modpack.pyc' (Error: array indices must be integers)
Что означает эта ошибка.
Декомпилировать*
Это значит, что скрипт защищён и просто так вы его не разберёте.
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
Не удаеться компилировать файл

 

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

А вы судя по надписям - Декомпилируете, т.е. проводите обратную операцию.

 

Error decompiling file 'D:\World_of_Tanks\res_mods\0.9.9\scripts\client\mods\modpack.pyc' (Error: array indices must be integers)

Что означает эта ошибка.

 

Не удается потому что байт-код обфусцирован, т.е. защищен от декомпиляции.

 

И что означает содержимое другого файла после преобразования:

# Embedded file name: __init__.py

pass

 

pass - означает ничего, т.е. в файле нет ни какого исполняемого кода.

 

ЗЫ: Почитайте какой-нибудь букварь по питону для чайников, там обычно азы все расписаны

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

pass

pass - означает ничего, т.е. в файле нет ни какого исполняемого кода.

Вот официальная документация.

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

Документации вагон, гуглится без проблем, а вопросы почему-то задают. Не понимаю, зачем декомпилировать код, если в питоне для автора вопроса ничего не понятно. Тем более без знания хотя бы одного языка программирования на "хорошо", иначе вопроса бы не возникло)))

Файл __init__.py по сути является главным файлом пакета, именно его наличие определяет папку со скриптами как пакет (package). Зачастую кода в нем не бывает.

На русском качественной и подробной документации мне пока не попадалось.

ЗЫ: Почитайте какой-нибудь букварь по питону для чайников, там обычно азы все расписаны

Да, начинать разбираться в питоне лучше с букваря, а не с "Войны и мира". Тем более, что 80-90% модов сами по себе качеством и понятностью кода не отличаются. Даже у "бывалых" иногда возникает вопрос "под чем это писали" и "как оно работает".
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Даже у "бывалых" иногда возникает вопрос "под чем это писали" и "как оно работает".

У всех и всегда такое. Я не видел еще ни одного человека, который лез бы в свой код через 1-2 недели и не матерился на тему "Что я, ***, тут делал?"

Edited by IzeBerg

Share this post


Link to post

Short link
Share on other sites

У всех и всегда такое. Я не видел еще ни одного человека, который лез бы в свой код через 1-2 недели и не матерился на тему "Что я, ***, тут делал?"

 

Комментарии писать и единый стиль юзать, не?

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Комментарии писать и единый стиль юзать, не?

"Для слабаков!11"

Даже если все комментариями обмазывать - всегда останется "тёмный уголок" без комментария.

Share this post


Link to post

Short link
Share on other sites

"Для слабаков!11"

Даже если все комментариями обмазывать - всегда останется "тёмный уголок" без комментария.

 

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

У всех и всегда такое. Я не видел еще ни одного человека, который лез бы в свой код через 1-2 недели и не матерился на тему "Что я, ***, тут делал?"

Комментарии писать и единый стиль юзать, не?

Комментарии и единообразие стиля написания кода вещи, конечно, очень важные, но гораздо важнее просто грамотно писать код, т.е. не писать все одним блоком, а использовать функции, классы, наследование и т.д. там, где оно реально нужно. И имена переменным давать нормальные и понятные. Тем более что в питоне, например, длина имени переменной на производительность никак не влияет, только на размер байт-кода, в нем имя переменной присутствует только один раз, и нужно только для отладки. Когда читая строку / блок кода даже вне контекста, ты понимаешь, что это и для чего оно нужно, подобных проблем не возникает. Гораздо проще и дешевле будет сразу грамотно написать, зато потом будет меньше проблем с фиксами и интеграцией новых фич. В идеале фича должна интегрироваться в 1 строчку (не считая кода самой фичи). Как и фикс в большинстве случаев (речь идет об багах, а не об оптимизации под творения картошки).

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

Согласен на 100%. Хотя зачастую самым лучшим комментарием будут правильно названные переменные.

Но с опытом всё приходит, как правило.

Порой открываешь какой-нибудь старый проект и думаешь, почему он так хреново написан...

Share this post


Link to post

Short link
Share on other sites
Согласен на 100%. Хотя зачастую самым лучшим комментарием будут правильно названные переменные.

 

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

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites

Порой открываешь какой-нибудь старый проект и думаешь, почему он так хреново написан...

 

Потому что свой? Это вообще отдельная тема. Можно на экспорт (в командной работе, на продажу, имиджевый опенсорс, и т.д.) писать годный код, с которым без проблем будут работать другие люди. А для себя "и так сойдет", т.е. фактически идет основной упор на чтобы работало, а не чтобы понятно было кому-то ещё.

Edited by Polar Fox

Share this post


Link to post

Short link
Share on other sites

Потому что свой? Это вообще отдельная тема. Можно на экспорт (в командной работе, на продажу, имиджевый опенсорс, и т.д.) писать годный код, с которым без проблем будут работать другие люди. А для себя "и так сойдет", т.е. фактически идет основной упор на чтобы работало, а не чтобы понятно было.

 

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

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

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

 

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

 

а не чтобы понятно было кому-то ещё.
Edited by Polar Fox

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