перехват библиотечных функций
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
перехват библиотечных функций - 2008-05-26 19:06:48.723333
|
|
|
senya
Сообщений: 80
Оценки: 0
Присоединился: 2006-10-05 20:29:09.163333
|
Есть статья в ][акере по >>ссылке<< о перехвате библиотечных функций. Для меня особенно интересен следующий фрагмент из статьи: quote:
А вот другой популярный прием, называемый методом "подмены библиотеки", также позаимствованный из мира Windows: [ul]создаем "обертку" (wrapper) вокруг интересующей нас библиотеки, экспортирующей те же самые функции, что и она;оригинальную библиотеку переименовываем или размещаем в другом месте;функции-обертки определяют идентификатор вызывающего их процесса, и, если это действительно "их" процесс, совершают заранее запланированные действия (пишут вызов в log, подменяют аргументы или код возврата и т.д). Как определить id процесса? Это легко, ведь функции-обертки вызываются из контекста процесса, который их использует, и решение задачи сводится к выяснению идентификатора текущего процесса, возвращаемого функцией getpid();функция-обертка передает управление оригинальной функции основной библиотеки или своей собственной подложной функции;[/ul] За внешней простотой реализации такого подхода кроется целый ворох проблем. Создать обертки вокруг всех "системных" библиотек вручную практически нереально, и эту работу необходимо автоматизировать, написав несложный парсер so-файлов и кодогенератор. Необязательно генерировать готовый ELF-файл, проще создать Си-программу и откомпилировать ее с помощью gcc. "Глобальность" перехвата воздействует на все процессы, и кривая "обертка" рушит ось так, что только дампы летят. Давай не будем трогать системные библиотеки, а вместо этого изменим переменную LD_LIBRARY_PATH в окружении "подопытного" процесса. Она специально предусмотрена на тот случай, если отдельно взятому приложению требуется предоставить свой набор библиотек (статический и динамический загрузчики сначала ищут библиотеку в путях, указанных LD_LIBRARY_PATH, и только если там ее не оказывается, переходят к файлу /etc/ld.so.conf, а затем к путям /lib и /usr/lib), но, если "подопытный" процесс попытается загрузить библиотеку по абсолютному пути, он сможет вырваться из-под нашего контроля! Даная задача стоит сейчас передо мной. Кто может подсказать, есть ли что-то готовое уже реализовано, помочь ссылкой, привести код… А то с нуля для меня это написать тяжело. А то я застопорился на проблеме quote:
Создать обертки вокруг всех "системных" библиотек вручную практически нереально, и эту работу необходимо автоматизировать, написав несложный парсер so-файлов и кодогенератор и ни шагу вперед…((
|
|
|
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-скрипт. Можно в любой скрипт, но это уже смотря по личным предпочтениям.
|
|
|
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?
|
|
|
|
|