MakcT40 331 #239574 Posted December 27, 2014 Сможете показать как такой скрипт разбирать?Есть такой ZorroJan - он точно знает. Quote Share this post Link to post Short link Share on other sites
fecell 125 #239734 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 Share this post Link to post Short link Share on other sites
StranikS_Scan 4,212 #239740 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 Share this post Link to post Short link Share on other sites
glassman 2 #239750 Posted December 28, 2014 (edited) а кто файл закрывать будет, Пушкин? fc.close() не вы непоняли я таксамо разкриптовывал но всё время одна и таже фигня а именно он несколько раз закриптовал подскажите как сразу весь код разкриптовать Edited December 28, 2014 by glassman 1 1 Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,212 #239769 Posted December 28, 2014 не вы непоняли ... подскажите как сразу весь код разкриптовать не это вы не поняли: дальше сам разбирайся, все-же защита для того и защита, чтобы защищать. 1 Quote Share this post Link to post Short link Share on other sites
DrWebber 5 #239815 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 Share this post Link to post Short link Share on other sites
StranikS_Scan 4,212 #239823 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 Share this post Link to post Short link Share on other sites
DrWebber 5 #239825 Posted December 28, 2014 И где там написано, что после инициализации open на запись не нужно закрывать файл? Я же даже процитировал) Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,212 #239826 Posted December 28, 2014 Я же даже процитировал) Увидел, увидел, см. выше. Quote Share this post Link to post Short link Share on other sites
KACTET 317 #239945 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 Share this post Link to post Short link Share on other sites
fecell 125 #242424 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 Share this post Link to post Short link Share on other sites
sae 2 #242529 Posted January 8, 2015 Чуточку модифицировал защиту, что выкладывал Юша. По-моему так лучше. Теперь можно увидеть всю красоту рефакторинга байткода этой защиты. :) hello.zip 1 Quote Share this post Link to post Short link Share on other sites
KACTET 317 #242541 Posted January 8, 2015 (edited) Посмотрите, только по честному сможите разложить hello.pyc? Edited January 8, 2015 by KACTET Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #242585 Posted January 8, 2015 Нашел весьма обширную статью по интроспекции и подмене кода в питоне - Patching Function Bytecode in PythonА я все не мог понять, как вы редактируете readonly code object... Чуточку модифицировал защиту, что выкладывал Юша."Некратное" смещение (джамп в начале файла) идея неплохая, но больно "палевно" его поставили... Quote Share this post Link to post Short link Share on other sites
MakcT40 331 #242590 Posted January 8, 2015 dd = 'hello' ss = ' world' print dd + ss Quote Share this post Link to post Short link Share on other sites
sae 2 #242591 Posted January 8, 2015 (edited) Бинго! "Некратное" смещение делал не я, моя модификация в другом. Если MakcT40 разложил, то он знает. Хотя я понимаю, что есть методы получения исходника и не раскручивая эту "кашу". Edited January 8, 2015 by sae Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #242617 Posted January 8, 2015 Хотя я понимаю, что есть методы получения исходника и не раскручивая эту "кашу"."Некратные" смещения, "квантовую" запутанность, "фейковые" джампы и т.д. можно выпилить, если пройтись по всему дереву кода, как это сделал бы питон. Но алгоритм конечно будет... Учитывая что не одни условия в коде используются, есть еще различные loop-конструкции. По сути такое эквивалентно написанию половины питона. Но и защиту убивать будет почти наповал. Quote Share this post Link to post Short link Share on other sites
sae 2 #242631 Posted January 8, 2015 "Некратные" смещения, "квантовую" запутанность, "фейковые" джампы и т.д. можно выпилить, если пройтись по всему дереву кода, как это сделал бы питон. Это понятно. Но обычно после проведения таких манипуляций получает чистый байткод, который благополучно декомпилится в исходник. Здесь же вся соль именно в рефакторинге байткода. Как я понимаю данный термин - это когда байткод чистый от "фейков-джампов" и исправно выполняется, но декомпилировать не выходит. Я конечно не знаю как создавалась данная защита, но первое впечатление было, что некоторые участки кода составлялись именно байткодом. Причем когда его просматриваешь - видно, что это цикл и он правильно выполняется, но его структура нестандартная, декомпилятор такое никак не поймёт. Приходилось дописывать необходимые инструкции, немного менять существующие, чтобы подогнать под стандартную структуру для декомпилятора. Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #242640 Posted January 8, 2015 Причем когда его просматриваешь - видно, что это цикл и он правильно выполняется, но его структура нестандартная, декомпилятор такое никак не поймёт. Приходилось дописывать необходимые инструкции, немного менять существующие, чтобы подогнать под стандартную структуру для декомпилятора.Не знаю, не разгребал особо, глянул начало только, из-за смещения нужно особым способом дизассемблировать, а мне и так есть чем заняться.) Quote Share this post Link to post Short link Share on other sites
fecell 125 #242692 Posted January 9, 2015 (edited) Я конечно не знаю как создавалась данная защита, но первое впечатление было, что некоторые участки кода составлялись именно байткодом. да, частично так и есть - сначала компилируется, потом выполняется анализ и замена байткода ;) Не знаю, не разгребал особо, глянул начало только, из-за смещения нужно особым способом дизассемблировать, а мне и так есть чем заняться.) это чтобы "занятые другим делом" потеряли желание дальше разбираться ;) если пройтись по всему дереву кода, как это сделал бы питон. Но алгоритм конечно будет... для flowchart обхода дерева байткода скрипта достаточно оказалось 704 строки на питоне написать.. где комментов и пустых строк-разделителей ~30%. Edited January 9, 2015 by fecell Quote Share this post Link to post Short link Share on other sites