Проблема читов в онлайн-играх / Хабр
Большинство крупных многопользовательских игр рано или поздно сталкиваются с тем, что не все пользователи играют честно. В нашем шутере Warface в какой-то момент это стало ощущаться особенно сильно. Для борьбы с читерами мы используем целый комплекс решений. Одним из компонентов этого комплекса является наша внутренняя разработка под названием MRAC (Mail.Ru AntiCheat). После ее внедрения мы добились хороших результатов: среднее количество ежедневно улетающих в бан читерских аккаунтов упало с 17000 в начале года до 1500 сейчас, при том, что количество жалоб от пользователей на читеров существенно уменьшилось. На выявление подозрительной активности и блокировку аккаунта сейчас уходит примерно 5 минут, вместо прежних 20. Сейчас система распознает и реагирует на более чем 200 сигнатур читерского ПО и постоянно совершенствуется.
У каждой игры своя специфика, и для эффективной борьбы с читерами необходимо разбираться во внутренних особенностях конкретной игры и приемах, используемых в читах.
Думаю, многие знают, что такое «IDDQD». На протяжении всей истории компьютерных игр разработчики встраивают в свои детища подобные коды, именуемые читами. Читы позволяют становиться бессмертным, получать бесконечные патроны, ресурсы и прочее. Первичное назначение таких кодов – тестирование игры. Помимо встроенных в игру читов всегда были любители самостоятельно подправить что-нибудь в игре с той же целью – стать «бессмертным». Все это хорошо в однопользовательских играх, когда человек играет со своим компьютером и никому не мешает. В многопользовательских онлайн-играх читерство уже является проблемой, способной загубить всю игру.
Конечно, никаких встроенных разработчиками читов в онлайн-играх нет. Но практически для любой онлайн-игры существуют читы в виде отдельных приложений. Как правило, читы при запуске вносят изменения в работающий клиент игры. Иногда изменения вносятся прямо в файлы клиента на диске.
Одной из разновидностей читов являются боты, которые сами управляют персонажем, автоматизируя рутинные действия. Казалось бы, в таких ботах нет ничего страшного. Но на самом деле есть. Если человек спит, а его персонаж сам убивает овечек на поле в автоматическом режиме, получая за это игровой опыт, то другие игроки будут расстроены таким положением вещей. Некоторые из таких ботов позволяют писать целые скрипты для управления персонажем. Тут уже возможности ограничиваются только фантазией ботовода.
Мотивы читеров/ботоводов:
- «Надрать всем зад» для самоутверждения. Пусть и нечестно.
- Заработать денег. Для этого нужно быстрее прокачаться, собрать ресурсы, шмотки и т.п., чтобы потом продать это за реальные деньги.
Основной мотив авторов читов/ботов — заработать денег. Наиболее качественные читы/боты продаются по подписке за реальные деньги. Есть и бесплатные читы, но они обычно начинены adware и всякими полу-вирусами, что опять же, призвано принести деньги.
Давайте рассмотрим более подробно, что и как делают читы на примере многопользовательского онлайн-шутера Warface.
Любой чит так или иначе взаимодействует с клиентом игры. Для этого автору чита нужно иметь представление о внутреннем устройстве клиента. Наиболее профессиональные читоделы получают такое представление, в том числе, путем реверс-инжиниринга — находят нужные переменные и восстанавливают интерфейсы классов. После чего методы классов можно вызывать в своих интересах. Внутренняя структура классов в клиенте изменяется крайне медленно на протяжении жизни игры. Через какое-то время эта информация попадает уже в гораздо больший круг менее квалифицированных читоделов и тогда разнообразие идентичных по функциональности читов увеличивается на порядок.
ESP (Extrasensory perception) – разновидность читов, способных показывать дополнительную информацию о противниках в игре. К сожалению, клиент игры знает о расположении всех противников в определенном радиусе от вас, даже если они за стеной и их не видно. В шутере действия развиваются довольно быстро и если клиент будет получать от сервера информацию о противнике только когда он попал в поле видимости, то это заведомо приведет к лагам из-за сетевых задержек. Чит получает информацию о противниках через внутренние интерфейсы классов клиента и выводит ее прямо поверх игрового изображения. Это, как минимум, расположение противника в пространстве и расстояние до него.
Aimbot – разновидность читов для автоматического прицеливания. Вам остается только бегать и спускать курок, а прицел сам по себе попадает на ближайшего противника. Можно даже выбрать часть тела, в которую нужно целиться. Расположение противника в пространстве чит получает также через внутренние классы клиента. Далее для выполнения автоматической наводки возможны варианты. Либо чит напрямую вызывает нужные методы в клиенте для поворота вашего персонажа (прицел всегда в центре вашего взгляда). Либо посылает клиенту сообщения от имени мыши для этой же цели.
Autoshot – автоматический выстрел в тот момент, когда противник оказывается в прицеле. Такой чит работает аналогично aimbot’у — информацию о расположении противника получает через внутренние классы клиента и посылает сообщение от мыши для выстрела. Часто autoshot и aimbot совмещают вместе. Тогда вам остается просто бегать, а прицеливание и стрельба выполняются читом автоматически.
Recoil – отключает отдачу при выстреле. Такие читы, как правило, просто патчат код клиента игры в памяти, отвечающий за отдачу. В результате, стрелять становится сильно проще. Кроме отключения отдачи существует еще масса читов, отключающих различные элементы и упрощающие игру. Например, отключение разброса при выстреле или отключение эффекта работы светошумовой гранаты. Некоторые из таких читов для достижения своей цели модифицируют не код, а переменные в памяти клиента.
Безусловно, это не полный список существующих читов, но уже можно составить перечень механизмов их работы:
- Модификация кода клиента игры в памяти.
- Модификация переменных клиента игры в памяти.
- Вызов методов внутренних классов клиента напрямую.
- Отправка сообщений от имени мыши.
Как же бороться с этим? Конечно, наличие грамотной клиент-серверной архитектуры у игры — это очень важно. Но, к сожалению, это решает не все проблемы. Некоторые элементы геймплея выполняются только на стороне клиента, и сервер никак не может обнаружить факт их отключения. А сообщать клиенту о всех противниках в определенном радиусе от вас сервер вынужден для приемлемой производительности игры.
Первым наиболее действенным способом представляется валидация на сервере действий игрока. Например, если игрок каким-то образом за единицу времени переместился в пространстве дальше, чем позволяет игровая механика, то наверняка это читер (speedhack), и его нужно немедленно кикнуть. Такая валидация перемещений игрока возможна, так как в конечном счете сервер контролирует расположение игроков на карте.
Вторым способом представляется статистический анализ на сервере. Например, если все пули игрока постоянно попадают в голову врагов, то это очень подозрительно. Или не в голову, а просто без промахов. Или, скажем, результаты игрока по итогам матча сильно выбиваются из среднестатистических. Конечно, все это еще не повод для блокировки аккаунта данного игрока.
Еще один способ борьбы – встроенная в игру возможность пожаловаться на читера. Разумеется, по жалобам нужно сначала провести проверку и потом уже решать, блокировать аккаунт или нет. Но как показывает практика, этот способ имеет довольно ограниченное применение. Жалоба на читерство сразу становится элементом манипулирования в игре – люди жалуются на всех подряд, кто играет лучше них. В результате получается огромный поток жалоб, особенно на опытных игроков.
На этом, «красивые» способы защититься от читов заканчиваются, но проблему полностью не решают. Приходится обращаться к навесной защите клиента игры.
Очень болезненным для игры является модификация кода клиента. Например, для отключения некоторых элементов геймплея, воспроизводимых только на стороне клиента. С этим можно бороться путем периодического подсчета и сверки контрольной суммы всего своего кода в памяти. Но эту проверку отключат точно также: изменив код, отвечающий за нее. Тут уже нужна защита кода от анализа (обфускация) и от отладки. Самостоятельная разработка более-менее сильной защиты кода является отдельной сложной задачей, но на рынке есть готовые решения.
Защитить весь код никак нельзя. Обфусцированный код работает в разы медленнее, так как его становится в разы больше. Защищать получается только небольшие участки кода, не критичные к производительности. Например, можно как раз защитить проверку контрольной суммы всего кода. Разумеется, никакая защита кода не является панацеей. Она может лишь усложнить задачу для злоумышленника. Цель в данном случае – сделать так, чтобы стоимость взлома была выше, чем ожидаемая выгода.
Если у кода можно подсчитать его контрольную сумму, то с переменными уже сложнее. Нужно придумывать способы хранить важные с этой точки зрения переменные в зашифрованном или избыточном виде. Причем так, чтобы это не сказалось на производительности. Опять же, это не решит проблему, а лишь затруднит задачу для злоумышленника.
Допустим, от модификации кода и важных переменных клиента мы худо-бедно защитились. Но остаются читы, которым для работы не нужно модифицировать ни код, ни переменные. Например, ESP. По сути, чит берет информацию из памяти клиента и отображает ее. Но для такой функциональности в памяти клиента должен присутствовать код чита. За это уже можно зацепиться и пойти следующими путями:
- Не дать читу попасть в память клиента.
- Попытаться найти чит в памяти клиента.
Первый путь подразумевает запрет на запись в память процесса (WriteProcessMemory) и запрет на создание удаленных потоков (CreateRemoteThread). Обычный способ инжекта своего модуля в процесс как раз требует записать в память и создать свой поток в этом процессе. Учитывая, что чит имеет возможность работать с привилегиями администратора (читер всегда даст их), то в Windows никак нельзя запретить писать в память и создавать потоки в чужих процессах. Можно подумать в сторону создания своего драйвера, который будет блокировать доступ к процессу клиента игры. Но в ядре Windows нет документированных способов фильтровать запись в память чужих процессов (NtWriteVirtualMemory), а использование недокументированных способов сильно усложняется наличием Kernel Patch Protection. Даже если удастся заблокировать запись в свою память, то всегда будут другие дырки: можно внедрить свой код в системные библиотеки на диске.
Предполагается, что модули игры при этом защищены и запакованы защитой кода, и изменить их на диске довольно проблематично.
Второй путь подразумевает нечто похожее на антивирус: искать в памяти клиента заранее известные фрагменты читов. Тут технических препятствий не видно. Однако придется решить задачу оперативного обновления базы читов. Можно пойти дальше и искать фрагменты читов не только в памяти клиента, а во всей системе. Это на случай таких читов, которые работают в собственном процессе, а клиенту патчат код и переменные или шлют сообщения от мышки.
Есть еще третий путь: попробовать найти следы перехвата читом функций Direct3D и считать это угрозой. Чит перехватывает функции D3D для получения управления и отрисовки нужной информации каждый кадр. Но у такого варианта есть существенные проблемы. Есть немало «хорошего» софта, который делает то же самое: перехватывает те же функции D3D для отрисовки своей информации поверх игрового изображения. Например, RaidCall. А задача «отличить хороший софт от плохого» является в общем случае нерешаемой.
Разумеется, весь этот поиск читов и блокировку их внедрения можно отключить путем модификации кода, который за это отвечает. Тут единственный выход — использовать защиту кода. Но как код ни защищай, рано или поздно все-равно сломают. Понятно, что пока приложение работает на компьютере пользователя, ничто не может помешать пользователю изменить данное приложение. Это вопрос лишь времени и оправданности затрат.
Проблему читерства в онлайн-играх не решить только лишь улучшением клиент-серверного взаимодействия. Она комплексная, и бороться с ней тоже нужно комплексными мерами. Как следствие, большинство игр имеют дополнительные специализированные программные средства для защиты от читов (античиты), и от них есть ощутимый толк. Благодаря таким системам читеры портят игровой опыт других игроков в куда меньших масштабах, чем могли бы.
куда подевались читы в видеоиграх — Ретро на DTF
Ушли, но не обещали вернуться.
53 889 просмотров
Пару десятилетий назад читы были неотъемлемой частью геймерской культуры. Почти в каждой игре, на консолях или ПК, была возможность быстрым нажатием комбинации клавиш дать себе бесконечные жизни, разблокировать всё оружие или перейти к меню выбора уровней.
Но сейчас редко в какой игре встретишь подобное: разработчики обычно не оставляют нам возможности так легко обходить игровые трудности. Разбираемся, зачем в старых играх нужны были чит-коды и почему сейчас они практически исчезли.
Каких-то пятнадцать-двадцать лет назад тяжело было себе представить, что однажды игры будут выходить совсем без читов. Тогда ещё не было модерируемого мультиплеера и систем достижений, и использование читов вовсе не казалось чем-то зазорным. Они были у всех на слуху, и знание какого-нибудь особо заковыристого кода в сложной игре сразу же добавляло очков крутости в глазах сверстников.
В разговорах во дворах и школьных коридорах читы обрастали мифами и легендами, зачастую далёкими от реальности: «Я знаю одного парня, у которого брат одноклассника знает код, чтобы можно было играть за Шао Кана в Mortal Kombat 2!»
Некоторые читы были универсальными и «переходили» из одной игры в другую. Самый известный из них — это, конечно же, Konami Code. С его помощью можно было облегчить себе жизнь в целом ряде игр от студии Konami, а впервые он появился в 1986 году в порте Gradius на NES.
Разработчику Кацухисе Хасимото (Kazuhisa Hashimoto) игра показалась слишком сложной, и он ввёл код для того, чтобы на главном меню можно было сразу дать себе усиления. Ну а одно из других применений Konami Code должно быть знакомо многим: именно с его помощью возможно было увеличить число жизней в игре Contra до тридцати.
Код Konami
На Западе подборки читов выпускались в отдельных рубриках в игровых журналах, и для читателей эта часть контента зачастую была не менее важна, чем превью и рецензии. Читы попадали в издания разными способами. Часто читатели сами писали в журналы об обнаруженных ими кодах; однако, бывало, что и редакторы внезапно натыкались на них во время прохождения. Но чаще всего издатели отправляли копию игры на рецензию вместе с подборкой кодов, чтобы у журналистов была возможность облегчить себе прохождение и посмотреть игру со всех сторон.
Скотт Миллер (Scott Miller), основатель Apogee Software, позже переименованной в 3D Realms, в своём интервью порталу Waypoint рассказывает, как это происходило:
Мы всегда договаривались о том, чтобы читы к игре не печатались в одном номере вместе с рецензией. Вместо этого нужно было подождать ещё пару выпусков и только затем публиковать коды, чтобы игра получила ещё одну волну освещения в прессе.
Скотт Миллер, основатель Apogee Software
В России же во времена 8 и 16-битных консолей большей популярностью пользовались сборники читов, печатавшиеся в виде отдельных книжек. В некоторых из них можно было найти не только читы, но и советы по прохождению и поиску игровых секретов.
Уход эпохи NES и Sega Genesis совпал с развитием отечественной игровой прессы: в каждом журнале обязательно имелась рубрика, в которой публиковались свежие коды для игр. Затем эта часть контента перекочевала на CD и DVD-диски, шедшие в комплекте с выпусками журналов: свежая версия электронной базы кодов CheMax была установлена на ПК у каждого уважающего себя геймера. К слову, база эта до сих пор жива и регулярно обновляется.
Тем не менее, с дальнейшим развитием игровой индустрии и геймерской культуры читов в играх становилось всё меньше и меньше, и сейчас они уже воспринимаются как что-то из давно ушедшей эпохи. Для того, чтобы понять, почему это произошло, нужно разобраться, с какой целью читы вообще стали вводиться в игры.
Изначально они служили механизмом тестирования и дебаггинга. Их добавляли в игры для того, чтобы можно было быстро переместиться на нужный уровень или пройти особенно сложное место. Нескольких простых кодов обычно было достаточно для того, чтобы полностью пройти и перепроверить всю игру.
Экран выбора уровней в Sonic the Hedgehog 2. Для того, чтобы на него попасть, нужно было прослушать несколько мелодий в настройках в определённой последовательности
Возникает логичный вопрос: почему же тогда разработчики не убирали читы из игр перед релизом? Ирония в том, что этот механизм дебаггинга мог породить гораздо больше багов, будучи убранным в последний момент. Игры в те времена делались иначе: читы были вшиты глубоко в код игры, и безболезненно удалить их оттуда было крайне проблематично.
Вытаскивать читы из игр в последние дни тестинга было крайне плохой идеей, потому что в них всегда могла возникнуть острая необходимость.
Более того, как только у разработчиков появлялся на руках протестированный и готовый к релизу билд, не было совершенно никакого желания вскрывать снова код и что-то оттуда вытаскивать. Такие манипуляции могли каким-нибудь совершенно неожиданным образом сломать вам всю игру.
Скотт Миллер, основатель Apogee Software
Дэвид Бревик (David Brevik), сооснователь Blizzard North, также делится воспоминаниями о тех временах, когда их компания ещё не успела открыть портал в ад с выходом Diablo в 1996 году, а вместо этого скромно занималась созданием игр для Sega Genesis и Game Boy.
Процесс создания игр тогда сильно отличался от сегодняшнего. Нельзя было выпустить пару патчей после релиза и всё исправить. Разработчики отправляли код производителям консолей, и те либо одобряли его, либо заворачивали обратно, и на этом всё заканчивалось.
Когда все в предрелизной горячке доделывали и тестировали финальные билды, часто бывало такое, что народ попросту забывал вытащить читы из игр.
Дэвид Бревик, сооснователь Blizzard North
Секретный уровень в Diablo II
Сейчас же игры делаются совершенно по-другому. Код пишется на более высокоуровневых языках, что позволяет относительно безболезненно вытаскивать из него читы, если таковые имеются. Игры стали более сложными технически, а значит возросла и сложность контроля качества при их производстве. Однако и инструменты тестинга также сделали огромный шаг вперёд: вместо того чтобы проходить пол-уровня, теперь зачастую достаточно нажать пару кнопок, чтобы игровой персонаж оказался ровно в том самом месте, где в этот момент находилась камера редактора уровней.
Один из пользователей Reddit задался аналогичным вопросом — почему читы исчезли из современных игр — и получил довольно интересный ответ от другого пользователя, представившегося игровым разработчиком.
В оригинальном Doom вы могли напечатать «idclip» и радостно бегать сквозь стены, зная, что не нарушите никакой важной последовательности событий.
А теперь взгляните на любой уровень в том же Half-Life 2: в нём огромное количество триггеров, запускающих всякие интересные вещи вокруг игрока. Просто представьте, насколько сильно всё поломается, если вы будете дёргать за эти «ниточки» в неправильном порядке. Например, придёте к Цитадели, не получив перед этим гравитационную пушку.
Серьёзно, говорю вам как игровой разработчик: за этим не стоит никакого философского или геймдизайнерского замысла. Это сугубо технический вопрос. Читы появились в играх по техническим причинам, и теперь эти причины потеряли свою актуальность. Поэтому и читов в играх больше нет.
ZorbaTHut, пользователь Reddit
Half-Life 2
Свой вклад в исчезновение читов внесло также и распространение мультиплеера. В любой многопользовательской игре, будь то MMORPG, MOBA или онлайн-шутер, их не может быть по определению, ведь это привело бы к дисбалансу и, в конечном итоге, потере у пользователей интереса к игре. С теми, кто всё же пытается получить в игре нечестное преимущество другими способами (например, манипуляциями с игровыми файлами), издатели нещадно борются при помощи банов.
Другой фактор, который оказал влияние на исчезновение читов, — это развитие системы достижений, которые есть теперь в каждой игре. Можно смело сказать, что достижения по определению несовместимы с читами. Ведь если использовать коды для того, чтобы облегчить получение какого-либо ачивмента, теряется сама суть процесса: «достижения» перестают быть достижениями. Именно поэтому, если в игре и есть читы, их использование зачастую отключает возможность получать ачивменты.
В геймерской среде поменялось и само отношение к читингу как таковому. Если раньше знание кодов к играм было признаком крутости и хардкорности, то теперь «читер» — это клеймо позора
Grand Theft Auto V
Есть, конечно, и исключения. Ярчайший пример — серия Grand Theft Auto. В ней читы были всегда и, похоже, никуда уходить не собираются. Видимо, отчасти это дань традициям, а отчасти — сохранение элемента фана. GTA и так позволяет игрокам творить форменный хаос в игре, а использование читов преумножает градус безумия в несколько раз.
Осознавая тот факт, что читы могут принести в игру больше фана и повысить реиграбельность, многие разработчики намеренно добавляют разблокируемые опции, которые отчасти могут заменить собой читы. Скажем, пройдя Uncharted 4, игрок может включить режим с бесконечными патронами. А для тех, кто прошёл DmC: Devil May Cry на уровне сложности «Dante Must Die!», открывается специальный режим Super Dante, дающий бесконечную шкалу Devil Trigger— что, по большому счёту, практически эквивалентно неуязвимости.
DmC: Devil May Cry
Так или иначе, «читы» остаются жить в игровой среде. Где-то — в виде эксплоитов и полезных игроку багов. Где-то — в виде трейнеров и другого внешнего софта, манипулирующего игровыми переменными. Где-то — в виде опций, которые становятся доступны после завершения игры: они призваны разнообразить геймплей и повысить ценность от повторного прохождения.
Однако в том виде, в котором читы присутствовали в играх пару десятилетий назад, мы их уже вряд ли когда-либо увидим. Игровая индустрия слишком сильно изменилась с тех пор: разработчикам они уже не нужны — как, впрочем, и многим игрокам. Скорее, теперь они останутся лишь небольшим ретро-элементом в играх и ностальгическим напоминанием о тех временах, когда каждый знал, как быстро попасть на уровень 4—1 в Super Mario Bros и что скрывается за шифром «IDDQD».
Журнал VK ZZT #1 — Играть онлайн
Управление сохраненными данными
Способ воспроизведения
ZetaArchive.org — DosBox Embed
Zeta создано и поддерживается asie.
Я застрял в мире, в который играю!
В зависимости от того, как вы застряли, вы можете попробовать следующее:
- Недостаток здоровья или других ресурсов: Нажмите «?» чтобы открыть окно читов и использовать соответствующий чит, указанный на странице читов ZZT.
- Игрок окружен и не может двигаться: нажмите «?» чтобы открыть чит-подсказку и введите «ZAP», чтобы стереть четыре плитки, окружающие игрока
- Игрок уничтожен: упс. Надеюсь, ты спас. Это происходит из-за ошибки в работе конвейеров, и ваша игра была заблокирована.
- Я сделал паузу с помощью «P» и не могу снять паузу: единственный способ снять паузу — это двигаться. Если вы сделаете паузу, пока игрок находится в окружении, игра станет программно заблокированной. Вместо этого лучше использовать «Escape» в качестве метода паузы. Имейте в виду, что игра также начинается с паузы, поэтому сохранение в окружении (что легко сделать с играми на основе движка, такими как платформеры ZZT) приведет к сохранению, которое нельзя будет воспроизвести после восстановления.
- Я не знаю, что делать дальше: попробуйте поискать какую-нибудь информацию в обзорах файла или связанных статьях. Небольшое количество файлов имеет полное пошаговое руководство.
Вы также можете использовать средство просмотра файлов, чтобы свободно исследовать мир.
- Мне нужен какой-то предмет, но я не знаю, где его найти: Воспользуйтесь просмотрщиком файлов! Щелкайте по объектам, чтобы просмотреть их код и найти что-то вроде
#if crowbar escape
. Затем используйте поиск ZZT-OOP на вкладке «Мир», чтобы найти#set лом 9.0033, чтобы найти, где предмет приобретается.
- Я нахожусь в запутанном лабиринте проходов, все похожи друг на друга или имею дело с какой-то другой похожей на лабиринт ситуацией. Средство просмотра файлов может облегчить обнаружение некоторых скрытых плиток. На вкладке настроек попробуйте другие методы рендеринга доски, чтобы выявить фальшивые стены или пустоты.
Я нажал "P" для воспроизведения и получил Ошибка DOS !
Это вызвано тем, что ZZT или Зеты неправильно указывают на правильный мир. Чаще всего это происходит с играми, требующими конфигураций Zeta, отличных от стандартных, или миров, имя файла которых не совпадает с тем, которое ZZT хранит в самом файле. Попробуйте нажать «Enter», чтобы закрыть сообщение, нажать «W», чтобы открыть меню мира, и выбрать мир из этого меню, чтобы перезагрузить мир.
Я нажал «E», чтобы отредактировать мир, и получил красную вспышку и Не могу редактировать <МИР>! / Нельзя редактировать сохраненную игру! сообщение!
Мир, который вы пытались редактировать, заблокирован. В редакторе нажмите "?" чтобы открыть чит-подсказку и введите «+DEBUG». Перезагрузите мир с помощью «L», и мир должен открыться нормально. Подробнее о замках
Все эти доски имеют имя ► ФАЙЛ ЗАКРЫТ и отказываются открываться, за исключением одной с именем :c , который останавливает эмуляцию, когда я его открываю!
Мир, который вы редактируете, (также) Суперзаблокирован. Вы можете открыть заблокированные доски, нажав «Escape» вместо «Enter». Плата :c намеренно повреждена и не может быть открыта из редактора ZZT. Подробнее о замках
Текущая конфигурация Zeta: ZZT v3. 2 (Зарегистрированная)
'vk.com межрасовая жена изменяет очерненной азиатке' Поиск
БЕСПЛАТНО - 399 027 ЗОЛОТО - 133 009
- ×
- Mode
Default
- Default
- Hits
- Random
- Period
Ever
- Ever
- Year
- Month
- Length
All
- Все
- 0–10 мин
- 10 мин +
- 10–20 мин
- 20 мин +
- Качество видео
6Все
- Все
- 720p +
- 1080p +
- Просмотренные видео
Показать все
- Show All
- HID
229,5к 100% 4 мин - 1440p
Lapicosita69
Неверная жена по-собачьи принимает сперму глубоко в азиатско-латиноамериканскую киску перед вебкамерой.
3,1 млн 100 % 5 мин - 1080p
Межрасовая неверная жена с большой задницей
206,8к 100% 4 мин - 480p
Настоящая неверная блондинка-жена, межрасовый секс с BBC
631,5к 100% 11 минут - 1080p
Энджи Амазонка
неверная латинская подруга очернена сырая хорошо в собачке
64,2к 98% 1 мин 26 сек - 1080p
Angy Amazon
изменяющая жена жестко очернена BBC в миссионерской позе без презерватива
96,6к 100% 2 мин - 1080p
Hotwife XXX
HotwifeXXX - Межрасовый секс с BBC не помещается внутрь неверной жены-блондинки
358,1к 99% 12 минут - 1080p
Симпатичная и миниатюрная азиатская неверная жена встречает и трахает черного парня в приложении для знакомств
4,9 млн 99% 8мин - 1080p
Hunk Hands
Жена просто хотела массажа (тогда ЭТО происходит!) Неверную азиатку трахали пальцами и шлепали, пока она не кончила ВЕЗДЕ! »»Узнай ПРОСТОЙ способ довести ЛЮБУЮ девушку до СКВИРТНОГО ОРГАЗМА! Посмотрите мой видеоурок сейчас.
.. БЕСПЛАТНО! Перейти на → HunkHands.com
4,2 млн 100 % 43мин - 1080p
Злой Амазон
машины проезжают мимо и моя неверная жена сосет и трахается с черным парнем снаружи
406,3к 100% 3мин - 1080p
Энжи Амазонка
Кремпай куколда в межрасовом неверном сексе с моим любимым BBC
69,1к 100% 4 мин - 1080p
Сексуальная неверная азиатская шлюха-жена умоляет о сперме после того, как я только что трахнул ее в задницу
96,4к 100% 2 мин - 1080p
Измена азиатской жены-шлюхи позволяет мужчине трахнуть ее в задницу, а затем кончить на ее сиськи
83к 86% 8сек - 1080p
BLACKED
BLACKED Неверную крошку трахнул BBC
3,8 млн 100 % 12 минут - 1080p
Angy Amazon
вуайеристский фетиш мужа-рогоносца, записывающего, как ее жену очерняют грубо
46,4к 100% 2 мин - 1080p
Анги Амазонка
межрасовый трах с изменяющей хотвайф сосет и садится на BBC
13,4к 86% 6мин - 1080p
Angy Amazon
потный и грязный трах межрасовый куколд неверный секс трахнул друг моего парня
114,5к 100% 2 мин - 1080p
Красивая блондинка жена очернена
173,5к 99% 18 минут - 720p
Angy Amazon
грубая очерненная жена на глазах у мужа
24,5к 87% 23сек - 1440p
Angy Amazon
чернокожая жена наполнилась кремпаем после того, как ее трахнул друг его рогоносца
71,6к 100% 6мин - 1080p
Angy Amazon
жена изменяет муженьку-рогоносцу с его лучшим другом
49,2к 88% 13сек - 1080p
MOON FORCE
https://onl.
la/nDPtAdK Японская зрелая домохозяйка с большой задницей и киской течки. У нас был секс в спальне, на кухне и еще где. Неверную жену жестко трахнул ее молодой любовник. Азиатское любительское домашнее порно.
1,8 млн 98% 13мин - 1080p
MOON FORCE
Японская молодая жена получает кримпай от нового молодого парня. Минет и хардкорный секс в отеле с лицом, которое не показывает муж. Азиатское любительское домашнее порно. https://bit.ly/3rovcvz
5,3 млн 100 % 13мин - 1080p
MOON FORCE
https://onl.la/nDPtAdK Японская зрелая домохозяйка с большой задницей и киской течки. У нас был секс в спальне, на кухне и еще где. Неверную жену жестко трахнул ее молодой любовник. Азиатское любительское домашнее порно.
5,7 млн 100 % 15 мин - 1080p
MOON FORCE
Японская молодая жена получает кримпай от нового молодого парня. Минет и хардкорный секс в отеле с лицом, которое не показывает муж. Азиатское любительское домашнее порно. https://bit.