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

Я вообще для редактирования файлов использую старые добрые Notepad++

Да я что-то задумался, и написал кучу кода в Орионе, а оно не засейвилось.

Нахрена тогда вешать админский манифест?

Чтобы было.

Share this post


Link to post

Short link
Share on other sites

Чтобы было.

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

2. Просить права, которые тебе фактически не нужны, не есть хорошо с точки зрения безопасности.

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

Share this post


Link to post

Short link
Share on other sites

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

Но ничего не мешает перезапуститься Ориону с нужными правами.

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

Blender

Я хочу создать нормальный импорт в эту программу из ресурсов WoT.

post-16296-0-36508800-1447697031_thumb.png

post-16296-0-25551500-1447697260_thumb.png

Потом можно задуматься и над экспортом...

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

 

 

Но ничего не мешает перезапуститься Ориону с нужными правами.

 

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

Share this post


Link to post

Short link
Share on other sites

'офтоп'

вот блин засада.. и победить "малой кровью" как-то не получается :(

src =  '''
def testfunc():
    return type(testfunc)
'''
co = compile(src, '<testfunc>', 'exec')
for code in co.co_consts:
    if (type(code) == type(co)) and (code.co_name == 'testfunc'):
        break
print eval(code)

имеем ошибку:

Traceback (most recent call last):
  File "test.py", line 10, in <module>
    print eval(code)
  File "<testfunc>", line 3, in testfunc
NameError: global name 'testfunc' is not defined

т.е. функция которую вызываем не видит в контексте своей среды выполнения сама себя, выходит так..

но, млин, когда выводит ошибку, то точно указывает на неё - File "<testfunc>", line 3, in testfunc

дилемма)))

Share this post


Link to post

Short link
Share on other sites

т.е. функция которую вызываем не видит в контексте своей среды выполнения сама себя, выходит так..

Потому что не eval надо, а exec, НЯП. Ты же компилишь с 'exec'. eval - это вычисление выражения. Т.е.

print eval('2 + 2');
exec 'a = 2 + 2'; print a;
Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites

@fecell, а теперь отвечают знатоки )))

 

Твой код правильно писать вот так:

from new import function

src =  '''
def testfunc():
    return type(testfunc)
'''
co = compile(src, '<testfunc>', 'exec')
for code in co.co_consts:
    if (type(code) == type(co)) and (code.co_name == 'testfunc'):
        break
testfunc = function(code, globals())
print testfunc()

Почему? Потому что ответ кроется в дизассме функции testfunc:

<<< Object: function 'testfunc'
<<< ------------------------------------------------------------------
<<< ******************** code beginning (level 0) ********************
<<< discode[hexcode]:
<<< |   3           0 LOAD_GLOBAL          [74 00 00]     0 (type)
<<< |               3 LOAD_GLOBAL          [74 01 00]     1 (testfunc)
<<< |               6 CALL_FUNCTION        [83 01 00]     1
<<< |               9 RETURN_VALUE         [53 -- --]
<<< consts:
<<<    (0) None
<<< ********************** code ending (level 0) *********************

Легко увидеть что рекурсивный вызов testfunc возможен только если она есть в globals(). В случае же eval она туда ни как не попадает.

 

ЗЫ: Колись чего такое пилишь? ))))))

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

А бэкап-файл делать? Оно пригодится еще тогда, когда был краш ориона.

 

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

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

'офтоп'

 

from new import function

но это на деле (из new.py) from types import FunctionType as function
а это в свою очередь (из types.py)
def _f(): pass
FunctionType = type(_f)

а этот код как раз и пытаюсь реализовать иначе, чтобы FunctionType стала функцией, а не переменной и возвращала просто свой же тип.
Вообщем парадокс получается)) чтобы динамически создать функцию возвращающую тип FunctionType надо уже иметь функцию, а её то и нет изначально (при условии что импорты не используются, кроме sys.. но в sys всё builtin_function_or_method.. впрочем может получиться через такой тип создать, щас попробую).

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

 

upd: "впрочем может получиться через такой тип создать" -> TypeError: cannot create 'builtin_function_or_method' instances

Edited by fecell

Share this post


Link to post

Short link
Share on other sites

Подскажите пожалуйста. Почему новая версия компилятора ломает кодировку. То есть кириллица выводится некорректно, зёбриками? С версией 1.3.0 такой беды не было. Спасибо. 

Share this post


Link to post

Short link
Share on other sites

 

 

upd: "впрочем может получиться через такой тип создать" -> TypeError: cannot create 'builtin_function_or_method' instances

 

Нэээ, иначе я бы не спал спокойно ))))


Подскажите пожалуйста. Почему новая версия компилятора ломает кодировку. То есть кириллица выводится некорректно, зёбриками? С версией 1.3.0 такой беды не было. Спасибо. 

 

В UTF-8 потому что нужно сохранять, если у вас там кириллица есть. Версии вообще не причем.

Share this post


Link to post

Short link
Share on other sites

В UTF-8 потому что нужно сохранять, если у вас там кириллица есть. Версии вообще не причем.

Беру с нуля 1.3.0 компилирую, всё в норме. Беру тот же скрипт и с нуля 1.3.1 компилирую, отображение сломано. Я бы не писал если бы было так просто. Настройки ни какие не менял при этом.

Share this post


Link to post

Short link
Share on other sites

Беру с нуля 1.3.0 

 

Не бери старый - он с ошибками. Что нужно делать я тебе написал уже - если есть кириллица в тексте, то скрипт нужно сохранить в формате UTF-8. Если он в ANSI то будут кракозяблики.

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Это заразно...

 

Смахивает на косяк с кириллицей в DOS-консоли, который решался в делфе так:

  function StrAnsiToOem(const S: AnsiString): AnsiString;
  begin
  SetLength(Result, Length(S));
  AnsiToOemBuff(@S[1], @Result[1], Length(S));
  end;

Share this post


Link to post

Short link
Share on other sites

Смахивает на косяк с кириллицей в DOS-консоли

И этот косяк на Windows 10 так и не пофиксили))

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

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