
Графический интерфейс на Qt Widgets для исследования байт-кода Python с помощью pycdc/pycdas, просмотра нативной декомпиляции и использования AI-резерва для неподдерживаемых объектов кода.
Графический интерфейс на Qt Widgets для исследования байт-кода Python с помощью pycdc / pycdas, просмотра нативных результатов декомпиляции, импорта вывода Pyarmor oneshot и повторной обработки неподдерживаемых объектов кода с использованием AI-запасного варианта.
Приложение поддерживает как Windows, так и Linux.


.pyc / .pyo напрямуюMergedNativeAICtrl+RПриложение по умолчанию не отправляет весь .pyc.
Оно формирует запрос на основе выбранного объекта кода, включая:
Это позволяет сосредоточить восстановление на выбранном узле, а не на всём файле.
Приложение в первую очередь ищет локальные исполняемые файлы рядом с бинарником приложения и будет искать:
pycdc.exepycdcpycdas.exepycdasв той же директории, что и бинарник pycdc-studio.
Вы можете переопределить их с помощью переменных окружения:
PYCDC_STUDIO_PYCDCPYCDC_STUDIO_PYCDASПриложение может импортировать проекты, защищённые Pyarmor, путём делегирования
Lil-House/Pyarmor-Static-Unpack-1shot.
Текущий поток интеграции:
oneshot/shot.py для выбранной директории проекта Pyarmorpyarmor-1shot сгенерировать .1shot.das и .1shot.cdc.pyОжидается, что в релизные пакеты будет включён инструментарий Pyarmor oneshot и необходимые зависимости Python.
Для локальной разработки текущий код сначала ищет встроенные файлы рядом с пакетом приложения, а также поддерживает локальный клон по адресу:
external/Pyarmor-Static-Unpack-1shot/oneshot/shot.pyи ожидает, что pyarmor-1shot / pyarmor-1shot.exe будут доступны в той же директории, что и shot.py.
Вам также потребуется окружение Python, способное запускать shot.py, включая pycryptodome.
Если у вас другая структура, вы всё ещё можете переопределить её с помощью переменных окружения:
PYCDC_STUDIO_PYARMOR_PYTHONPYCDC_STUDIO_PYARMOR_SHOTPYCDC_STUDIO_PYARMOR_PYTHONPATHPYCDC_STUDIO_PYARMOR_OUTPUT_ROOTПример:
git clone https://github.com/Lil-House/Pyarmor-Static-Unpack-1shot external/Pyarmor-Static-Unpack-1shot
cmake -S external/Pyarmor-Static-Unpack-1shot/pycdc -B external/Pyarmor-Static-Unpack-1shot/build
cmake --build external/Pyarmor-Static-Unpack-1shot/build --config Release
cmake --install external/Pyarmor-Static-Unpack-1shot/build --config Release
python -m pip install pycryptodome
pycdc-studioFile -> Import Pyarmor Project...pyarmor_runtime.1shot.* в рабочее пространствоПримечания:
PYCDC_STUDIO_PYARMOR_OUTPUT_ROOT.Перед использованием AI-запасного варианта откройте Settings и настройте как минимум:
Base URLAPI KeyModelТекущий клиент ожидает конечную точку API, совместимую с OpenAI.
Диалог настроек сохраняет конфигурацию провайдера с помощью QSettings и использует переменные окружения, если поле пустое.
Поддерживаемые переменные окружения:
PYCDC_STUDIO_AI_BASE_URLPYCDC_STUDIO_AI_API_KEYPYCDC_STUDIO_AI_MODELPYCDC_STUDIO_AI_SYSTEM_PROMPTТребования:
Пример:
cmake -S . -B build
cmake --build build
pycdc-studio.pyc / .pyo или перетащите папку в окноFile -> Import Pyarmor Project... для проекта, защищённого PyarmorSettings из верхнего меню и настройте свою AI-модель, если хотите использовать AI-запасной вариантRetry with AI для выбранного узла, если нативная декомпиляция неполная или невернаяБолее длинные тестовые примеры находятся в каталоге test/:
workflow_orchestrator.pyasync_batch_runner.pyplugin_config_resolver.pyРепозиторий отслеживает только исходные образцы.
Чтобы сгенерировать локальные файлы .pyc для тестирования перетаскиванием:
python test/compile_test_samples.py
Этот скрипт записывает скомпилированный байт-код в test/__pycache__/.
Этот проект всё ещё экспериментальный.
Текущий вид Merged представляет собой честный смешанный документ:
Это ещё не полноценный встраиваемый объединитель исходного кода.
Этот проект интегрируется с pycdc / pycdas, чей вышестоящий проект распространяется под лицензией GPL-3.0.
pycdc: GPL-3.0pycdc / pycdas, должны содержать уведомление GPL-3.0THIRD_PARTY_NOTICES.txt вышестоящий репозиторий и коммит pycdcПодробности лицензии см. в вышестоящем проекте: