MakcT40 Posted December 27, 2014 Share Posted December 27, 2014 Сможете показать как такой скрипт разбирать?Есть такой ZorroJan - он точно знает. @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted December 28, 2014 Share Posted December 28, 2014 (edited) 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 December 28, 2014 by fecell 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted December 28, 2014 Share Posted December 28, 2014 with open('new.pyc', 'wb') as fc: fc.write('\x03\xf3\x0d\x0a\0\0\0\0') .... а кто файл закрывать будет, Пушкин? fc.close() 1 @ Quote Link to comment Short link Share on other sites More sharing options...
glassman Posted December 28, 2014 Share Posted December 28, 2014 (edited) а кто файл закрывать будет, Пушкин? fc.close() не вы непоняли я таксамо разкриптовывал но всё время одна и таже фигня а именно он несколько раз закриптовал подскажите как сразу весь код разкриптовать Edited December 28, 2014 by glassman 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted December 28, 2014 Share Posted December 28, 2014 не вы непоняли ... подскажите как сразу весь код разкриптовать не это вы не поняли: дальше сам разбирайся, все-же защита для того и защита, чтобы защищать. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
DrWebber Posted December 28, 2014 Share Posted December 28, 2014 а кто файл закрывать будет, Пушкин? fc.close() В данном случае не надо ничего закрывать: It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way. @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted December 28, 2014 Share Posted December 28, 2014 (edited) В данном случае не надо ничего закрывать: И где там написано, что после инициализации 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 December 28, 2014 by StranikS_Scan @ Quote Link to comment Short link Share on other sites More sharing options...
DrWebber Posted December 28, 2014 Share Posted December 28, 2014 И где там написано, что после инициализации open на запись не нужно закрывать файл? Я же даже процитировал) @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted December 28, 2014 Share Posted December 28, 2014 Я же даже процитировал) Увидел, увидел, см. выше. @ Quote Link to comment Short link Share on other sites More sharing options...
KACTET Posted December 28, 2014 Share Posted December 28, 2014 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)дальше сам разбирайся, все-же защита для того и защита, чтобы защищать. Леликоптер ты просто вынуждаешь вводить обфускацию как у мерца. Сделал человек из нашей команды копию... @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted January 8, 2015 Share Posted January 8, 2015 (edited) вынуждаешь вводить обфускацию как у мерца. zlib->base64, 8->7... ты про это? :) это не помогает. __application__ = '[ZJ] Marker Re-Load' __autor__ = 'ZorroJan' __version__ = '0.9.5' __status__ = 'beta' __build__ = '027' __stamp__ = '05.01.2015' зы: как?! - никак!.. учите байткод питона... иначе лоадер криптора мерца будет сильно скомпрометирован при публичном объяснении что к чему. Edited January 8, 2015 by fecell @ Quote Link to comment Short link Share on other sites More sharing options...
sae Posted January 8, 2015 Share Posted January 8, 2015 Чуточку модифицировал защиту, что выкладывал Юша. По-моему так лучше. Теперь можно увидеть всю красоту рефакторинга байткода этой защиты. :) hello.zip 1 @ Quote Link to comment Short link Share on other sites More sharing options...
KACTET Posted January 8, 2015 Share Posted January 8, 2015 (edited) Посмотрите, только по честному сможите разложить hello.pyc? Edited January 8, 2015 by KACTET @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted January 8, 2015 Share Posted January 8, 2015 Нашел весьма обширную статью по интроспекции и подмене кода в питоне - Patching Function Bytecode in PythonА я все не мог понять, как вы редактируете readonly code object... Чуточку модифицировал защиту, что выкладывал Юша."Некратное" смещение (джамп в начале файла) идея неплохая, но больно "палевно" его поставили... @ Quote Link to comment Short link Share on other sites More sharing options...
MakcT40 Posted January 8, 2015 Share Posted January 8, 2015 dd = 'hello' ss = ' world' print dd + ss @ Quote Link to comment Short link Share on other sites More sharing options...
sae Posted January 8, 2015 Share Posted January 8, 2015 (edited) Бинго! "Некратное" смещение делал не я, моя модификация в другом. Если MakcT40 разложил, то он знает. Хотя я понимаю, что есть методы получения исходника и не раскручивая эту "кашу". Edited January 8, 2015 by sae @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted January 8, 2015 Share Posted January 8, 2015 Хотя я понимаю, что есть методы получения исходника и не раскручивая эту "кашу"."Некратные" смещения, "квантовую" запутанность, "фейковые" джампы и т.д. можно выпилить, если пройтись по всему дереву кода, как это сделал бы питон. Но алгоритм конечно будет... Учитывая что не одни условия в коде используются, есть еще различные loop-конструкции. По сути такое эквивалентно написанию половины питона. Но и защиту убивать будет почти наповал. @ Quote Link to comment Short link Share on other sites More sharing options...
sae Posted January 8, 2015 Share Posted January 8, 2015 "Некратные" смещения, "квантовую" запутанность, "фейковые" джампы и т.д. можно выпилить, если пройтись по всему дереву кода, как это сделал бы питон. Это понятно. Но обычно после проведения таких манипуляций получает чистый байткод, который благополучно декомпилится в исходник. Здесь же вся соль именно в рефакторинге байткода. Как я понимаю данный термин - это когда байткод чистый от "фейков-джампов" и исправно выполняется, но декомпилировать не выходит. Я конечно не знаю как создавалась данная защита, но первое впечатление было, что некоторые участки кода составлялись именно байткодом. Причем когда его просматриваешь - видно, что это цикл и он правильно выполняется, но его структура нестандартная, декомпилятор такое никак не поймёт. Приходилось дописывать необходимые инструкции, немного менять существующие, чтобы подогнать под стандартную структуру для декомпилятора. @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted January 8, 2015 Share Posted January 8, 2015 Причем когда его просматриваешь - видно, что это цикл и он правильно выполняется, но его структура нестандартная, декомпилятор такое никак не поймёт. Приходилось дописывать необходимые инструкции, немного менять существующие, чтобы подогнать под стандартную структуру для декомпилятора.Не знаю, не разгребал особо, глянул начало только, из-за смещения нужно особым способом дизассемблировать, а мне и так есть чем заняться.) @ Quote Link to comment Short link Share on other sites More sharing options...
fecell Posted January 9, 2015 Share Posted January 9, 2015 (edited) Я конечно не знаю как создавалась данная защита, но первое впечатление было, что некоторые участки кода составлялись именно байткодом. да, частично так и есть - сначала компилируется, потом выполняется анализ и замена байткода ;) Не знаю, не разгребал особо, глянул начало только, из-за смещения нужно особым способом дизассемблировать, а мне и так есть чем заняться.) это чтобы "занятые другим делом" потеряли желание дальше разбираться ;) если пройтись по всему дереву кода, как это сделал бы питон. Но алгоритм конечно будет... для flowchart обхода дерева байткода скрипта достаточно оказалось 704 строки на питоне написать.. где комментов и пустых строк-разделителей ~30%. Edited January 9, 2015 by fecell @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.