В данной теме поговорим о проблеме подмены SteamID и базовых вариантах усложнения этого действия для нечестных игроков.
Чем грозит подмена SteamID?
Данные изменения повлекут смену идентификаторов и как следствие сброс статистики, рангов и всего остального, что завязано на них
В самом начале конфига у нас есть подсказка, как будут генерироваться steamid игроков на нашем сервере
# 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
Для начала укажем, как будет генерироваться 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_HLTV = 7
Не важно, есть у нас HLTV или его нет, мы запрещаем подключение других, не известных нам клиентов с идентификатором HLTV
cid_NoSteam47 = 8
# for p.48 clients that do not support unique id generation (default is VALVE_ID_LAN [10])
cid_NoSteam48 = 8
Старые игровые клиенты, почти не используются и чаще всего эксплуатируются из-за читов, которые требуют конкретный протокол клиента для своей работы. Запрещаем этих единичных пользователей.
# default is real STEAM_xx:xx:xx [1]
cid_RevEmu = 1
Выставляем вид VALVE_xx:xx:xx
# default is real STEAM_xx:xx:xx [1]
cid_RevEmu2013 = 1
Выставляем вид VALVE_xx:xx:xx
# default is real STEAM_xx:xx:xx [1]
cid_SC2009 = 1
Выставляем вид VALVE_xx:xx:xx
# default is real STEAM_xx:xx:xx [1]
cid_OldRevEmu = 1
Выставляем вид VALVE_xx:xx:xx
# default is real STEAM_xx:xx:xx [1]
cid_SteamEmu = 1
Выставляем вид VALVE_xx:xx:xx
# default is real STEAM_xx:xx:xx [1]
cid_AVSMP = 1
Мертвый эмулятор. Блокируем
# default is STEAM_xx:xx:xx generated by IP [3]
cid_Setti = 3
Мертвый эмулятор. Блокируем
# default is real STEAM_xx:xx:xx [1]
cid_SXEI = 1
Мертвый эмулятор. Блокируем
# default is real STEAM_xx:xx:xx [1]
cid_SSE3 = 1
Выставляем вид VALVE_xx:xx:xx
# 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 клиенту. Дадим ему максимальный номер.
Либо используйте число от 0 до 9
# RevEmu_Prefix1 (int)
# STEAM_a:b:c
# first prefix (a) for authids generated by Steamclient 2009
SC2009_Prefix1 = 0;
Зададим любой порядковый номер, чтобы отделить протокол от остальных
# STEAM_a:b:c
# first prefix (a) for authids generated by RevEmu
RevEmu_Prefix1 = 1;
Зададим любой порядковый номер, чтобы отделить протокол от остальных
Ура, конец спойлера!
Применять или нет наказание для таких игроков, каждый админ решает сам, т.к. протекторы используются не только для подмены 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+пароль. Привязка прав происходит по уникальному идентификатору клиента, который он получает на сервере. Если игрок не будет менять non-steam сборку каждую неделю и не использовать средства подмены/рандомизации steamid, то это наш самый стабильный вариант. Главное, не забудьте указать "соль", которую мы рассмотрели в разделе выше
Просто steamid привязку (без пароля) вы можете назначить игрокам с лицензионной версией игры (Steam).
Steamid+пароль золотая середина, которую стоит использовать, но для этого нужно настроить свой сервер.
Чем грозит подмена SteamID?
- Кража привилегий у другого игрока, допустим админ права
- Переадресация бана на другого игрока, чей steamid был скопирован и так же обход бана.
ННастройка Reunion / Dproto
Рассмотрим конфиг модуля и варианты его настройкиДанные изменения повлекут смену идентификаторов и как следствие сброс статистики, рангов и всего остального, что завязано на них
В самом начале конфига у нас есть подсказка, как будут генерироваться steamid игроков на нашем сервере
# 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
Для начала укажем, как будет генерироваться 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 сервер отвалится и клиент не сможет получить свой идентификатор. Блокируем
# for HLTV (default is HLTV [7])cid_SteamPending = 5
cid_HLTV = 7
Не важно, есть у нас HLTV или его нет, мы запрещаем подключение других, не известных нам клиентов с идентификатором HLTV
Если у Вас используется HLTV на сервере, то просто укажите его ip в настройкеcid_HLTV =5
# for p.47 clients that do not support unique id generation (default is STEAM_ID_LAN [8])HLTVExcept_IP = 127.0.0.1
cid_NoSteam47 = 8
# for p.48 clients that do not support unique id generation (default is VALVE_ID_LAN [10])
cid_NoSteam48 = 8
Старые игровые клиенты, почти не используются и чаще всего эксплуатируются из-за читов, которые требуют конкретный протокол клиента для своей работы. Запрещаем этих единичных пользователей.
# For players having revEmu ( >= 9.74) on client-side:cid_NoSteam47 = 5
cid_NoSteam48 = 5
# default is real STEAM_xx:xx:xx [1]
cid_RevEmu = 1
Выставляем вид VALVE_xx:xx:xx
# For players having RevEmu 2013 on client-side:cid_RevEmu = 2
# default is real STEAM_xx:xx:xx [1]
cid_RevEmu2013 = 1
Выставляем вид VALVE_xx:xx:xx
# For players having SteamClient 2009 / revEmu > 9.82 on client-side:cid_RevEmu2013 = 2
# default is real STEAM_xx:xx:xx [1]
cid_SC2009 = 1
Выставляем вид VALVE_xx:xx:xx
# For players having old revEmu on client-side:cid_SC2009 = 2
# default is real STEAM_xx:xx:xx [1]
cid_OldRevEmu = 1
Выставляем вид VALVE_xx:xx:xx
# For players having hCupa's SteamEmu on client-side:cid_OldRevEmu = 2
# default is real STEAM_xx:xx:xx [1]
cid_SteamEmu = 1
Выставляем вид VALVE_xx:xx:xx
# For players having AVSMP (Cracked Steam) on client-side:cid_SteamEmu = 2
# default is real STEAM_xx:xx:xx [1]
cid_AVSMP = 1
Мертвый эмулятор. Блокируем
# For SETTI ServerScannercid_AVSMP = 5
# default is STEAM_xx:xx:xx generated by IP [3]
cid_Setti = 3
Мертвый эмулятор. Блокируем
# For SXEI Clientscid_Setti = 5
# default is real STEAM_xx:xx:xx [1]
cid_SXEI = 1
Мертвый эмулятор. Блокируем
# For players having SmartSteamEmu > 1.2.4 on client-side:cid_SXEI = 5
# default is real STEAM_xx:xx:xx [1]
cid_SSE3 = 1
Выставляем вид VALVE_xx:xx:xx
# SteamIdHashSalt (string)cid_SSE3 = 2
# 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 клиенту. Дадим ему максимальный номер.
Придется поправить csbansNative_Prefix1 = 99;
Либо используйте число от 0 до 9
# RevEmu_Prefix1 (int)
# STEAM_a:b:c
# first prefix (a) for authids generated by Steamclient 2009
SC2009_Prefix1 = 0;
Зададим любой порядковый номер, чтобы отделить протокол от остальных
# RevEmu_Prefix1 (int)SC2009_Prefix1 = 12;
# STEAM_a:b:c
# first prefix (a) for authids generated by RevEmu
RevEmu_Prefix1 = 1;
Зададим любой порядковый номер, чтобы отделить протокол от остальных
Остальные протоколы трогать не будет, их префиксы и так уникальны от 1 до 7.RevEmu_Prefix1 = 13;
Ура, конец спойлера!
ННастройка 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+пароль
Кроме того, человек может отдать свои данные (логин и пароль) друзьям и они будут использовать его права, данный вариант не приятен администраторам, которые доверяют полномочия одному человеку, а на практике полномочия использует группа лиц без ведома главного администратора. Так же это может сказаться на продаже привилегий, зачем людям тратить деньги, если можно попросить учетную запись у своего друга и получить все бесплатно. Данный вариант менее защищенный, не советую его использовать.
Второй вариант тоже не идеален, т.к. статический IP большая редкость. А динамические адреса часто меняются и вас постоянно будут спрашивать "куда делись мои права?". Идеальный вариант, если у человека статический ip.
Третий вариант - steamid+пароль. Привязка прав происходит по уникальному идентификатору клиента, который он получает на сервере. Если игрок не будет менять non-steam сборку каждую неделю и не использовать средства подмены/рандомизации steamid, то это наш самый стабильный вариант. Главное, не забудьте указать "соль", которую мы рассмотрели в разделе выше
Просто steamid привязку (без пароля) вы можете назначить игрокам с лицензионной версией игры (Steam).
Steamid+пароль золотая середина, которую стоит использовать, но для этого нужно настроить свой сервер.