как узнать какие функции вызывает подопытная программа? в windows существует целый арсенал шпионских средств, но linux-хакерам весь инструментарий приходится разрабатывать самостоятельно. сейчас мыщъх покажет как осуществляется перехват и подмена (!) системных и библиотечных функций в linux и *BSD p.s. критика только приветствуется _1240548752__linux.hook.lite.zip
Почитал. Правда пока не проверял код на правильность. Довольно интересно, я еще не сталкивался с использованием /dev/mem. Единственное, что хочу добавить . Много опечаток (надеюсь это именно опечатки, а не что-то другое) . И еще - у меня не отображались рисунки.
Сравнение LIBC с KERNEL32 неуместно, IMHO. LIBC - сишная библиотека (как MSVCRT) и особого отношения к ядру не имеет. Про /dev/mem не знал. Очень интересно. Обязательно попробую.
Quantum по поводу LIBC - у всех свои ассоциации KERNEL32.DLL к _ядру_ вообще никаким боком. у меня LIBC ассоцируется именно с KERNEL32.DLL, поскольку в ней реализованы базовые функции, необходимые практически любому приложению, ИМХО такая аналогия имеет право на сущестование. я там еще и с "импортом" намудрил там аналогия еще более натянутая, можно даже сказать притянутая за уши TermoSINteZ рисунков там и нету. иначе бы аттач не влез. полная версия на ftp в файле zq-linux.hook.zip P.S. если есть интерес, могу выложить еще несколько линуховых статей P.S2. буду рад, если погоняете код на своих машинах в плане проверки на совместимость готовые сорцы в zq-linux.hook.files.zip P.S3. всем спасибо
Интерес к линуксу всегда есть И будет. Так что , статьи по системному программированию в линуксе приветствуются - их мало.
n2k Это и есть ядро для пользовательского уровня, т.е. для прикладного ПО. Софт опирается в большей степени на kernel32, чем на ntdll. Ближайший родственник LIBC, который уже приобрёл в Win32 статус системной библиотеки (короче, MSVCRT), тоже опирается на это "ядро". LIBC - гнутая реализация стандартных сишных функций. Не возникает у меня почему-то ассоциаций между этими двумя библиотеками... Может, у читателей такие ассоциации и возникнут... Если про фразу "Библиотеки могут подключаться как на стадии загрузки elf-файла через таблицу символов (аналог таблицы импорта) [...]", то ничего мудрёного в сравнении не вижу. Тут как раз всё правильно, IMHO.
Quantum ладно, ассоциации дело такое... у каждого они свои... но ты мне скажи, согласен ли ты, что задачи, решаемые в NT перехватом KERNEL32.DLL в UNIX (обычно) решаются перехватом LIBC? если в NT большинство программ юзают CreateFile из KERNEL32.DLL, то в UNIX'е - fopen из LIBC и таких аналогий можно привести множество...
n2k Почти всё никсовое ПО использует LIBC. Очень немногие программки юзают облегчённые версии LIBC и совсем немногие осмеливаются обращаться к ядру через syscalls. Да, к сожалению, это так. Но обьясняется этот статус кво тем, что никсоиды обычно пишут своё ПО на C/C++ и компилят его с помощью GNU C++. Результат: почти все юзают GNU C library.
а в винде иначе? Всяко ведь проще использовать заглушки для syscall'ов из libc (или даже дополнительные навороты типа fopen), чем создавать свои заглушки... какой в этом резон? ради того чтобы inline'ить эти заглушки? мне кажется в этом мало смысла. А если чтобы было не перехватить, дык кому надо, в ядро вставит перехват, благо ядро opensource. n2k с удовольствием бы почитал, но... меня так ломает ставить что-то, что поймёт .doc... Венды нету, OO огромен до ужаса, а в возможности abiword'а я по старой памяти не верю, да и в депендансах у него весь gnome. Конвёртеры искать лень, да и не факт, что они справятся. мож в pdf/ps/djvu/html/txt выложишь?
r90 не согласен по поводу перехвата. часто выгоднее перехватывать либы, чем ядро, тем более что многие функции реализованы в либах (типа _dl_open), да и вообще... во всяком случае, обнаружив кучу инструментов для перехвата системных вызовов и не найдя ничего подходящего для перехвата либов, я вот ковырнул этот вопрос своим хвостом. вот в html. конвертировал word'ом, так что качество сами понимаете... но лис его перевариает _1884794825__nix_h.zip
r90 У MS есть своя LIBC под названием MSVCRT, у Borland - своя. Но Win32 всё-таки не так тесно связана с C/C++ как никсы, поэтому роль стандартной сишной либы в винде сильно отличается от роли LIBC в Линуксе. Вспомните, что когда-то динамическую сишную либу в винде нужно было таскать вместе с приложением "Проще" или нет зависит от ТЗ и, частично, от разработчика.
n2k спасибо. почитал. надо будет заставить-таки libc собраться с -fomit-stack-frame Вот поразвлекаюсь с перехватом, и займусь. Замечу, между прочим, что имея права рута, можно подменять библиотеки указанные с абсолютными путями сказав chroot.
r90 вариантов много. и вариант с подменой либы я вроде бы упоминал... -fomit-stack-frame тебя не сильно спасет. на многоЦПшных машинах это даже не усложняет перехват. а так... как защита от ламеров - сойдет
Да. Прочилал вот и я. Не скажу, что я очень уж навороченный кодер. Но всё-же. Упоминается про /dev/mem. Да кто ж её даст читать обычному юзверю? Больше всего меня заинтересовала техника трассировки. И по ходу размышлений возник следующий вопрос. Есть некоторый executable .ELF файл. У него есть чёткий заголовок, всё расписано, разтолковано. Я выполняю следующие действия. Запускаю программу в виде child процесса для трассировки. И далее мне требуется узнать, имея лишь PID процесса, точку входа в программу, расположения стека и global offset library. Как это сделать? Перекопав немало литературы, я узнал, что необходимо найти в памяти таблицу процессов, запись отвечающую за конкретный процесс, и там уже по ней двигаться дальше - т.е. искать всю интересующую информацию. Но какой функцией или чем-нить ещё можно это отрыть? Пока гуглю... Но может с этим кто-нить работал? Linux ami 2.6.14-gentoo-r5 #17 Sat Jan 28 02:03:43 EET 2006 x86_64 AMD Sempron(tm) Processor 2800+ AuthenticAMD GNU/Linux Моя система.
стек обычно начинается от 0xc0000000, однако всегда можно получить копию регистров трассируемого процесса с помощью PTRACE_GETREGS (дабы вытащить оттуда esp und ebp). для получения всего остального (точки входа и GOT) достаточно анализа ELF заголовка. не хочу быть занудой, но может все-таки man ptrace? по ELF неплохая дока лежит где-то на ресурсе