Дюп денег в RedM: как он происходит и как поймать его до краха экономики
Дюп денег в RedM редко заметен в чате. Типичные причины, симптомы, которые пропускают владельцы, что делать в день находки и как проводить аудит.
Дюп денег в RedM почти никогда не объявляет о себе. Никто не выкладывает скриншот, никого не банят. В один вечер несколько игроков становятся богатыми, магазины кажутся дешёвыми, а через две недели новички не могут купить лошадь, потому что все цены тихо вздули, компенсируя это. К тому времени, как персонал заметит, экономика, которую вы строили, уже стала другой экономикой.
Эта статья об этом медленном крахе: откуда берётся эксплойт дюпа в RedM, как он выглядит в ваших данных, что делать в день, когда вы нашли его, и что античит может и чего не может с этим сделать. Причины мы намеренно описываем в общем виде. Цель в том, чтобы помочь вам исправлять и замечать проблемы, а не вручить кому-то рецепт.
Дюп денег в RedM это обычно логическая ошибка, а не чит
Слово «дюп» покрывает две очень разные вещи, и если их перепутать, вы пойдёте не к тому исправлению.
Читер создаёт ценность из ничего. Чит-меню вызывает скрытое серверное событие или злоупотребляет событием, которое открывает ваш скрипт, и выдаёт себе деньги или предметы. Это проблема для античита.
Законный игрок находит брешь в вашей логике. Никакого чит-софта: просто неудачная последовательность обычных действий, которые ваши скрипты обрабатывают плохо. Это проблема разработки, и ни один античит не остановит её, следя за игроком.
Большинство реальных инцидентов относятся ко второму виду или смешанные: игрок обнаруживает логическую брешь, делится ею, и десяток других её повторяет. Поэтому экономический эксплойт в RedM нужно сначала разбирать как ошибку вашего сервера и лишь затем как проблему поведения.
Типичные причины дюпа на VORP и RSG
Фреймворк важен меньше, чем можно подумать. Дюп на VORP и дюп на сервере RSG или RedEM обычно происходят от одного короткого списка ошибок в скриптах, ваших или сторонних ресурсов.
Сервер верит тому, что говорит клиент
Серверное событие это сообщение, которое может отправить кто угодно, а аргументы выбирает клиент. Если ваш обработчик берёт сумму, цену или количество предметов из аргументов и применяет их, исход решает игрок. Сервер должен вычислять сумму сам. Полный шаблон и почему source единственное, чему можно доверять, описаны в статье как защитить серверные события RedM.
RegisterNetEvent('shop:sell', function(itemName)
local src = source
-- The client only names the item. Quantity, price and
-- ownership are all decided here, from server state.
local owned = GetOwnedCount(src, itemName)
local price = GetServerPrice(itemName)
if owned < 1 or not price then return end
-- Take first, pay second, and only once.
if RemoveItem(src, itemName, 1) then
AddMoney(src, price)
end
end)Записи в инвентарь и базу данных, гоняющиеся друг с другом
Выдача предмета и сохранение персонажа часто отдельные шаги. Если два действия пересекаются, например два запроса обрабатываются почти одновременно, оба могут прочитать одно и то же начальное состояние, и оба могут пройти успешно. Результат: ценность, созданная одним лишь таймингом. Лекарство скучное: проверять и менять состояние за один шаг и никогда не позволять обработчику платить до того, как списание действительно произошло.
Тайминг отключения и переподключения
Игрок, вышедший во время транзакции или сохранения, может получить обратно старое состояние, тогда как результат действия сохранится где-то ещё. Представьте обмен, продажу или перенос в тайник, прерванные в неудачный момент. Каждый скрипт, переносящий ценность между двумя местами, должен определять, что происходит, если игрок отвалился на полпути.
Синхронизация тайников и контейнеров
Тайники, седельные сумки, фургоны и общие хранилища это самое частое место дюпа предметов, потому что к одному контейнеру могут обращаться несколько игроков и несколько скриптов. Слабая синхронизация между тем, что показывает клиент, и тем, что хранит сервер, и есть место, где предметы появляются дважды.
Аккаунты-мулы переносят добычу
Тот, кто нашёл брешь, редко оставляет добычу на аккаунте, который её произвёл. Она уходит на чистого персонажа, часто созданного для этой цели и связанного с первым общей машиной или сетью. Этот обходной путь также ваша возможность: источник видно плохо, но получатель образует закономерность. О том, как ловят связанные аккаунты, мы рассказываем в статье о банах по HWID.
Как дюп денег в RedM выглядит из кресла владельца
Вы не увидите само событие. Вы увидите его след в данных:
Денежная масса подскакивает. Общая сумма наличных и банка по всем персонажам растёт быстрее, чем объясняют часы игры, или ступенькой, совпадающей с одним вечером.
Новый игрок богаче ваших ветеранов. Богатство обычно следует за игровым временем. Новый персонаж с состоянием и малым временем онлайн это самый ясный одиночный признак.
Балансы меняются, пока владельца нет в сети. Деньги, изменившиеся на аккаунте, игрок которого был офлайн, редко невинны.
Невозможные стаки. Количество, намного превышающее допустимое в игре, или отрицательное число это классический отпечаток дюпа предметов или сломанного переполнения вниз.
Много аккаунтов кормят один. Несколько персонажей, часто связанных, отправляют ценность одному и тому же получателю.
День, когда вы нашли эксплойт дюпа в RedM
Порядок важен. Команды, спешащие банить, обычно ничего не исправляют, а иногда делают хуже.
- 1
Заморозьте утечку. Отключите подозрительную функцию или ресурс сейчас, даже если вы не уверены, что причина в нём. Магазин, закрытый на час, обходится дешевле, чем ещё одна ночь дублирования.
- 2
Сделайте снимок. Сделайте бэкап базы данных, прежде чем что-либо трогать, чтобы сравнить до и после и отменить собственные ошибки.
- 3
Проследите источник. Найдите первый аккаунт, ненормально разбогатевший, затем проследите ценность вперёд до получателей. Сопоставьте время с логами ваших скриптов, чтобы найти обработчик.
- 4
Откатывайте осторожно. Убирайте только то, что доказуемо незаконно, аккаунт за аккаунтом, вместо того чтобы восстанавливать глобальный бэкап, стирающий прогресс честных игроков. Документируйте, что вы убрали и почему.
- 5
Исправьте обработчик до разбана или повторного открытия чего-либо. Если брешь ещё открыта, вернувшийся игрок воспользуется ею снова. Затем решайте о санкциях, с доказательствами, для тех, кто сознательно наживался.
- 6
Расскажите сообществу. Короткое фактическое сообщение лучше слухов, а чёткая политика заставляет следующего задуматься дважды.
Что Baobab AC делает с экономическим эксплойтом в RedM
Baobab AC подходит к этому с двух сторон: не даёт ценности внедряться и находит то, что просочилось.
У двери: Anti Economy Trigger Exploit
Anti Economy Trigger Exploit не даёт читерам внедрять скрытые команды, чтобы выдать себе деньги, золото или ценные предметы из ниоткуда. Он нацелен на путь через чит-меню. Он не заменяет безопасный обработчик: если один из ваших собственных скриптов платит по присланному клиентом числу легитимным путём, логику исправлять вам, а детектор, следящий за игроком, не может знать, что число было неверным.
Anti Multi-Account Exploit закрывает шаг с мулом. Он обнаруживает переводы денег и предметов между связанными альт-аккаунтами, сопоставляя общий IP, HWID и идентичность Discord, и отмечает также повторный вход после бана.
Потом: Economy Forensics
Economy Forensics (экономическая экспертиза) это аудит того, что первый слой увидеть не смог. Это аудит вашей игровой базы данных в режиме только чтения, сопоставленный с игровым временем, известным только античиту. Он смотрит на:
денежную массу во времени, чтобы заметить ступеньку, не совпадающую с вашей активностью;
выбросы богатства, то есть богатство, несоразмерное сыгранному времени;
сети мулов, где несколько аккаунтов кормят один;
дюп предметов и невозможные стаки, включая отрицательные количества.
Сопоставление с игровым временем это то, что инструмент для базы данных в одиночку сделать не может. Ваша база знает баланс. Только античит знает, был ли этот игрок вообще подключён, когда баланс изменился, и сколько он играет в сумме.
Аудит запускается по расписанию, а также его можно запустить вручную из панели.
Ваша схема, а не догадка о ней
У аудита есть чтение для VORP, семейства QB (в него входят RSG и QBR) и RedEM. Серверы редко работают на этих схемах без изменений, поэтому есть и помощник сопоставления для собственных или изменённых баз данных: дополнительная валюта, переименованная таблица инвентаря, банк в отдельной таблице, инвентарь в JSON или самодельный фреймворк. Таблицы и столбцы вы выбираете из списков, прочитанных на вашей реальной базе, а не печатаете имена, и каждая сопоставленная часть должна пройти тест, прежде чем её можно сохранить. Если сопоставление перестаёт соответствовать базе, аудит возвращается к автоматическому определению и объясняет причину в своём отчёте о покрытии.
Это важно, потому что неверное сопоставление ломается тихо: оно возвращает пустые инвентари и нулевые балансы, а не ошибку. Если вы работаете именно на VORP, остальную настройку описывает руководство по античиту для VORP.
Что на самом деле значит «только чтение» и чего аудит не делает
Прямота в этом вопросе избавит вас от неприятных сюрпризов позже.
Он только читает. Аудит отправляет запросы SELECT по идентификаторам, сверенным с вашей реальной схемой. Он никогда не правит баланс, не убирает предмет и не трогает аккаунт.
Он никогда не выдаёт санкций. Каждый результат это зацепка для проверки человеком. Ничто не банится, не кикается и не откатывается автоматически из-за находки аудита.
Он идёт через ваш игровой сервер. Запросы идут через ресурс вашего сервера и его подключение к базе, по одному, поэтому большая база означает более медленный аудит. Он задуман аккуратным, а не мгновенным.
Он находит симптомы, а не причины. Аудит сообщает, кто аномален и когда. Найти обработчик, через который произошла утечка, по-прежнему ваша задача, с вашими собственными логами.
Это не слой предотвращения. Он не может остановить дюп в момент, когда тот происходит. Он сокращает время между первым злоупотреблением и днём, когда вы о нём узнаёте.
Действуют ограничения тарифа. Economy Forensics входит в тарифы Pro и Network, но не в Starter. См. цены.
Для зацепки нужен человек, отличающий ограбление от дюпа, и та же дисциплина применима к любой детекции: посмотрите, как мы относимся к ложным срабатываниям во всём остальном продукте.
Короткий чек-лист для вашего сервера
Проверьте каждое серверное событие, затрагивающее деньги, предметы или работы: клиент называет действие, но никогда не сумму.
Сделайте «сначала списать, потом заплатить» правилом в каждой транзакции.
Решите, что происходит с обменом или продажей, если игрок отключился на полпути.
Регулярно смотрите на общую денежную массу, а не только после жалобы.
Храните бэкапы базы данных, восстановление из которых вы проверяли.
Считайте богатый новый аккаунт вопросом, на который нужно ответить, а не победой, которую можно проигнорировать.
Экономика RedM живёт, пока игроки верят в её справедливость. Дюпы будут случаться, потому что в скриптах есть ошибки. Вы контролируете то, как долго один из них остаётся незамеченным. Если хотите увидеть более широкую картину того, как складывается детекция, начните со статьи как работает античит RedM и посмотрите что делает каждая возможность, прежде чем выбирать тариф.