StarForce
StarForce — система защиты от незаконного копирования, разработанная компанией Protection Technology. Основная задача StarForce — предотвращение нелегального копирования ПО, как домашнего с помощью домашних копировщиков, так и промышленных, а также попыток обратного проектирования. Защита используется в основном для защиты игр от копирования.
Содержание |
Версии защиты
Встречается в основном в 3 версиях:
- FrontLine Disc — проверка диска
- FrontLine ProActive — активация через интернет
- FrontLine Universal = FrontLine Disc + FrontLine ProActive
Сложность
Защита разделяется на 3 степени сложности:
- Basic
- Pro
- Elite
Basic — отличительная особенность в том, что ВМ (Виртуальная машина) может изменять только EIP контекста. Т.е. любой вызов ВМ из кода программы(?) может быть заменен на команду jmp.
Pro — виртуализируется часть кода приложения, для последующего его исполнения в ВМ.
Elite — то же, что и Pro, но разработчики StarForce могут добавлять свой код в защищенное приложение. Т.е. например триггеры в игру.
Триггеры — это определенные значения в коде. Например защитная функция может проверить участок кода и если код не совпадет у вас в игре не будут работать аптечки.
Защитные функции
Основные защитные функции:
- Антидамп (сложен)
- Защита импорта (прост)
- Антидебаг (прост)
- Антитрейс (прост)
- Виртуальная машина (сложна)
- SFFS - Star Force File System (сложна)
Антидамп
Представляет из себя проверку параметров компьютера в виртуальной машине.
Проверяется:
- CPUID
- PID (GetCurrentProcessId и чтение из PEB);
- Серийный номер системного жесткого диска (GetSystemDirectoryA+GetVolumeInformationA);
- Объем оперативной памяти (GlobalMemoryStatusEx);
- Версия операционной системы (чтение из PEB);
- Чтение 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. Поскольку можно внедрить длл в процесс, прочитать нужный файл из процесса и записать его, не представляет особой сложности.