Кто-нибудь пробовал делать свой античит к игре?

Тема в разделе "WASM.WIN32", создана пользователем Drakon, 1 мар 2006.

  1. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Я вот тут взялся сделать защиту от читов к популярной стрелялке Counter-Strike 1.6. Ибо сервак держу, а читеры заколустали :dntknw:

    Так вот хочу выяснить у опытных людей, как лучше подойти к решению проблемы.

    Для начала опишу её:

    Большинство читов представляют собой Ring3 DLL-Injector с каким-нить мудрёным получением хендла процесса. Иногда процесс ищётся просто Toolhelp функциями (совпадение по имение "hl.exe"). Ну и собственно DLL-это чит. Хотя видел я недавно жёсткий чит от китайцев который представляет собой просто exe-шник, причём очень маленький.



    Так вот нужно не дать людям использовать эти программы вместе с игрой. Как лучше организовать?



    Я сделал вариант античита, но получилось коряво :dntknw: Могу выложить если надо.
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Бесполизняк, можно сэмулировать работу анти чита, а к примеру координаты противников всеравно клиенту идут.
     
  3. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Может попробывать контроль компонентов, что использует Аутпост - при модификации более 16 байт он заблокирует доступ программы к сети, равно как и при подгрузке "незнакомой" DLL. Насколько мне известно он использует для этого свой сервис.
     
  4. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    SPA, я согласен что можно сэмулировать. Ко всем античитам для Counter-Strike уже давно сделали эмуляторы. Но после каждого их апдейта эмуляторы делаются заного. Мой игровой сервер доступен пока что только локально. Да и если не распространять античит, то его оочень мало кто похакает. Например тот кривой, что я щас сделал никто даже не тронул. =)



    alpet, Интересно... И мне всех игроков просить установить коммерческую программу Аутпост?



    P. S.

    Опишу как работает тот, что щас есть: запускается драйвер который блокирует вызовы VirtualProtect и CreateRemoteThread (или чего-то такое... точно не помню) на заданный процесс. Плюс в процессе самой игры из функции VirtualProtect (Ex) стырены начальные байты и поставлен переход на мою функцию, которая соответственно блокирует эти вызовы если там используются права на запись. Это помогает от всех читов, которые щас есть. Но только вот слабовато это и криво реализовано :dntknw: Поэтому и прошу спецов подсказать интересную систему.
     
  5. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Drakon

    Нет конечно, но создать подобный механизм наверное можно (перехват подгрузки DLL, и модификации памяти by WriteProcessMemory). Кстати еще вот что - игроки со своих компов играют, или же это дело в клубе происходит? В последнем случае можно еще попытаться на уровне прав разграничение сделать - CS запускать от админа, а игрокам давать работать как обычным пользователям - OpenProcess и прочие функции при этом работать у них не будут.
     
  6. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    alpet, я и спрашиваю как лучше реализовать и чего использовать. =) Своим умом ничего хорошего не придумал :dntknw:

    Насчёт второго вопроса: всё происходит в большой локальной сети с пиринговыми сетками и в будущем возможно с инетом.
     
  7. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    делал нечто подобное. пока работает на ultima online

    (realworld.mcn.ru) и WorldOfWarcraft (warcraftworld.ru)

    сервера - pol и wowemu. теоретически будет работать с любой прогой которая юзает TCP (под UDP придется децл доделать но тоже можно) при отладке успешно работал apache (я на нем серверную DLL тестировал) . посмотреть подробнее можно на shardsecurity.com
     
  8. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    kropalik, так поделись опытом!

    Посмотрел подробнее... Где скачать не нашёл. Да и исходников нету =) Без возможности доработки это не интересно.
     
  9. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    >> Посмотрел подробнее... Где скачать не нашёл

    хочешь посмотреть как работает - http://shardsecurity.com/files/rw_launcher.dll и еще клиент 2.exe http://realworld.mcn.ru/test/2.rar (работать небудет без остальных файлов ~600M ссылка на сайте realworld). еще можешь поюзать http://warcraftworld.ru/wow180.rar - клиент worldofwarcraft только патченый exe сам клиент 4Gb

    >> Да и исходников нету =)

    ага чтоб побыстрее эмуль написали... все равно наверно расковыряют, но хоть новой версией пофиксить можно будет.

    >> Без возможности доработки это не интересно.

    доработка активно происходит. только проблема в тестировании - геймеры иногда нормально crashdump прислать не могут... (отправить лог на e-mail) только в форумах флуд разводят что ланчер глючит...



    в общем если интересно - могу рассказать как прикрутить к CounterStrike (придется написать dll для сервера тк та которая есть работает с tcp). клиентскую часть я исправлю если понадобится (вообще там плагины предусмотрены). сервер авторизации изменений скорее всего не потребует.

    web-интерфейс тоже (только он недоделан тк некому).
     
  10. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    kropalik, я в этом силён. Если надо - могу сделать. За исходники. =) Интересует?

    А насчёт твоего античита - есть аналог, ssClient. Почти тоже, что и твой делает и для КСа. =)



    Короче мне проще свой доделать. А тут столько знающего народа и никто ничего не предлагает :dntknw: Завтра опишу тогда подробно и возможные варианты.
     
  11. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    вот на всякий случай скрины web-интерфейса...

    [​IMG] 262776166__TEMP.rar
     
  12. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    >> Интересует?

    да вообщето интерисует. я подумаю (вернее надо спросить остальных участников проекта)

    >> А тут столько знающего народа и никто ничего

    >> не предлагает

    а тут предлагать особо нечего. ибо ТЗ на античит невыполнимо. из достаточно простых соображений - юзерь может запустить наш код с такими правами с какими захочет. а требовать админа (чтоб например ring0 поюзать) без мазы тк одно из требований что должно работать везде например в интернет-кафе.

    вообще я считаю что возможность читерства - это ошибка в игровом сервере и исправлять надо его а не писать бесполезный и глючный софт.
     
  13. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Эх.. Я тут вошёл в праздничное состояние и долго пил и отдыхал. ПОэтому произошёл такой перерыв.

    Так вот нужно решать двепроблемы:

    1. Я чего-то незнаю или ring0 действительно никак не получить без прав админа?

    2. Нужно сделать какой-то универсальный метод чтобы люди не могли коннектиться к серверу игры, если у них не запущен античит.

    3. Нужно придумать какой-нибудь более-менее эффективный метод защиты. У меня есть такое предложение по работе античита:

    1) Игрок запускает античит

    2) Античит делает список текущий процессов.

    2.1) Игрок вводит ИП сервера где стоит сервер игры и нажимает кнопку "коннект". Производится первичная верификация и клиент получает ключ.

    3) Античит ждёт запуска нужного процесса. Кстати как узнать что процесс действительно нужный?

    4) Когда нужный процесс найден, античит сверяет со списком процессов в п. 2. Если его там нету, то к процессу применяется античит.

    5) Производится сверка секций помеченных как выполняемые с оригиналом на диске. Это эффективно? Есть где-нить исходники которые это делают?

    6) Производится перехват CreateRemoteThread на уровне ядра.



    При коннекте к выбранному серверу (уже игровому а не античиту) сначала посалыется ключ полученный в п. 2.1, и только потом идёт игровой трафик.
     
  14. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    1. чтобы корректно работало на разных версиях и

    сервиспаках - нет (по крайней мере документированным

    способом). в общем я решил отказаться тк куча геймеров

    обитает в интернет-кафе где админа не дадут так просто.

    2. у меня это сделано так:

    к игровому серверу подгружается моя DLL которая

    перехватывает WSAAccept. клиент когда коннектится

    должен передать ключ, который получает от сервера

    авторизации. если ключ неправильный - closesocket.

    кроме того любого клиента дисконнектит по запросу

    от сервера авторизации (если чит запущен после

    захода в игру)

    3. мне кажется правильней чтобы античит находился

    в адресном пространстве самой игры. преимущества:

    не надо запускать несколько процессов и пытаться

    их синхронизировать (выяснять какой из них нужный)

    и проще перехватывать API типа connect() и send().

    5) не стоит. я пробовал - в результате куча

    вполне нормальных геймеров оказываются читерами.

    (у них обычно куча всякого spyware троянов и вирусов,

    а также некоторые firewall-ы тоже модифицируют код

    или IAT).

    В ShardSecurity сделана база (сейчас в ней 1500 шт)

    со всякими DLL и их CRC. примерно 1-2 в день новых

    появляется (с неизвестной dll тоже не пускает в игру)



    кроме того предусмотрена привязка игрового аккаунта

    к форумному. то есть чтобы зайти в игру надо сначала

    зарегистрироваться на форуме. а в случае читерства

    можно просто забанить по имени юзера.
     
  15. LAngel

    LAngel Lost Angel

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    2
    Адрес:
    Ульяновск
    :) Привет колегам, можно поделиться опытом. Пишу античит под WoW
     
  16. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    kropalik

    Помню тебя когда ты к нам на ФХД о ней рассказывал.... много времени прошло ... надо будет глянуть на неё более подробно...
     
  17. kropalik

    kropalik New Member

    Публикаций:
    0
    Регистрация:
    27 апр 2005
    Сообщения:
    155
    Адрес:
    msk
    LAngel - случайно не автор lacd_server + lacd_client ?
     
  18. LAngel

    LAngel Lost Angel

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    2
    Адрес:
    Ульяновск
    Он самый :)