Сейчас я покажу один способ как можно скрыть функции из .symtab секции. В целом, я не смогу объяснить некоторые назначения регистров и может быть толком не разобрался в теме. Но это работает и я хочу показать. Может быть кто-нибудь захочет капнуть глубже и будет супер хакер.
Итак, начнём. Я покажу пример на своей библиотеке, но можно умудриться и это запустить на libc например. Что нужно делать?
Взглянем на этот код.
Для начала нам нужно узнать что находится в регистре r9. От него мы будем отталкиваться каждый раз.
При каждом новом запуске, значение в регистре меняются - это служит защитой от хакерских атак, чтобы невозможно было сделать эксплоит,
который с первого раза может сработать. Смотрим адрес, который помещается в addr.
Потом ищем функцию, которая находится в dlsym, она вернет адрес функции.
Далее вычитаем из addr нашу функцию - addr - (uint64_t) fn. Результат будет всегда один и тот же. Что делаем теперь?
В моём случае результат 0xa945;
Теперь меняем функцию так.
И собираем программу как обычно, чтобы библиотека подключалась динамически.
Теперь выполняем программу и всё работает. Если посмотреть с помощью radare2 по команду >is, то мы не увидим, что эта функция из библиотеки используется.