Собрался писать античит но столкнулся с некой сложностью - взял чит который не лезет в сеть а требует загрузить игру - либо если она уже загружена указать пид. Сложность в том что немогу сооеринтироваться что он делает в том процессе (понятно что перехватывает API и передает пакеты). Сам чит представляет собой подменщика пакетов как уже известно в теле игры - восможно каким либо образом предотвратить Inject его кода не зная API который он использует ? тоесть защитить процесс "полностью" от инжекта или перехвата ? Прошу помощи на вашем форуме (имхо больше негде). Заранее благодарен.
Чит не драйвер но после анализа OllyDbg заругался на то что он упакован и к томуже еще и Self-Extractor - файлмоном ничего не обнаружил тоже.
Не исключено и то что он перехватывает функцию игры для отправки данных И \ ИЛИ инжектит свой код на исполнение.
Ну если перехват к примеру через сплайсинг, то можно попробовать просто сверять первые байты функций с оригиналом.
Дело в том что эти функции неизвестны и их ни коим образом не получается выдрать - разработчик не хочет делиться кодами. Как раз это и требуется - сплайсинг CreateRemoteThread, ZwWriteVirtualMemory и тд...но как реализовать незнаю. Сам новичок в таких делах. Знаю только С++ и немного Asm. Прошу если возможно разжевать немножко.
Прошу выложить если у кого есть примеры по сплайсингу в виде *.Exe *.Dll С++\Delphi для анти-перехвата - буду благодарен.
Лучший спопоб обхода перехвата это копирование всего кода с перестройкой из модуля на диске(можно назвать морфингом) в буфер и исполнение его там. Для начала его исполнения часто достаточно подмены указателей на него либо самотрессировка.
Мапим модуль в память с диска. Выполняем морфинг необходимой процедуры в этой проекции. Гдето в памяти будет её копия. Далее например приложение динамически определяет адреса функций в модуле и сохраняет их в глобальных переменных, из которых затем вызывает необходимые функции. Заменяем в этих переменных указатели на тот код, тоесть иполняться в обход перехвата. Подобную технику насколько помню использовал дроппер рустока, только в более простом оформлении.
Короче, человек полный 0 в кодинге, просит дать готовое решение. Он сам не удосужился даже посмотреть, как делается сплайсинг. О чем тут можно говорить? Даешь деньги, получаешь код. Или думай сам. По крайней мере научись пользоваться поиском. А то твое "суть понятна"... да нихрена тебе непонятно. Прочитать файл с диска в память и там исполнить - что тут непонятно? Очередной халявщик.
Clerk А Вы учитываете случай, когда чит сам, например, по таймеру восстанавливает IAT (если я правильно понял, Вы IAT назвали "глобальными переменными приложения" для общего случая)? Кроме того не факт, что чит сплайсит функции системных dll, а не какие-то внутренние функции приложения по фиксированным адресам. Как тогда мапить основной модуль приложения без релоков? ИМХО проще конкретно глянуть, что делает чит, а не писать мегаантичит для общего случая. Например, если чит использует WriteProcessMemory для сплайсинга, то просто самому перехватить WriteProcessMemory. MSoft Вы в последнее время слишком вспыльчивы. ИМХО в общем случае задача нетривиальна.
да это на меня так школьные каникулы и наплыв халявщиков действует в общем случае да. НО! Мое недовольство было вызвано тем, что ТСу сказали, что надо сделать (пусть даже предложили не универсальный и "не мощный" способ, но тем не менее его предложили) - и это был не самый сложный вариант. Всего-то прочитать модуль в память или восстановить импорт с диска - но ТС даже с этим простым вариантом не захотел думать. Я злюсь не потому, что никто не выложил универсальный метод защиты или ТС не додумался, как все сделать. А потому, что ТС не может реализовать даже элементарнейший код, который ему сказали - он требует готовую реализацию даже палец о палец не ударив.
Clerk Для морфинга не имеют. Но Вы ведь предлагали мапить dll, а не основной модуль приложения. Если же просто морфить код приложения, то после действия чита игра либо с большой вероятностью упадёт либо если читу всё-таки повезёт, он таки выставит свой перехват. Не самый лучший вариант. Ну да, но... Т.е. ИМХО проще таки посоветовать разобраться в том, что именно сплайсит (если вообще сплайсит) чит (начать хотя бы с того, что под Olly поставить брэйкпоинт на ZwWriteVirtualMemory и ZwProtectVirtualMemory). А там сразу и видно будет, как он это делает. Панацеи не будет никогда, а решение для частного случая обычно не очень сложное. MSoft По-моему этот вариант не предлагали. По крайней мере Clerk предложил пускать приложение в обход сплайсинга, а не восстанавливать модифицированный код. Да и для случая простого сплайса через WriteProcessMemory даже этот вариант не самый простой.
Я предлагал этот вариант. Ну я предлагал сверять с диском, но можно и восстанавливать - в чем сложность? Ведь он даже это не попробовал
Лень писать одно и тоже по сто раз, вобщем вот http://cracklab.ru/f/index.php?action=vthread&forum=6&topic=13602 Исходный код, но очень сильно усложнён, так как для использования немного не в обычных приложениях http://files.virustech.org/indy/Code/PsProtectImage/ l_inc Вот экзе тестовый http://files.virustech.org/indy/Code/PsProtectImage/sc.exe защищает образ kernel32.dll(xpsp3 работает, в остальных не проверялось). Запись в пределах секций кода после отработки невозможна из юзермода, NtWriteVirtualMemory вернёт ошибку, изменить атрибуты страниц не получится. IAT там тоже кстати.