Как защитить DLL от выгрузки через FreeLibrary
Небольшой трюк, позволяющий защитить вашу DLL от выгрузки из процесса при помощи функции FreeLibrary. Например, если процесс обнаружил инжект посторонней библиотеки в свое адресное пространство и пытается от нее избавиться.Сперва немного теории. При вызове функции LoadLibrary увеличивается на единицу внутренний счетчик загрузок, но повторной загрузки библиотеки не выполняется. При вызове функции FreeLibrary, соответственно, этот счетчик уменьшается. При достижении счетчиком нулевого значения библиотека выгружается из памяти. На этом основан метод "защиты" от выгрузки, когда в самой DLL несколько раз дополнительно вызывается LoadLibrary, тем самым увеличивая счетчик загрузок. Но ведь никто не мешает вызвать FreeLibrary сто или сто тысяч раз подряд, пока счетчик не будет обнулен. Поэтому я взял слово "защита" в кавычки.
Правильным способом защититься от выгрузки DLL из целевого процесса будет использование функции GetModuleHandleEx с флагом GET_MODULE_HANDLE_EX_FLAG_PIN. Функция должна вызываться из DLL. В этом случае загруженный модуль будет оставаться в памяти вплоть до завершения основного процесса, независимо от того, сколько раз будет вызвана функция FreeLibrary.
Просмотров: 333 | Комментариев: 2
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(04.06.2024 в 16:38):
Фигасе, мне уже задачи ставят.
Василий
(04.06.2024 в 16:35):
ManHunter, новенькое пора уж что не будь в блоге оформить... К примеру в сети попался исход код cpl - поглядите, может в своём варианте оформите, может кого и заинтересует подобное! https://www.mediafire.com/file...ll+.asm/file
Добавить комментарий
Заполните форму для добавления комментария