Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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.

Цитата

Можно проверять лишние DLL

Можно перехватить LdrLoadDll и просто не давать лишним длл загружаться. От мануал маппинга не спасет соответственно.

Цитата

5) Можно проверять наличие внедренной программы в куче

Обычно код внедряется не в кучу, а в новую область выделенную при помощи VirtualAlloc. Но проверить хип на всякий случай тоже не помешает smile 

Цитата

и еще вопрос, сейчас в читерстве активно используется мануал маппинг для загрузки дллок, есть ли способы защиты от этого?


Если есть 100% гарантия что весь код всегда должен исполнятся в областях памяти принадлежащих PE файлам, а так же DEP включен для процесса, то можно искать области памяти с флагом EXECUTABLE. Но Вы так же должны быть уверены что функции для работы с памятью (VirtualQuery, NtQueryVirtualMemory и т.п.) не перехвачены.
Ещё можно смотреть не исполняется ли какой-нибудь поток в области памяти не принадлежащей ни одному из образов. Или перехватить создание потока и смотреть на адрес стартовой функции потока.

P.S. С таким вопросом я бы порекомендовал Вам заглянуть на форум wasm.ru или gamedeception.net.

Автор: Kasiro 7.7.2013, 14:04
DarthTon, спасибо попробую:)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)