1) что такое сплайсинг 2) что такое функции (и как вообще происходить взаимодействие программы и системы через апи, в т.ч. стек и параметры) 3) уметь копировать байты
Еще извините за вопрос: обязательно ли использовать для сплайсинга драйверы и не использует ли advapihook, которую написал ms Rem сплайсинга?
зависит от того, где сплайсишь. Если в ядре, то обязательно. Если не в ядре, то наоборот нельзя ааще не понял вопроса. Ты можешь использовать че хочешь. Но каждый продвинутый кодер пишет сплайсинг сам
Я просто хотел бы отсплайсиить CreateFile. Ведь сплайсинг позволяет,если я не ошибаюсь, перехватывать функцию и сначала выполнить свлою функцию, а потом вернуть управление настоящей. Поэтому я и спрашивал насчет того нужен ли драйвер. И насколько я понял, если я хочу перехватить MessageBox() к примеру, то это я могу делать и без драйвера
Great ну еще бы, я конечно не кодю в ядре, но очевидно предположить что все что можно сделать в RING3 можно в RING0 хотя бы потому что реально все равно дергается ядро (исключение бывают, в основном в функциях управления окнами).
вообщя я себе давно написал функции hook, unhook с дизасемблером длин (от рема) и по этому поводу не парюсь, чего и вам желаю
ну работать стабильно это будет не всегда чужие дизассемлеры длин это хорошо но можно сделать и проще и стабильнее
o14189 ам, ты про что? где не будет работать? я вот не представляю ситуации если прав достаточно А как проще и стабильнее, "мой" способ по сути вообще перехватывает 1 раз, дальше уже _безопасно_ работает
Great да не все так уж страшно, 1 раз можно, причем я обычно это делаю еще до старта основного потока приложения. Хотя я вообще себе кроме как по int3 не представляю одно байтовый перехват...
Сплайсинг в любой форме это зло; хотя и максимально быстро позволяет обработать перехват. Однобайтные инструкции - это привилегированные инструкции(cli, hlt etc.), которые вызывают в юзермоде сепшены, в ядре - Int 3. Главная проблема в сплайсинге - выполнить его атомарно, изза чего просто изменение кода с большой вероятностью приведёт к краху, если в юзермоде это не так критично, то в ядре этого нельзя допустить, поэтому без перечисления потоков и их контекстов не обойтись.