PyInstaller — это популярный инструмент для упаковки Python-приложений в автономные исполняемые файлы. Он упрощает распространение программ на Python. Несмотря на полезность PyInstaller, он позволяет декомпилировать файл и является небезопасным с точки зрения защиты кода. Далее поговорим о декомпиляции файлов PyInstaller с помощью PyInstaller Extractor.
Еще по теме: Декомпиляция APK-файлов онлайн
Инструменты для декомпиляции файлов PyInstaller
Существует несколько инструментов для декомпиляции и получения исходного кода Python. Один из популярных — PyInstaller Extractor.
PyInstaller Extractor — это инструмент, который позволяет распаковать ресурсы из исполняемых файлов, созданных с помощью PyInstaller. С его помощью вы можете получить доступ к исходному коду, изображениям, конфигурационным файлам и другим ресурсам, включенным в исполняемый файл.
Его можно скачать с Sourceforge.
При распаковке исполняемого файла получается набор файлов .pyc. Эти файлы содержат скомпилированный байт-код, созданный интерпретатором Python при выполнении или импорте Python-скрипта.
На июнь 2023 год довольно просто декомпилировать и получить исходный код Python, если файлы .pyc были созданы с использованием версий Python до 3.9. Есть несколько библиотек, которые можно использовать для этой цели:
- uncompyle6 — библиотека может использоваться для декомпиляции байт-кода Python и извлечения соответствующего исходного кода.
- decompyle3 — еще одна полезная библиотека, которая помогает декомпилировать байт-код Python и получать исходный код.
Тем не менее, стоит отметить, что последняя версия Python на момент написания статьи — это 3.11+, и декомпиляция файлов .pyc для версий выше 3.8 является более сложной задачей.
Реализация методов декомпиляции байт-кода для последних версий Python — это трудоемкий процесс и занимает много времени.
Несмотря на это ограничение, я нашел инструмент под названием pycdc, который может частично декомпилировать код из последних версий Python. Следует отметить, что этот инструмент не всегда успешен, но может предоставить некоторые фрагменты кода для анализа.
В качестве демонстрации давайте создадим пример с закодированными учетными данными, чтобы показать процесс декомпиляции.
Итак, у нас есть файл PoC.py и мы переходим к его упаковке в исполняемый файл (.exe) с помощью PyInstaller. Этот шаг создает автономный исполняемый файл, который инкапсулирует код Python и его зависимости.
Теперь предположим, что сгенерированный файл .exe попадает в руки злоумышленника. С точки зрения злоумышленника, первый шаг — извлечь скомпилированный байт-код (.pyc) из исполняемого файла:
Затем злоумышленник может использовать pycdc.exe (Decompile++) для декомпиляции байт-кода в читаемый исходный код Python.
Этот процесс возможен даже если версия Python, используемая для компиляции, выше 3.8, благодаря возможностям pycdc.
В результате злоумышленник получает доступ к легко анализируемому и эксплуатируемому коду, раскрывая закодированные учетные данные или потенциальные уязвимости, присутствующие в исходном коде.
Заключение
Декомпиляция исполняемых файлов PyInstaller имеет большое значение в плане безопасности, так как она раскрывает уязвимости, выявляет закодированные секреты и позволяет анализировать код. Приоритезируя меры безопасности с самого начала, вы можете снизить риски, связанные с декомпиляцией, и улучшить защиту ваших приложений.
Автор идеи Сергей Новоселов.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Лучшие программы для реверс-инжиниринга
- Обзор фреймворка для реверс-инжиниринга Ghidra
- Библиотеки и другие инструменты для обфускации Python