Как защититься от этих 3 техник:
CreateRemoteThread
Вы можете предотвратить первый метод (CreateRemoteThread, который вызывает LoadLibrary), подключив LoadLibrary. В своей ловушке вы проверяете список DLL-имен, которые, как вы знаете, являются частью процесса и которые могут быть загружены, или вы можете проверить список известных DLL, которые вы не хотите загружать.
Когда вы найдете DLL, которую не хотите загружать SetLastError (ERROR_ACCESS_DENIED), затем возвращайте NULL. Я установил последнюю ошибку, чтобы люди, которые пишут код в поисках кода ошибки, получили его. Кажется, это работает, возможно, другой код может быть более подходящим.
Это остановит загрузку DLL.
SetWindowsHookEx
Я думаю, что та же самая техника для блокировки CreateRemoteThread будет работать для SetWindowsHookEx, но только если вы сможете установить свой хук до того, как метод SetWindowsHookEx начнет загружать свой код (как правило, когда первое окно создается в приложении - так рано в его жизни).
Код пещеры
Хорошая техника. Не видел этого раньше. Вы можете защититься от этого, но вам придется подключить точку входа LoadLibrary (не таблицу IAT), так как Code Cave напрямую вызывает LoadLibrary.
Как прокомментировал автор статьи, существует множество способов, которыми вы можете подвергнуться нападению, и вам, вероятно, будет трудно победить их всех. Но часто вам нужно защищаться только от определенных загрузок DLL (например, от конкретной сторонней DLL, которая несовместима с вашим программным обеспечением, поскольку сторонняя DLL не была написана должным образом, чтобы учесть тот факт, что может также присутствовать другая ловушка, поэтому вы блокируете это с загрузки).