загрузка зашифрованных общих объектов с помощью загрузчика / компоновщика rtld / free - PullRequest
3 голосов
/ 21 апреля 2011

Я занимаюсь исследованиями в области шифрования / защиты программного обеспечения.Я хочу связать динамически зашифрованные общие объекты (Linux, архитектура x86, формат ELF32 / 64)

  • Код, который должен быть защищен, содержится (зашифрован, без действительного ELF) в общем объекте.
  • Сам объект является допустимым ELF-файлом, содержащим метод init
  • Расшифровка должна быть запущена, в зависимости от доступной лицензии в функции init, вызываемой загрузчиком.
  • После шифрования код присутствует в памяти как действительный файл ELF.

Были некоторые дополнительные требования:

  • Расшифрованный код не должен бытьхранится (даже временно на диске) - предотвращать простой дамп объекта и повторное использование кода
  • Алгоритм защиты не должен публиковаться, поэтому я не могу использовать части кода GNU (даже люди там делают большую работу!)

Я думаю, что трудный путь состоит в том, чтобы переопределить загрузчик / компоновщик, обеспечивающий необходимую функциональность ... Возможно, может быть способ использовать Linux rtld или его части, другие компоновщики?Есть ли более простой способ?
Спасибо за каждую идею / подсказку

Некоторые связанные ссылки / Информация

  • упаковщик, решающий аналогичную проблему: http://www.upx.org/(не работал ни с одним из моих общих тестовых объектов)
  • Некоторые сведения о загрузке общих объектов http://smilax.org/135/dsohowto.pdf

Ответы [ 2 ]

1 голос
/ 11 июня 2011

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

1 голос
/ 11 июня 2011

Посмотрите на Шиву , если вы заинтересованы в этом. Исходный код не был опубликован, но теория все еще существует.

...