
pyREtic — это расширяемый фреймворк для обратного проектирования байт-кода Python 2.x в памяти.
Rich Smith - [email protected]
Последнюю версию pyREtic можно найти по адресу: https://github.com/MyNameIsMeerkat/pyREtic
pyREtic — это расширяемый фреймворк, помогающий выполнять различные задачи обратной разработки для проектов на языке Python.
Он помогает обратному разработчику восстановить исходный код (файлы .py) из байт-кода (файлов .pyc), в частности, когда код, подвергаемый реверс-инжинирингу, был намеренно усложнён для предотвращения декомпиляции стандартными инструментами.
Фреймворк состоит из трёх основных частей:
REpdb: Ориентированный на обратную разработку расширенный набор функциональности pdb, упрощающий взаимодействие реверсера с исследуемым кодом.
OpcodeRemap: Компонент, позволяющий вывести новую таблицу опкодов из среды выполнения Python, у которой изменён порядок опкодов для затруднения работы большинства стандартных декомпиляторов.
LiveUnpyc: Расширение проекта декомпилятора UnPyc Дмитрия Корнева http://unpyc.sourceforge.net/, которое позволяет декомпилировать живые объекты Python в памяти обратно в исходный код на Python с помощью трёх различных методов.
Возможности набора инструментов pyREtic создавались для эффективной борьбы с защитами, которые использовало большинство разработчиков закрытого кода на Python, чтобы защитить свой распространяемый код от чтения в исходной форме.
Результатом работы pyREtic было создание представления исходного кода объекта, к которому можно получить доступ в работающем экземпляре целевого приложения. Это представление должно было быть достаточно качественным для оценки безопасности целевого приложения, а не абсолютно идеальной копией.
Подробная инструкция находится в каталоге docs/.
pyREtic распространяется под лицензией GPLv3, которую можно найти в каталоге docs/ или по ссылке GPLv3.
Другие компоненты, используемые pyREtic, распространяются под собственными лицензиями:
UnPyc http://unpyc.sourceforge.net/ : Лицензия BSD
pycallgraph http://pycallgraph.slowchop.com/: GPLv2
pyREtic зародился, когда я работал в Immunity Inc, и впервые был публично представлен на конференции BlackHat 2010 в Лас-Вегасе, а затем на Defcon 17. Документ, сопровождающий его выпуск, можно найти в каталоге docs/.
Сейчас я больше не работаю в Immunity, но Дэйв Айтел был достаточно любезен, чтобы позволить мне выпустить код под лицензией GPL, давая людям доступ к нему и возможность продолжить его развитие.
Последнюю версию фреймворка можно найти по адресу https://github.com/MyNameIsMeerkat/pyREtic.
Недавно я перенёс проект на новое место на GitHub в связи с возобновившимся интересом со стороны некоторых участников сообщества и собираюсь выпустить некоторые улучшения, которые до сих пор не увидели свет.
Функции, которые будут добавлены в pyREtic в будущем, будут отражать развитие моих потребностей в обратной разработке Python-приложений. Если у вас есть предложения, дайте мне знать.
Для тех, кому интересны технические детали работы pyREtic, они описаны в документе pyREtic: In memory reverse engineering for obfuscated Python bytecode, который находится в каталоге docs/, а презентация на эту тему доступна по адресу:
http://prezi.com/kmyvgiobsl1d/pyretic-rich-smith-blackhatdefcon-2010