Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

перехват библиотечных функций

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [*nix/Linux] >> перехват библиотечных функций
Имя
Сообщение << Старые топики   Новые топики >>
перехват библиотечных функций - 2008-05-26 19:06:48.723333   
senya

Сообщений: 80
Оценки: 0
Присоединился: 2006-10-05 20:29:09.163333
Есть статья в ][акере по &gt;&gt;ссылке&lt;&lt; о перехвате библиотечных функций. Для меня особенно интересен следующий фрагмент из статьи:
quote:


А вот другой популярный прием, называемый методом "подмены библиотеки", также позаимствованный из мира Windows: [ul]
  • создаем "обертку" (wrapper) вокруг интересующей нас библиотеки, экспортирующей те же самые функции, что и она;
  • оригинальную библиотеку переименовываем или размещаем в другом месте;
  • функции-обертки определяют идентификатор вызывающего их процесса, и, если это действительно "их" процесс, совершают заранее запланированные действия (пишут вызов в log, подменяют аргументы или код возврата и т.д). Как определить id процесса? Это легко, ведь функции-обертки вызываются из контекста процесса, который их использует, и решение задачи сводится к выяснению идентификатора текущего процесса, возвращаемого функцией getpid();
  • функция-обертка передает управление оригинальной функции основной библиотеки или своей собственной подложной функции;[/ul] За внешней простотой реализации такого подхода кроется целый ворох проблем. Создать обертки вокруг всех "системных" библиотек вручную практически нереально, и эту работу необходимо автоматизировать, написав несложный парсер so-файлов и кодогенератор. Необязательно генерировать готовый ELF-файл, проще создать Си-программу и откомпилировать ее с помощью gcc.
  • "Глобальность" перехвата воздействует на все процессы, и кривая "обертка" рушит ось так, что только дампы летят. Давай не будем трогать системные библиотеки, а вместо этого изменим переменную LD_LIBRARY_PATH в окружении "подопытного" процесса. Она специально предусмотрена на тот случай, если отдельно взятому приложению требуется предоставить свой набор библиотек (статический и динамический загрузчики сначала ищут библиотеку в путях, указанных LD_LIBRARY_PATH, и только если там ее не оказывается, переходят к файлу /etc/ld.so.conf, а затем к путям&nbsp;/lib и /usr/lib), но, если "подопытный" процесс попытается загрузить библиотеку по абсолютному пути, он сможет вырваться из-под нашего контроля!

    Даная задача стоит сейчас передо мной. Кто может подсказать, есть ли что-то готовое уже реализовано, помочь ссылкой, привести код… А то с нуля для меня это написать тяжело. А то я застопорился на проблеме
    quote:

    Создать обертки вокруг всех "системных" библиотек вручную практически нереально, и эту работу необходимо автоматизировать, написав несложный парсер so-файлов и кодогенератор

    и ни шагу вперед…((
    Post #: 1
    RE: перехват библиотечных функций - 2008-05-27 00:35:41.366666   
    rgo

    Сообщений: 7170
    Оценки: 281
    Присоединился: 2004-09-25 05:14:25
    quote:

    ORIGINAL: senya
    Даная задача стоит сейчас передо мной. Кто может подсказать, есть ли что-то готовое уже реализовано, помочь ссылкой, привести код… А то с нуля для меня это написать тяжело. А то я застопорился на проблеме
    quote:

    Создать обертки вокруг всех "системных" библиотек вручную практически нереально, и эту работу необходимо автоматизировать, написав несложный парсер so-файлов и кодогенератор

    и ни шагу вперед…((

    Надо натравить objdump на файлик .so, и затолкать его вывод в awk, или в shell-скрипт, или в perl-скрипт. Можно в любой скрипт, но это уже смотря по личным предпочтениям.
    Post #: 2
    RE: перехват библиотечных функций - 2008-05-27 11:01:15.263333   
    senya

    Сообщений: 80
    Оценки: 0
    Присоединился: 2006-10-05 20:29:09.163333
    quote:

    ORIGINAL: rgo
    Надо натравить objdump на файлик .so, и затолкать его вывод в awk, или в shell-скрипт, или в perl-скрипт.

    А можно с этого места поподробнее… objdump выводит информацию об обьектных файлах, но опций, которые бы мне были полезны я не нашел! Может, я что-то пропустил? И что должно быть на выходе у objdump-a?
    Post #: 3
    Страниц:  [1]
    Все форумы >> [*nix/Linux] >> перехват библиотечных функций







    Связаться:
    Вопросы по сайту / xakep@glc.ru

    Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.