Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > защита процесса |
Автор: Kasiro 7.5.2013, 18:48 |
Всем привет, интересует как можно защитить процесс от внедрения в него чужого кода конкретно речь идет о hl2.exe (cs source) и о защите от читов на одном из форуме нашел несколько способов, не знаю на сколько они рабочие, кроме названий никакой дополнительный инфы не было 1) Можно проверять целостность машинного кода, и наличие лишнего кода 2) Можно проверять лишние DLL 3) Можно проверять лишние потоки 4) Можно проверять целостность машинного кода всех DLL 5) Можно проверять наличие внедренной программы в куче И другой вариант, ставить хуки на фукнции OpenProcess(ZwOpenProcess) DuplicateHandle(ZwDuplicateObject) WriteProcessMemory(ZwWriteVirtualMemory) ReadProcessMemory(ZwReadVirtualMemory) подскажите какой из методов лучше, либо может быть их совокупность и еще вопрос, сейчас в читерстве активно используется мануал маппинг для загрузки дллок, есть ли способы защиты от этого? PS: ссылки на статьи и код по теме горячо приветствуются |
Автор: Dem_max 8.5.2013, 06:28 |
Все методы использовать разом |
Автор: Kasiro 8.5.2013, 18:07 |
Dem_max, если все сразу тормозов не должно быть? может есть примеры кода по любому из методов? сам искал ничего не нашел толкового кроме перехват функций из ring3 меня больше всего интересует как реализовать первые 5 методов |
Автор: DarthTon 13.5.2013, 12:48 | ||||||
Самым действенным методом было бы сделать процесс защищенным, изменив бит в его структуре EPROCESS из ring 0. Это запретит любой доступ к процессу с правами отличными от PROCESS_QUERY_LIMITED_INFORMATION и PROCESS_TERMINATE. Однако такой драйвер вряд ли пройдет проверку Microsoft.
Можно перехватить LdrLoadDll и просто не давать лишним длл загружаться. От мануал маппинга не спасет соответственно.
Обычно код внедряется не в кучу, а в новую область выделенную при помощи VirtualAlloc. Но проверить хип на всякий случай тоже не помешает ![]()
Если есть 100% гарантия что весь код всегда должен исполнятся в областях памяти принадлежащих PE файлам, а так же DEP включен для процесса, то можно искать области памяти с флагом EXECUTABLE. Но Вы так же должны быть уверены что функции для работы с памятью (VirtualQuery, NtQueryVirtualMemory и т.п.) не перехвачены. Ещё можно смотреть не исполняется ли какой-нибудь поток в области памяти не принадлежащей ни одному из образов. Или перехватить создание потока и смотреть на адрес стартовой функции потока. P.S. С таким вопросом я бы порекомендовал Вам заглянуть на форум wasm.ru или gamedeception.net. |
Автор: Kasiro 7.7.2013, 14:04 |
DarthTon, спасибо попробую:) |