Jump to content
Korean Random
IzeBerg

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

Recommended Posts

Сможете показать как такой скрипт разбирать?

Есть такой ZorroJan - он точно знает.

Share this post


Link to post

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)

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

Edited by fecell
  • Upvote 1
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites
with open('new.pyc', 'wb') as fc:
    fc.write('\x03\xf3\x0d\x0a\0\0\0\0')
    ....

 

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

 

fc.close()

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

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

 

fc.close()

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

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

Edited by glassman
  • Upvote 1
  • Downvote 1

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

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

 

fc.close()

 

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

 

Share this post


Link to post

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

Share this post


Link to post

Short link
Share on other sites

 

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

 

 

Я же даже процитировал)

Share this post


Link to post

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:

Share this post


Link to post

Short link
Share on other sites
вынуждаешь вводить обфускацию как у мерца.

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

Share this post


Link to post

Short link
Share on other sites

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

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

 

hello.zip

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Посмотрите, только по честному сможите разложить hello.pyc?

Edited by KACTET

Share this post


Link to post

Short link
Share on other sites

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

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

 

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

"Некратное" смещение (джамп в начале файла) идея неплохая, но больно "палевно" его поставили...

Share this post


Link to post

Short link
Share on other sites

Бинго!

 

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

 

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

 

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

Edited by sae

Share this post


Link to post

Short link
Share on other sites

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

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

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

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

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

 

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

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

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

 

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

Edited by fecell

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