- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 455
- Реакции
- 10
Решил на досуге плотно поковырять SCP: Secret Laboratory. Игра хоть и выглядит местами топорно, но под капотом там крутятся довольно специфичные механизмы защиты. Слили этот материал с целью показать, насколько дырявым может быть античит, если разработчики полагаются только на готовые протекторы типа Themida, не понимая основ безопасности.
Архитектура защиты
Всё делится на две части:
Технические дыры SLAC
Либа упакована и виртуализирована через Themida, но вот незадача — огромное количество критических данных осталось в открытом виде. Вскрываем всё это в IDA и видим классику:
1. RTTI (RunTime Type Information): Разработчики оставили RTTI включенным. Это подарок для реверсера, так как все структуры и типы данных видны как на ладони. Детекты здесь примитивные: чекают теги пула ядра, сигнатуры и базовую целостность. Юзают обычный WinAPI, даже до Nt-функций не дошли, не говоря уже о syscalls.
2. Дизайн VTable: Все проверки используют виртуальные таблицы. Дизайн примитивный, и, что самое смешное, Themida не чекает их целостность. Лейаут таблиц одинаков для всех проверок, так как они юзают один и тот же базовый класс.
3. CURL и сеть: Тут вообще эпик. Проверка сертификатов в CURL просто отключена. Если перенаправить трафик античита (slac.scpslgame.com/beat) на любой локальный пых-скрипт, который возвращает 200 OK — вы успешно «байпасснули» античит.
Сетевой протокол и крипта
Трафик шифруется через AES256CBC. Чтобы дебажить CURL без лишней возни, можно просто создать файл %APPDATA%/SCP Secret Laboratory/slac_debug.txt, и все логи упадут в ту же папку.
Для дешифровки JSON-пакетов используйте эти ключи:
Логирование и HWID
Игра собирает о вас буквально всё. В пакетах на сервер улетают:
Обход целостности (Integrity Bypass)
Обойти проверку целостности Themida можно через банальный патч функции проверки, подсовывая ей «теневую копию» оригинальной памяти. Пример на голом асме:
Итог
Античит крайне сырой. Нет ASLR, слабый анти-дебаг, полное отсутствие контроля syscalls и примитивная логика на VTable. Для внешних читов (External) детектов практически нет, если не наглеть с RPM/WPM.
Кто уже пробовал эмулировать их бэкенд на постоянке, есть ли нюансы по хертбитам?
Архитектура защиты
Всё делится на две части:
- SCP-SL.exe — сам бинарник игры, отвечает за авторизацию и сбор HWID.
- SLAC.dll — основная либа античита, которая занимается детектами и общением с бэкендом.
Технические дыры SLAC
Либа упакована и виртуализирована через Themida, но вот незадача — огромное количество критических данных осталось в открытом виде. Вскрываем всё это в IDA и видим классику:
1. RTTI (RunTime Type Information): Разработчики оставили RTTI включенным. Это подарок для реверсера, так как все структуры и типы данных видны как на ладони. Детекты здесь примитивные: чекают теги пула ядра, сигнатуры и базовую целостность. Юзают обычный WinAPI, даже до Nt-функций не дошли, не говоря уже о syscalls.
2. Дизайн VTable: Все проверки используют виртуальные таблицы. Дизайн примитивный, и, что самое смешное, Themida не чекает их целостность. Лейаут таблиц одинаков для всех проверок, так как они юзают один и тот же базовый класс.
3. CURL и сеть: Тут вообще эпик. Проверка сертификатов в CURL просто отключена. Если перенаправить трафик античита (slac.scpslgame.com/beat) на любой локальный пых-скрипт, который возвращает 200 OK — вы успешно «байпасснули» античит.
Сетевой протокол и крипта
Трафик шифруется через AES256CBC. Чтобы дебажить CURL без лишней возни, можно просто создать файл %APPDATA%/SCP Secret Laboratory/slac_debug.txt, и все логи упадут в ту же папку.
Для дешифровки JSON-пакетов используйте эти ключи:
Код:
std::string key_hex = "e43f7ba2b97ee287e63e14f5cc567fea70cc841f751bc54dd2d41ab8f4c1cbdf";
std::string iv_hex = "5810706fa51b2663db8b17768f92e4a4";
Логирование и HWID
Игра собирает о вас буквально всё. В пакетах на сервер улетают:
- Токены Steam и старые тикеты.
- Имя ПК (Workgroup) и SID.
- Данные процессора и Machine GUID.
- MAC-адреса шлюза и всех адаптеров.
- Серийники дисков и переменные окружения PATH.
Обход целостности (Integrity Bypass)
Обойти проверку целостности Themida можно через банальный патч функции проверки, подсовывая ей «теневую копию» оригинальной памяти. Пример на голом асме:
Код:
__attribute__((naked))
void hkInteg()
{
__asm
{
push rbp
mov rbp, rsp
push rsi
push rdi
/* PATCH: Подменяем rsi на нашу чистую копию */
mov rsi, shadow_copy
mov rdi, [rbp + 10h]
mov ecx, [rbp + 20h]
rep movsb
/* Restore & Exit */
pop rdi
pop rsi
leave
retn 18H
}
}
Итог
Античит крайне сырой. Нет ASLR, слабый анти-дебаг, полное отсутствие контроля syscalls и примитивная логика на VTable. Для внешних читов (External) детектов практически нет, если не наглеть с RPM/WPM.
Кто уже пробовал эмулировать их бэкенд на постоянке, есть ли нюансы по хертбитам?