Перехват API

Тема в разделе "WASM.BEGINNERS", создана пользователем Wereww, 13 июн 2009.

  1. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Собрался писать античит но столкнулся с некой сложностью - взял чит который не лезет в сеть а требует загрузить игру - либо если она уже загружена указать пид. Сложность в том что немогу сооеринтироваться что он делает в том процессе (понятно что перехватывает API и передает пакеты). Сам чит представляет собой подменщика пакетов как уже известно в теле игры - восможно каким либо образом предотвратить Inject его кода не зная API который он использует ? тоесть защитить процесс "полностью" от инжекта или перехвата ?
    Прошу помощи на вашем форуме (имхо больше негде).
    Заранее благодарен.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    API нужного функционала ограниченное количество.
    чит - драйвер/нет?
     
  3. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Чит не драйвер но после анализа OllyDbg заругался на то что он упакован и к томуже еще и Self-Extractor - файлмоном ничего не обнаружил тоже.
     
  4. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Не исключено и то что он перехватывает функцию игры для отправки данных И \ ИЛИ инжектит свой код на исполнение.
     
  5. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Ну если перехват к примеру через сплайсинг, то можно попробовать просто сверять первые байты функций с оригиналом.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    http://www.wasm.ru/forum/viewtopic.php?pid=323044#p323044
     
  7. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Дело в том что эти функции неизвестны и их ни коим образом не получается выдрать - разработчик не хочет делиться кодами.

    Как раз это и требуется - сплайсинг CreateRemoteThread, ZwWriteVirtualMemory и тд...но как реализовать незнаю. Сам новичок в таких делах. Знаю только С++ и немного Asm.

    Прошу если возможно разжевать немножко.
     
  8. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Прошу выложить если у кого есть примеры по сплайсингу в виде *.Exe *.Dll С++\Delphi для анти-перехвата - буду благодарен.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Лучший спопоб обхода перехвата это копирование всего кода с перестройкой из модуля на диске(можно назвать морфингом) в буфер и исполнение его там. Для начала его исполнения часто достаточно подмены указателей на него либо самотрессировка.
     
  10. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Да , это хорошо , но как это будет выглядеть на практике ?
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Мапим модуль в память с диска. Выполняем морфинг необходимой процедуры в этой проекции. Гдето в памяти будет её копия. Далее например приложение динамически определяет адреса функций в модуле и сохраняет их в глобальных переменных, из которых затем вызывает необходимые функции. Заменяем в этих переменных указатели на тот код, тоесть иполняться в обход перехвата. Подобную технику насколько помню использовал дроппер рустока, только в более простом оформлении.
     
  12. Wereww

    Wereww Дмитрий

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    55
    Суть понятна но как это будет приблизительно выглядеть в эквиваленте кода ? :/
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Кода нет, как раз дмаю как таблицу ветвлений корректно обработать. Если повезёт мо может код вылажу.
     
  14. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Короче, человек полный 0 в кодинге, просит дать готовое решение. Он сам не удосужился даже посмотреть, как делается сплайсинг. О чем тут можно говорить? Даешь деньги, получаешь код. Или думай сам. По крайней мере научись пользоваться поиском. А то твое "суть понятна"... да нихрена тебе непонятно. Прочитать файл с диска в память и там исполнить - что тут непонятно? Очередной халявщик.
     
  15. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    А Вы учитываете случай, когда чит сам, например, по таймеру восстанавливает IAT (если я правильно понял, Вы IAT назвали "глобальными переменными приложения" для общего случая)? Кроме того не факт, что чит сплайсит функции системных dll, а не какие-то внутренние функции приложения по фиксированным адресам. Как тогда мапить основной модуль приложения без релоков?
    ИМХО проще конкретно глянуть, что делает чит, а не писать мегаантичит для общего случая. Например, если чит использует WriteProcessMemory для сплайсинга, то просто самому перехватить WriteProcessMemory.
    MSoft
    Вы в последнее время слишком вспыльчивы. :) ИМХО в общем случае задача нетривиальна.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    l_inc
    Для морфинга релоки не имеют никакого значения. Вобще ведь нужно знать что защищать.
     
  17. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    да это на меня так школьные каникулы и наплыв халявщиков действует :)
    в общем случае да. НО! Мое недовольство было вызвано тем, что ТСу сказали, что надо сделать (пусть даже предложили не универсальный и "не мощный" способ, но тем не менее его предложили) - и это был не самый сложный вариант. Всего-то прочитать модуль в память или восстановить импорт с диска - но ТС даже с этим простым вариантом не захотел думать.
    Я злюсь не потому, что никто не выложил универсальный метод защиты или ТС не додумался, как все сделать. А потому, что ТС не может реализовать даже элементарнейший код, который ему сказали - он требует готовую реализацию даже палец о палец не ударив.
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Для морфинга не имеют. Но Вы ведь предлагали мапить dll, а не основной модуль приложения. Если же просто морфить код приложения, то после действия чита игра либо с большой вероятностью упадёт либо если читу всё-таки повезёт, он таки выставит свой перехват. Не самый лучший вариант.
    Ну да, но...
    :)
    Т.е. ИМХО проще таки посоветовать разобраться в том, что именно сплайсит (если вообще сплайсит) чит (начать хотя бы с того, что под Olly поставить брэйкпоинт на ZwWriteVirtualMemory и ZwProtectVirtualMemory). А там сразу и видно будет, как он это делает. Панацеи не будет никогда, а решение для частного случая обычно не очень сложное.
    MSoft
    По-моему этот вариант не предлагали. :) По крайней мере Clerk предложил пускать приложение в обход сплайсинга, а не восстанавливать модифицированный код. Да и для случая простого сплайса через WriteProcessMemory даже этот вариант не самый простой.
     
  19. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Я предлагал этот вариант. Ну я предлагал сверять с диском, но можно и восстанавливать - в чем сложность? Ведь он даже это не попробовал ;)
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Лень писать одно и тоже по сто раз, вобщем вот 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 там тоже кстати.