Защита разделяемой библиотеки - PullRequest
0 голосов
/ 11 марта 2011

Есть ли способ защитить разделяемую библиотеку (файл .so) от обратного инжиниринга?

Есть ли бесплатный инструмент для этого?

Ответы [ 2 ]

0 голосов
/ 27 марта 2016

Защита от обратного инжиниринга существует во многих формах, вот лишь некоторые из них:

  • Обнаружение реверсивных сред, таких как запуск в отладчике или на виртуальной машине, и прерывание. Это мешает аналитику понять, что происходит. Обычно используется вредоносным ПО. Обычная хитрость - запускать недокументированные инструкции, которые ведут себя в VMWare иначе, чем на реальном процессоре.

  • Форматирование двоичного файла таким образом, чтобы оно искажалось, например, недостающие секции ELF. Вы пытаетесь помешать обычным инструментам анализа открыть файл. В Linux это означает выполнение чего-то, что libbfd не понимает (но другие библиотеки, такие как capstone, все еще могут работать).

  • Рандомизация бинарных символов и блоков кода, чтобы они не выглядели так, как генерирует компилятор. Это затрудняет декомпиляцию (отгадывание исходного кода). Некоторые коммерческие программы (например, игры) развертываются с такой защитой.

  • Полиморфный код, который изменяется на лету (например, распаковывается в память при загрузке). Самые сложные из них предназначены для использования вредоносными программами и называются упаковщиками (избегайте их, если только вы не хотите быть помеченными средствами защиты от вредоносных программ). Существуют также академические, такие как UPX http://upx.sourceforge.net/ (который предоставляет инструмент для отмены UPX).

0 голосов
/ 13 марта 2011

Очевидным первым шагом является удаление из библиотеки всех символов, кроме тех, которые требуются для публикуемого вами API.

«Стандартные» методы предотвращения разборки (например, переход в середину инструкции или шифрование некоторых частей кода и расшифровка их по требованию) применяются к разделяемым библиотекам.

Другие методы, например обнаружение того, что вы работаете в режиме отладчика и дает сбой, на самом деле не применяется (если только вы не хотите довести своих конечных пользователей до безумия).

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

...