2016-10-15 9 views
0

Есть ли простой/повторяемый способ скремблирования RTTI-символов?Как скрыть символы RTTI C++?

Некоторые вещи, которые уже были сделаны:

  • статические сборки - Очевидно, что это очень помогает, как вещи получить встраиваются между библиотеками и нет никакого чистый интерфейс, как с динамической библиотеки. Мы хотим сделать это в любом случае. B/c библиотека работает с кросс-платформой, и это упрощает развертывание (только один файл с полной библиотекой).

  • с использованием «полосы» - по крайней мере, на Linux (не уверен, является эквивалентом для Windows!), это приведет к удалению хорошей часть символов слева плавающей вокруг

Однако, если я бег «струна» на библиотеке я до сих пор можно увидеть читаемые символы человека! После некоторых исследований кажется, что это связано с RTTI. Все существующие компиляторы, похоже, просто используют функцию/класс/и т. Д. для генерации значений сравнения RTTI в коде. Этот эффект приводит к утечке источника в двоичный файл и дает любопытную информацию о нашем секретном соусе и о том, как мы это делаем.

Примечание:

  • Мы не можем строить с -fno-RTTI б/с статически связанных библиотек мы используем, используя RTTI внутри. Я думаю, что то, что я ищу, это то, что будет работать на скомпилированном исполняемом файле, а не как часть процесса сборки.

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

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

ответ

1

Одно простое решение заключается в создании с целым букетом определяет, для каждого имени, которое вы хотите скрыть. Компиляция с -DCFoo=a_1 -DCBar=a_2 и вашими классами Cfoo и CBar удалены из RTTI и других таблиц символов.

+0

Спасибо за предложения. Выполнение этого в автоматическом режиме для всех оставшихся символов кажется немного сложной задачей. Может быть, у кого-то будет более легкое решение :) – geokon

0

Вы можете попробовать обфускатор C++. Если вы google довольно много всплывают.

+0

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