Системный шпионаж в *nix часть 1 Крис Касперски ака мыщъх Хакер, номер #087, стр. 087-134-7 Объединив все вышесказанное, нам по силам реализовать автоматический патчер, внедряющий любой код в произвольные функции (предлагаемый мыщъх'ем исходный код автоматического перехватчика, внедряющего в начало функции gets() команду retn, ты найдешь на прилагаемом к журналу диске, из-за ограничения по объему мы не можем его опубликовать. - Прим. ред.). Несколько замечаний к данной программе: для уменьшения количества коллизий и ускорения поиска сравнение ведется с привязкой к смещению внутри страницы (за это отвечает конструкция page_buf[((unsigned int)p)%PAGE_SIZE]). Загрузка страниц в память происходит автоматически за счет работы memcmp(). Специально беспокоиться об этом не надо. Программа обрабатывает ситуации, когда искомая последовательность встречается в памяти более одного раза или "разрезается" страницей напополам. В этом случае она советует увеличить/уменьшить константу MIN_SG_SIZE, отвечающую за размер сигнатуры, и повторить попытку еще раз. Компилируем программу ("gcc mem.c -O2 -o mem -ldl") и запускаем ее на выполнение. Первый ключ командой строки — имя библиотеки, второй — имя функции, которую нужно хакнуть. При запуске без аргументов хачится функция gets из библиотеки libc.so.6. Если в начале функции уже стоит C3h, то программа пытается восстановить стандартный пролог и пишет 55h, то есть работает как триггер (попытка хака функции с нестандартным прологом закончится плачевно). Продолжение следует... |