Обратил внимание что многие малварки перехватывают NtCreateThread для внедрения в созданный процесс. Тут же возник вопрос, зачем перехватывать NtCreateThread, если можно перехватить NtResumeThread и по хендлу определить PID? Ну и если этот PID отличается от текущего процесса внедрить перехватчик. Проясните пожалста, зачем еще нужен перехват NtCreateThread?
Clyde Что значит "ещё"? Вполне достаточно перехватить только NtCreateThread. Преимущества перехвата NtCreateThread по сравнению с NtResumeThread очевидны: при перехвате NtCreateThread перехватчик получает беспалевный доступ к огромной куче информации, включая хэндл процесса и полный контекст потока, что является чуть ли не решающим фактором в беспалевности распространения перехватов на все процессы. К тому же по большому счёту не факт, что все процессы будут пользоваться стандартным загрузчиком. Соответственно первичный поток не обязан создаваться в состоянии suspended.
l_inc под словaми "зачем еще" я имел ввиду "в каких еще целях" Альтернативный загрузчик - веский аргумент, спасибо
Clyde ИМХО беспалевность — более веский аргумент. Ну это дело вкуса. Лично меня не вдохновляло, когда касперски на пару с аутпостом при каждом новом процессе орёт, что миру пришёл конец. Это надо было только при загрузке системы несколько сотен раз клацнуть, что всё в порядке, не забыв вырубить колонки, спасая нервы. А уж если не для себя пишете, то "пользователю" Вашего перехватчика вопли антивируса уж точно на пользу не пойдут.
l_inc но твой загрузчик будет загружен системным, а значит задача инжекта выполнена.. что я не учел??
deLight Загрузчик будет загружен системным? В каком смысле? Вот, предположим, у меня есть навороченный текстовый редактор, способный создавать новые процессы посредством собственного загрузчика, который не вызывает NtResumeThread. Соответственно перехватчик, основанный только на NtResumeThread, не распространится на дочерние процессы моего текстового редактора.