StarForce

eXeL@B DVD

Материал из Справочник исследователя программ

Перейти к: навигация, поиск

StarForce — система защиты от незаконного копирования, разработанная компанией Protection Technology. Основная задача StarForce — предотвращение нелегального копирования ПО, как домашнего с помощью домашних копировщиков, так и промышленных, а также попыток обратного проектирования. Защита используется в основном для защиты игр от копирования.

Содержание

Версии защиты

Встречается в основном в 3 версиях:

  1. FrontLine Disc — проверка диска
  2. FrontLine ProActive — активация через интернет
  3. FrontLine Universal = FrontLine Disc + FrontLine ProActive

Сложность

Защита разделяется на 3 степени сложности:

  1. Basic
  2. Pro
  3. Elite

Basic — отличительная особенность в том, что ВМ (Виртуальная машина) может изменять только EIP контекста. Т.е. любой вызов ВМ из кода программы(?) может быть заменен на команду jmp.

Pro — виртуализируется часть кода приложения, для последующего его исполнения в ВМ.

Elite — то же, что и Pro, но разработчики StarForce могут добавлять свой код в защищенное приложение. Т.е. например триггеры в игру.

Триггеры — это определенные значения в коде. Например защитная функция может проверить участок кода и если код не совпадет у вас в игре не будут работать аптечки.

Защитные функции

Основные защитные функции:

  1. Антидамп (сложен)
  2. Защита импорта (прост)
  3. Антидебаг (прост)
  4. Антитрейс (прост)
  5. Виртуальная машина (сложна)
  6. SFFS - Star Force File System (сложна)

Антидамп

Представляет из себя проверку параметров компьютера в виртуальной машине.

Проверяется:

  1. CPUID
  2. PID (GetCurrentProcessId и чтение из PEB);
  3. Серийный номер системного жесткого диска (GetSystemDirectoryA+GetVolumeInformationA);
  4. Объем оперативной памяти (GlobalMemoryStatusEx);
  5. Версия операционной системы (чтение из PEB);
  6. Чтение WinID из реестра;

Может что еще...

Защита импорта

Для защиты импорта StarForce частично копирует код некоторых системных API функций из kernel32.dll, user32.dll и др. в выделенную область. При этом производится морфинг команд. Если функция длинная, то копируется только небольшая часть, а дальше управление передается в середину API функции. Если же небольшая, то копируется полностью. Соответственно вместо адреса API в IAT записываются адреса из выделенной области.

Вызов некоторых API так же может быть защищен ВМ.

Защита от отладки

IsDebuggerPresent и чтение из PEB BeingDebugged.

Еще StarForce, при помощи драйвера, устанавливает собственный обработчики прерываний INT1 и INT3. Таким образом, он первый получает управление при срабатывании брэкпойнтов, и трассировке кода при помощи trap flag.

Антитрейс

Установка SEH и генерация исключения, проверка trap flag

Виртуальная машина

Виртуальная машина StarForce является регистровой, и максимальным числом примитивов 128.

Делится на 2 части:

  • код который выполняется только на примитивах;
  • код без их использования — по сути нативный код с использованием переменных и регистров ВМ;

Лента PCODE вычисляется путем ксора 4 значений. Три из них указывают на случайные адреса ВМ, а оставшийся — на данные ленты PCODE. За счет этого добивается высокая защита CRC.

Также ВМ часто проверяет CRC путем получения текущего eip и сложением N DWORD от этого eip. Потом значение сравнивают с контрольным.

В ВМ используется коррекция PCODE на каждом шаге выполнения. В 4.70 версии StarForce для этого используется: 3 блока по 4 бит и флага в один бит из данных самого PCODE и специальный регистр ВМ. Т.е. почти каждый вызванный примитив ВМ изменяет ее и следующий примитив расшифровывает PCODE уже измененной константой.

Контект ВМ занимает 64кб. Из них первые 32 64-х битных регистра могут адресовываться по индексу, а оставшаяся часть — только по смещению.

Первую половину из 32 регистров занимают служебные регистры: 4 на адреса лент, два регистра (16 байт) под буфер команд, регистр коррекции, регистр флагов.

Реверс виртуальной машины

Нахождение VM_Exit
Сигнатура VM_Exit для версий 3.x-5.5: 58h,03h,0E0h,9Dh,61h,0C3h.
Для версий старше: 59h,5Bh,87h,04h,24h,0C3h.
Трейс команд ВМ
Когда войдете в ВМ нажмите в OllyDbg комбинацию Ctrl+T, откроется окно условий остановки трейса. Выставляем чекбокс Command is (1) и вписываем в соседнее с ним поле JMP EAX. Теперь нажимая Ctrl+F11 будем останавливаться точно на переходе в следующий обработчик.

SFFS

Виртуальная файловая система StarForce.

Используется файл в начале которого 4 символа "SFFS".

Делится на 2 вида - драйверный и бездрайверный.

Драйверный используется для расшифровки файла "на лету", бездрайверный предоставляет API работы с SFFS. Поскольку можно внедрить длл в процесс, прочитать нужный файл из процесса и записать его, не представляет особой сложности.

PS. моя первая статья в вики. Где посмотреть как переносить строки? И удалите этот PS после отправки мне ответа)

Источник — «https://exelab.ru/faq/StarForce»