Jump to content
Korean Random

Как и чем декомпилировать/компилировать питон?


IzeBerg

Recommended Posts

Obfuscator = __import__
a = Obfuscator('marshal').loads('...'.decode('base64').decode('zlib'))
with open('new.pyc', 'wb') as fc:
    fc.write('\x03\xf3\x0d\x0a\0\0\0\0')
    Obfuscator('marshal').dump(a, fc)

дальше сам разбирайся, все-же защита для того и защита, чтобы защищать.

Edited by fecell
  • Upvote 1
  • Downvote 1
Link to comment
Short link
Share on other sites

а кто файл закрывать будет, Пушкин?

 

fc.close()

не вы непоняли я таксамо разкриптовывал но всё время одна и таже фигня а именно он несколько раз закриптовал 

подскажите как сразу весь код разкриптовать

Edited by glassman
  • Upvote 1
  • Downvote 1
Link to comment
Short link
Share on other sites

а кто файл закрывать будет, Пушкин?

 

fc.close()

 

В данном случае не надо ничего закрывать:

 

Link to comment
Short link
Share on other sites

В данном случае не надо ничего закрывать:

 

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

 

When you’re done with a file, call f.close() to close it and free up any system resources taken up by the open file. After calling f.close(), attempts to use the file object will automatically fail.

Увидел.

Edited by StranikS_Scan
Link to comment
Short link
Share on other sites

Obfuscator = __import__
a = Obfuscator('marshal').loads('...'.decode('base64').decode('zlib'))
with open('new.pyc', 'wb') as fc:
    fc.write('\x03\xf3\x0d\x0a\0\0\0\0')
    Obfuscator('marshal').dump(a, fc)
дальше сам разбирайся, все-же защита для того и защита, чтобы защищать.

 

Леликоптер ты просто вынуждаешь вводить обфускацию как у мерца.

Сделал человек из нашей команды копию... :glare:

Link to comment
Short link
Share on other sites

  • 2 weeks later...
вынуждаешь вводить обфускацию как у мерца.

zlib->base64, 8->7... ты про это? :)

это не помогает.

__application__ = '[ZJ] Marker Re-Load'
__autor__ = 'ZorroJan'
__version__ = '0.9.5'
__status__ = 'beta'
__build__ = '027'
__stamp__ = '05.01.2015'

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

Edited by fecell
Link to comment
Short link
Share on other sites

Чуточку модифицировал защиту, что выкладывал Юша.

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

 

hello.zip

  • Upvote 1
Link to comment
Short link
Share on other sites

Нашел весьма обширную статью по интроспекции и подмене кода в питоне - Patching Function Bytecode in Python

А я все не мог понять, как вы редактируете readonly code object...

 

Чуточку модифицировал защиту, что выкладывал Юша.

"Некратное" смещение (джамп в начале файла) идея неплохая, но больно "палевно" его поставили...
Link to comment
Short link
Share on other sites

Бинго!

 

"Некратное" смещение делал не я, моя модификация в другом.

 

Если MakcT40 разложил, то он знает.

 

Хотя я понимаю, что есть методы получения исходника и не раскручивая эту "кашу".

Edited by sae
Link to comment
Short link
Share on other sites

Хотя я понимаю, что есть методы получения исходника и не раскручивая эту "кашу".

"Некратные" смещения, "квантовую" запутанность, "фейковые" джампы и т.д. можно выпилить, если пройтись по всему дереву кода, как это сделал бы питон. Но алгоритм конечно будет... Учитывая что не одни условия в коде используются, есть еще различные loop-конструкции. По сути такое эквивалентно написанию половины питона. Но и защиту убивать будет почти наповал.
Link to comment
Short link
Share on other sites

 

 

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

 

Это понятно. Но обычно после проведения таких манипуляций получает чистый байткод, который благополучно декомпилится в исходник.

Здесь же вся соль именно в рефакторинге байткода. Как я понимаю данный термин - это когда байткод чистый от "фейков-джампов" и исправно выполняется, но декомпилировать не выходит. Я конечно не знаю как создавалась данная защита, но первое впечатление было, что некоторые участки кода составлялись именно байткодом. Причем когда его просматриваешь - видно, что это цикл и он правильно выполняется, но его структура нестандартная, декомпилятор такое никак не поймёт. Приходилось дописывать необходимые инструкции, немного менять существующие, чтобы подогнать под стандартную структуру для декомпилятора.

Link to comment
Short link
Share on other sites

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

Не знаю, не разгребал особо, глянул начало только, из-за смещения нужно особым способом дизассемблировать, а мне и так есть чем заняться.)
Link to comment
Short link
Share on other sites

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

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

 

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

это чтобы "занятые другим делом" потеряли желание дальше разбираться ;)

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

 

для flowchart обхода дерева байткода скрипта достаточно оказалось 704 строки на питоне написать.. где комментов и пустых строк-разделителей ~30%.

Edited by fecell
Link to comment
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...