Всем ку , щас расскажу про signature scan и как с этим бороться.
Что это такое?
Античиты вроде EAC или FiveM’s built-in scanner не всегда палят по API хуков или поведениям. Иногда они просто ищут сигнатуру — определённую последовательность байт, характерную для чита.
Обычно такие сигнатуры берутся из функций, которые редко меняются:
Такой код легко может всплыть в сигнатурной базе по:
Как защититься?
1. Инлайн-обфускация
2. Прячем строки
3. Перемешивание кода и junk
Что это такое?
Античиты вроде EAC или FiveM’s built-in scanner не всегда палят по API хуков или поведениям. Иногда они просто ищут сигнатуру — определённую последовательность байт, характерную для чита.
Обычно такие сигнатуры берутся из функций, которые редко меняются:
- static patterns (55 8B EC 83 E4 F8 83 EC ??)
- уникальные строки
- маркеры в памяти (например, идентификаторы модуля)
C++:
void DWORD playerBase = (DWORD)0x17A56BC;
(bool)(playerBase + 0x189) = true; // бессмертие
printf("GodMode ON\n");
}
Такой код легко может всплыть в сигнатурной базе по:
- адресу
- последовательности байт в функции
- строке GodMode ON
Как защититься?
1. Инлайн-обфускация
C++:
void GodMode()
{
DWORD playerBase = (DWORD)0x17A56BC;
(volatile char)((uintptr_t)playerBase + 0x189) = 1 ^ 1 ^ 1; // xor против сигнатур
}
2. Прячем строки
C++:
const char* xstr = xorstr("GodMode ON");
printf("%s\n", xstr); // строка в рантайме не распознаётся как обычная
C++:
void Junk() {
int a = 1337 ^ 42;
if (a % 2 == 0) a += 5;
}
void GodMode()
{
Junk(); // лишний шум
DWORD base = (DWORD)0x17A56BC;
(bool)(base + 0x189) = true;
}