Вопрос по packaging, cpython, compiler-construction, python, ctypes – Обфусцирование байт-кода Python через мутацию интерпретатора

6

На самом деле, Dropbox сделали это очень хорошо, они смогли защитить свое настольное приложение, сделанное на python; Я много исследовал это, но нет лучшего решения, чем запутывание, которое не очень безопасный способ, и вы в конечном итоге увидите, что ваш код куда-то загружен.

Я слушал сессиюДжованни Баджо (основатель PyInstaller), он сказал, что Dropbox делает это:

Скремблирование байт-кода путем перекомпиляции вашего CPython 'и, следовательно, стандартный интерпретатор CPython не сможет его запустить, только перекомпилированный интерпретатор cpython.Все, что вам нужно сделать, это перетасовать цифры ниже .I 'define loadup 8

мы никогда не проходили через Pythons исходный код, поэтому я не буду утверждать, что я полностью понимаю вышеупомянутые слова.

Мне нужно услышать голос экспертов: как это сделать? И если после перекомпиляции я смогу упаковать свое приложение, используя доступные инструменты, такие как PyInstaller?

Обновить:

Я провел некоторое исследование относительно того, как Dropbox делает этот тип запутывания / мутации, и нашел это:

В соответствии сХаген Фричони делают это в два этапа:

Они используют шифр TEA вместе с RNG, засеянным некоторыми значениями в объекте кода каждого модуля python. Они соответственно настроили переводчика так, чтобы он

а) Расшифровывает модули и

б) предотвращает доступ к дешифрованным кодовым объектам.

Это был бы простой путь, позволяющий dropbox все дешифровать и выгружать модули, используя встроенный маршаллер.

Другой используемый трюк - ручное шифрование кодов операций. К сожалению, это можно было исправить только полуавтоматически, поэтому их моноалфавитный шифр замещения оказался довольно эффективным с точки зрения выигрыша в течение некоторого времени.

Я все еще хочу узнать больше о том, как это можно сделать, более того, я неЯ не знаю, как расшифровка происходит в этом процессе ... Я хочу, чтобы все эксперты голос здесь ... простые парни, где ты.

Спасибо, Янне. Очень похоже на то, что вы сказали, добавив к этому, удаление модулей самоанализа во вновь созданном / перемешанном интерпретаторе. securecurve
Похожий, более свежий вопрос:Не компилируемый Python Janne Karila
в конце дня байт-код будет извлечен из памяти, а затем злоумышленник сможет сравнить новый тасованный байт-код со стандартным, чтобы узнать, как тасуется; но пустьбыть честным, не могТот же злоумышленник декомпилирует программу, написанную на C, чтобы получить исходный код, ничто не защищено от реверсирования,компромисс ... этоКак я вижу вещи, может быть, яЯ не прав. securecurve

Ваш Ответ

1   ответ
2

include/opcode.h, Я нене вижу#define loadup хотя, но, возможно, это относится к какой-то старой версии Python. Я не пробовал это.

Это запутает ваш.pyc файлы, чтобы они не могли быть проверены никакими инструментами, которые распознают нормально.pyc файлы. Это может помочь вам скрыть некоторые меры безопасности внутри вашей программы. Тем не менее, злоумышленник может (например) извлечь свой собственный интерпретатор Python из комплекта приложения и использовать его для проверки файлов. (Просто запустите интерактивный переводчик и начните расследование, импортировав и используя dir в модуле)

Также обратите внимание, что ваш пакет обязательно будет содержать некоторые модули из стандартной библиотеки Python. Если злоумышленник догадывается, что вы перетасовали коды операций, он может провести побайтное сравнение между вашей версией и обычной версией стандартного модуля и таким образом обнаружить ваши коды операций. Чтобы предотвратить эту простую атаку, можно защитить модули с надлежащим шифрованием и попытаться скрыть этап расшифровки в интерпретаторе, как упомянуто в обновленном вопросе. Это заставляет злоумышленника использовать отладку машинного кода для поиска кода расшифровки.

Я нене знаю, как расшифровка происходит в этом процессе ...

Вы бы изменили часть интерпретатора, которая импортирует модули, и вставили туда свой код C для расшифровки.

Я имел в виду проверить мой вопрос обновления :) securecurve
Ну, это все? Мы меняем только цифры вopcode.hПерекомпилировать интерпретатор Python, упаковать мое приложение и отправить его клиенту? Будет ли это создавать Dropbox-подобное приложение с таким же уровнем безопасности? securecurve
Эй, чувак, проверь мой ответ и дай мне знать, что ты думаешь securecurve
+1 для обновления ответа 2 раза для улучшения, но я выиграл 'отметьте это сейчас, чтобы получить больше ответов ... securecurve

Похожие вопросы