Проверенный
Пользователь
- Сообщения
- 1,536
- Реакции
- 2,324
- Помог
- 39 раз(а)
В данной теме поговорим о проблеме подмены SteamID и базовых вариантах усложнения этого действия для нечестных игроков.
Чем грозит подмена SteamID?
Для ленивых, которые не любят много читать и хотят сразу готовое решение - прошу под спойлер.
Остальные листаем дальше.
Рассмотрим конфиг модуля и варианты его настройки
Данные изменения повлекут смену идентификаторов и как следствие сброс статистики, рангов и всего остального, что завязано на них
Пример сбора данных по эмуляторам и протоколам
Настройка ReChecker
Мы можем обнаружить запрещенные файлы в клиенте игрока, которые имеют функционал подмены steamid и не пускать таких игроков на свой сервер.
Применять или нет наказание для таких игроков, каждый админ решает сам, т.к. протекторы используются не только для подмены steamid, но и для защиты своего клиента игроками от не добросовестных админов желающих испортить клиент.
Актуальную базу вы можете найти в релизах
Приведем в качестве примера несколько строк обнаружения таких запрещенных файлов
Выдача прав на сервере
При назначении привилегий другим игрокам на сервере админ сталкивается с выбором, какой вариант выбрать?
Напомним, что у нас есть несколько способов назначить права другому игроку:
Первый вариант через ник и пароль плох тем, что вы не можете гарантировать безопасность такой учетной записи, т.к. записи хранятся в открытом виде и человека нужно просто заманить на сервер, где будут получены его steamid, setinfo (all) и многое другое.
Кроме того, человек может отдать свои данные (логин и пароль) друзьям и они будут использовать его права, данный вариант не приятен администраторам, которые доверяют полномочия одному человеку, а на практике полномочия использует группа лиц без ведома главного администратора. Так же это может сказаться на продаже привилегий, зачем людям тратить деньги, если можно попросить учетную запись у своего друга и получить все бесплатно. Данный вариант менее защищенный, не советую его использовать.
Второй вариант тоже не идеален, т.к. статический IP большая редкость. А динамические адреса часто меняются и вас постоянно будут спрашивать "куда делись мои права?". Идеальный вариант, если у человека статический ip.
Третий вариант - steamid+пароль. Привязка прав происходит по уникальному идентификатору клиента, который он получает на сервере. Если игрок не будет менять non-steam сборку каждую неделю и не использовать средства подмены/рандомизации steamid, то это наш самый стабильный вариант. Главное, не забудьте указать "соль", которую мы рассмотрели в разделе выше
Просто steamid привязку (без пароля) вы можете назначить игрокам с лицензионной версией игры (Steam).
Steamid+пароль золотая середина, которую стоит использовать, но для этого нужно настроить свой сервер.
Чем грозит подмена SteamID?
- Кража привилегий у другого игрока, допустим админ права
- Переадресация бана на другого игрока, чей steamid был скопирован и так же обход бана
Для ленивых, которые не любят много читать и хотят сразу готовое решение - прошу под спойлер.
Остальные листаем дальше.
Настройка Reunion / Dproto
Рассмотрим конфиг модуля и варианты его настройки
Данные изменения повлекут смену идентификаторов и как следствие сброс статистики, рангов и всего остального, что завязано на них
В самом начале конфига у нас есть подсказка, как будут генерироваться steamid игроков на нашем сервере
Для начала укажем, как будет генерироваться steamid для каждого протокола клиента
Steam клиент, советую оставить
Данный идентификатор сработает, когда steam сервер отвалится и клиент не сможет получить свой идентификатор. Блокируем
Не важно, есть у нас HLTV или его нет, мы запрещаем подключение других, не известных нам клиентов с идентификатором HLTV
Если у Вас используется HLTV на сервере, то просто укажите его ip в настройке
Старые игровые клиенты, почти не используются и чаще всего эксплуатируются из-за читов, которые требуют конкретный протокол клиента для своей работы. Запрещаем этих единичных пользователей.
Выставляем вид VALVE_xx:xx:xx
Выставляем вид VALVE_xx:xx:xx
Выставляем вид VALVE_xx:xx:xx
Выставляем вид VALVE_xx:xx:xx
Выставляем вид VALVE_xx:xx:xx
Мертвый эмулятор. Блокируем
Мертвый эмулятор. Блокируем
Мертвый эмулятор. Блокируем
Выставляем вид VALVE_xx:xx:xx
Данная настройка (она же "соль") скроет истинный steamid игроков на вашем сервере. Минимальная длина 16 символов !
Придумайте свою строку, можно использовать буквы разного регистра, цифры и символы (!@#$% и т.д.)
На лицензионный клиент игры данная настройка не распространяется.
Активируем генерирование второго префикса, когда используется "соль"
Делаем разграничение префиксов
Префикс - это числа, которые мы видим перед самим сгенерированный id клиента STEAM_xx:xx:xxxxxx
Префикс 1 Допустимые значения [0-99]
Префикс 2 Допустимые значения [0-99]
Числовой идентификатор клиента
Первый префикс, который будет указан, если у протокола стоит генерирование по IP. Данный тип генерирования не удобен, т.к. очень мало клиентов с статическим IP адресом.
Не меняем
Второй префикс, который будет указан, если у протокола стоит генерирование по IP.
Не меняем
Первый префикс, который будет задан Steam клиенту. Дадим ему максимальный номер.
Придется поправить csbans
Либо используйте число от 0 до 9
Зададим любой порядковый номер, чтобы отделить протокол от остальных
Зададим любой порядковый номер, чтобы отделить протокол от остальных
Остальные протоколы трогать не будет, их префиксы и так уникальны от 1 до 7.
Ура, конец спойлера!
Код:
# ClientID types (for cid_* options)
# 1: Real (or generated by HW) steam (STEAM_xx:xx:xx)
# 2: Real (or generated by HW) valve (VALVE_xx:xx:xx)
# 3: STEAM_ by IP
# 4: VALVE_ by IP
# 5: Deprecated - client will be rejected
# 6: reserved for future use
# 7: HLTV
# 8: STEAM_ID_LAN
# 9: STEAM_ID_PENDING
# 10: VALVE_ID_LAN
# 11: VALVE_ID_PENDING
# 12: STEAM_666:88:666
1 - Настоящий (или сгенерированный по HW (Hardware Identification Number)) идентификатор, который будет иметь вид STEAM_xx:xx:xx
2 - Настоящий (или сгенерированный по HW (Hardware Identification Number)) идентификатор, который будет иметь вид VALVE_xx:xx:xx
3 - Генерирование будет происходить по IP игрока и идентификатор будет иметь вид STEAM_xx:xx:xx
4 - Генерирование будет происходить по IP игрока и идентификатор будет иметь вид VALVE_xx:xx:xx
5 - Запрет на подключение клиента к серверу
6 - Идентификатор будет зарезервирован для будущего клиента и будет иметь вид STEAM_xx:xx:xx
7 - Назначает идентификатор HLTV
8 - Идентификатор примет вид STEAM_ID_LAN
9 - Идентификатор примет вид STEAM_ID_PENDING
10 - Идентификатор примет вид VALVE_ID_LAN
11 - Идентификатор примет вид VALVE_ID_PENDING
12 - Идентификатор примет вид 666:88:666
2 - Настоящий (или сгенерированный по HW (Hardware Identification Number)) идентификатор, который будет иметь вид VALVE_xx:xx:xx
3 - Генерирование будет происходить по IP игрока и идентификатор будет иметь вид STEAM_xx:xx:xx
4 - Генерирование будет происходить по IP игрока и идентификатор будет иметь вид VALVE_xx:xx:xx
5 - Запрет на подключение клиента к серверу
6 - Идентификатор будет зарезервирован для будущего клиента и будет иметь вид STEAM_xx:xx:xx
7 - Назначает идентификатор HLTV
8 - Идентификатор примет вид STEAM_ID_LAN
9 - Идентификатор примет вид STEAM_ID_PENDING
10 - Идентификатор примет вид VALVE_ID_LAN
11 - Идентификатор примет вид VALVE_ID_PENDING
12 - Идентификатор примет вид 666:88:666
Для начала укажем, как будет генерироваться steamid для каждого протокола клиента
Код:
# For Legit Steam clients (default is real STEAM_xx:xx:xx [1])
cid_Steam = 1
Steam клиент, советую оставить
1
, подделать его крайне сложно и "время жизни" на сервере будет не долгое
Код:
# Client recognized as pending when they sucessfully authorized, but did not get steam id
# REMARK: Actually, it got steamid, but it is useless (STEAM_0:0:0 for example)
# default is STEAM_ID_PENDING [9]
cid_SteamPending = 9
Данный идентификатор сработает, когда steam сервер отвалится и клиент не сможет получить свой идентификатор. Блокируем
cid_SteamPending = 5
Код:
# for HLTV (default is HLTV [7])
cid_HLTV = 7
Не важно, есть у нас HLTV или его нет, мы запрещаем подключение других, не известных нам клиентов с идентификатором HLTV
cid_HLTV =5
Если у Вас используется HLTV на сервере, то просто укажите его ip в настройке
HLTVExcept_IP = 127.0.0.1
Код:
# for p.47 clients that do not support unique id generation (default is STEAM_ID_LAN [8])
cid_NoSteam47 = 8
# for p.48 clients that do not support unique id generation (default is VALVE_ID_LAN [10])
cid_NoSteam48 = 8
Старые игровые клиенты, почти не используются и чаще всего эксплуатируются из-за читов, которые требуют конкретный протокол клиента для своей работы. Запрещаем этих единичных пользователей.
cid_NoSteam47 = 5
cid_NoSteam48 = 5
Код:
# For players having revEmu ( >= 9.74) on client-side:
# default is real STEAM_xx:xx:xx [1]
cid_RevEmu = 1
Выставляем вид VALVE_xx:xx:xx
cid_RevEmu = 2
Код:
# For players having RevEmu 2013 on client-side:
# default is real STEAM_xx:xx:xx [1]
cid_RevEmu2013 = 1
Выставляем вид VALVE_xx:xx:xx
cid_RevEmu2013 = 2
Код:
# For players having SteamClient 2009 / revEmu > 9.82 on client-side:
# default is real STEAM_xx:xx:xx [1]
cid_SC2009 = 1
Выставляем вид VALVE_xx:xx:xx
cid_SC2009 = 2
Код:
# For players having old revEmu on client-side:
# default is real STEAM_xx:xx:xx [1]
cid_OldRevEmu = 1
Выставляем вид VALVE_xx:xx:xx
cid_OldRevEmu = 2
Код:
# For players having hCupa's SteamEmu on client-side:
# default is real STEAM_xx:xx:xx [1]
cid_SteamEmu = 1
Выставляем вид VALVE_xx:xx:xx
cid_SteamEmu = 2
Код:
# For players having AVSMP (Cracked Steam) on client-side:
# default is real STEAM_xx:xx:xx [1]
cid_AVSMP = 1
Мертвый эмулятор. Блокируем
cid_AVSMP = 5
Код:
# For SETTI ServerScanner
# default is STEAM_xx:xx:xx generated by IP [3]
cid_Setti = 3
Мертвый эмулятор. Блокируем
cid_Setti = 5
Код:
# For SXEI Clients
# default is real STEAM_xx:xx:xx [1]
cid_SXEI = 1
Мертвый эмулятор. Блокируем
cid_SXEI = 5
Код:
# For players having SmartSteamEmu > 1.2.4 on client-side:
# default is real STEAM_xx:xx:xx [1]
cid_SSE3 = 1
Выставляем вид VALVE_xx:xx:xx
cid_SSE3 = 2
Код:
# SteamIdHashSalt (string)
# Salt string for SteamIDs hashing. Irreversibly changes SteamIDs. Applies only to SteamIDs generated by emulators.
# Should be more than 16 chars length. If string is empty, hashing is not applied.
SteamIdHashSalt =
Данная настройка (она же "соль") скроет истинный steamid игроков на вашем сервере. Минимальная длина 16 символов !
Придумайте свою строку, можно использовать буквы разного регистра, цифры и символы (!@#$% и т.д.)
SteamIdHashSalt = QWERTYASDFG123456
На лицензионный клиент игры данная настройка не распространяется.
Код:
# EnableGenPrefix2 (0 / 1)
# Enable second prefix (0 or 1) for generated by HW authids. Reduces chance of authid collisions. Works only with configured SteamIdHashSalt.
EnableGenPrefix2 = 1
Активируем генерирование второго префикса, когда используется "соль"
Делаем разграничение префиксов
Префикс - это числа, которые мы видим перед самим сгенерированный id клиента STEAM_xx:xx:xxxxxx
Префикс 1 Допустимые значения [0-99]
Префикс 2 Допустимые значения [0-99]
Числовой идентификатор клиента
Код:
# IPGen_Prefix1 (int)
# STEAM_a:b:c
# first prefix (a) for authids generated by IP
IPGen_Prefix1 = 0
Первый префикс, который будет указан, если у протокола стоит генерирование по IP. Данный тип генерирования не удобен, т.к. очень мало клиентов с статическим IP адресом.
Не меняем
Код:
# IPGen_Prefix2 (int)
# STEAM_a:b:c
# second prefix (b) for authids generated by IP
IPGen_Prefix2 = 4
Второй префикс, который будет указан, если у протокола стоит генерирование по IP.
Не меняем
Код:
# Native_Prefix1 (int)
# STEAM_a:b:c
# first prefix (a) for authids generated by native auth method (Steam)
Native_Prefix1 = 0;
Первый префикс, который будет задан Steam клиенту. Дадим ему максимальный номер.
Native_Prefix1 = 99;
Придется поправить csbans
Либо используйте число от 0 до 9
Код:
# RevEmu_Prefix1 (int)
# STEAM_a:b:c
# first prefix (a) for authids generated by Steamclient 2009
SC2009_Prefix1 = 0;
Зададим любой порядковый номер, чтобы отделить протокол от остальных
SC2009_Prefix1 = 12;
Код:
# RevEmu_Prefix1 (int)
# STEAM_a:b:c
# first prefix (a) for authids generated by RevEmu
RevEmu_Prefix1 = 1;
Зададим любой порядковый номер, чтобы отделить протокол от остальных
RevEmu_Prefix1 = 13;
Остальные протоколы трогать не будет, их префиксы и так уникальны от 1 до 7.
Ура, конец спойлера!
Пример сбора данных по эмуляторам и протоколам
Настройка ReChecker
Мы можем обнаружить запрещенные файлы в клиенте игрока, которые имеют функционал подмены steamid и не пускать таких игроков на свой сервер.
Применять или нет наказание для таких игроков, каждый админ решает сам, т.к. протекторы используются не только для подмены steamid, но и для защиты своего клиента игроками от не добросовестных админов желающих испортить клиент.
Актуальную базу вы можете найти в релизах
Приведем в качестве примера несколько строк обнаружения таких запрещенных файлов
Код:
"../CSXGuard.dll" UNKNOWN "amx_ban 1440 [userid] 'Protector';wait;rc_log Protector | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
"../CTShield.dll" UNKNOWN "amx_ban 1440 [userid] 'Protector';wait;rc_log Protector | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
"../protector.dll" UNKNOWN "amx_ban 1440 [userid] 'Protector';wait;rc_log Protector | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
;----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
"../change~1.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
"../bin/steamid_changer.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
"changersteambyostrog.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
"../bin/steam.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
"../SteamID.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
"../ChangerSteamByOstrog.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
Выдача прав на сервере
При назначении привилегий другим игрокам на сервере админ сталкивается с выбором, какой вариант выбрать?
Напомним, что у нас есть несколько способов назначить права другому игроку:
- По нику и паролю
- По IP
- по ip+пароль
- По SteamID
- по steamid+пароль
Первый вариант через ник и пароль плох тем, что вы не можете гарантировать безопасность такой учетной записи, т.к. записи хранятся в открытом виде и человека нужно просто заманить на сервер, где будут получены его steamid, setinfo (all) и многое другое.
Кроме того, человек может отдать свои данные (логин и пароль) друзьям и они будут использовать его права, данный вариант не приятен администраторам, которые доверяют полномочия одному человеку, а на практике полномочия использует группа лиц без ведома главного администратора. Так же это может сказаться на продаже привилегий, зачем людям тратить деньги, если можно попросить учетную запись у своего друга и получить все бесплатно. Данный вариант менее защищенный, не советую его использовать.
Второй вариант тоже не идеален, т.к. статический IP большая редкость. А динамические адреса часто меняются и вас постоянно будут спрашивать "куда делись мои права?". Идеальный вариант, если у человека статический ip.
Третий вариант - steamid+пароль. Привязка прав происходит по уникальному идентификатору клиента, который он получает на сервере. Если игрок не будет менять non-steam сборку каждую неделю и не использовать средства подмены/рандомизации steamid, то это наш самый стабильный вариант. Главное, не забудьте указать "соль", которую мы рассмотрели в разделе выше
Просто steamid привязку (без пароля) вы можете назначить игрокам с лицензионной версией игры (Steam).
Steamid+пароль золотая середина, которую стоит использовать, но для этого нужно настроить свой сервер.
Сразу уточню, что информация из 2013г, когда держал сервера и мониторил эту проблему, поэтому не откажусь от дополнений и уточнений.