• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Обход защиты StarForce

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Вы наверное слышали про легендарную защиту StarForce. Для многих она ассоциируется со старыми играм на CD-дисках. Но кода-то популярный StarForce часто используется и по сей день. В этой статье посмотрим, как устроена защита StarForce и как ее обходят.

В статье речь пойдет о традиционной области деятельности StarForce, а именно о защите ПО от копирования. Эта функция называется StarForce ProActive.

Мы попробуем разобрать особенности, достоинства и недостатки StarForce ProActiv, а в конце я покажу простой способ обхода защиты StarForce ProActiv. Надеюсь, разработчики StarForce примут к сведению данную информацию и смогут пофиксить уязвимость.

Обход защиты StarForce​

Чтобы разобраться как устроена защита, проанализируем какое‑нибудь приложение, защищенное с помощью StarForce ProActive. В начале убедимся, что мы имеем дело с программой защищенной StarForce, а не каким-то другом протектором. Для этой цели можно воспользоваться бесплатной тулзой Detect It Easy
starforce-hack-1.jpg

Защищенная протектором StarForce программа в Detect It Easy

Если вы по какой-то причине не смогли скачать актуальную версию Detect It Easy, можно прибегнуть к другими вьюверам EXE PE типа CFF Explorer или hiew. В таком случае признаком присутствия защиты StarForce ProActive в исследуемом файле могут служить специфические секции в хидере запускаемого модуля ( .ps4 или .sforce3 в более старых версиях защиты).

Кроме этого, обычно рядом с защищенной программой находится библиотека с именем из непроизносимого сочетания символов или с более простым наименованием — protect.dll. В любом случае в ней будут находится экспортируемые функции такого вида:
Код:
PSM_0
PSA_CheckFeaturesGrantedByLicense
PSA_DummyFunction
PSA_GetFeaturesGrantedByLicense
PSA_GetLicenseConfirmationTime
PSA_GetLicenseConfirmationTimeLimit
PSA_GetLicenseCreationDateTime
PSA_GetLicenseExecutionTimeLimit
PSA_GetLicenseExpirationDateTime
PSA_GetLicenseInformation
PSA_GetLicenseLifeTimeLimit
PSA_GetLicenseNumberOfRunsLimit
PSA_GetLicenseStartDateTime
PSA_GetLicenseStoragePath
PSA_GetNumberOfConnections
PSA_GetRemainingExecutionTime
Кроме упомянутой библиотеки, разрабы любят добавлять в рабочий каталог программы модулем активации лицензии StarForce (как правило с названием pcnsl.exe). Данный модуль также содержит упомянутые выше экспортные функции и снабжен иконкой с золотым ключиком.
starforce-hack-2.jpg

Окно консоли активации лицензии

И библиотека, и активатор по непонятным мне причинам упакованы популярным упаковщиком UPX, но не торопитесь радоваться и распаковывать. Потому что распакованная библиотека сразу же перестает быть для приложения родной: как и у других видов защиты, здесь есть функция контроля целостности.

Давайте загрузим защищенную программу в отладчик — например, в любимый всеми x64dbg — и как видим, тут тоже все плохо: Старфорс определил отладчик, о чем и говорит в появившемся окне.
starforce-hack-3.jpg

Попытка запуска из‑под отладчика
Как правило в таких случаях может помочь специальный плагин к x64dbg — ScillaHide. Но в этот раз он не может разрулить: хоть он и спасает от этого окна, но отладчик с грохотом падает увидев безумный код внутри библиотеки, причем даже не начав распаковку кода приложения. Интересно, что x64dbg смог подключиться к активной задаче (если, разумеется, установить соответствующий флажок в ScillaHide), при этом в памяти процесса можно найти фрагменты расшифрованного кода, однако прервать выполнение нельзя — отладчик выдает «Ошибку приостановки потока».

При попытке поставить точку останова на фрагмент расшифрованного кода или функцию из внешней библиотеки приложение завершается. Дампить активный процесс внешним дампером или «Сциллой» тоже без толку: на выходе все равно получается запакованный и зашифрованный модуль.

Чтобы сильнее усложнить хакерам жизнь, создатели StarForce ProActive приготовили еще одну приятную мелочь: окна сообщений защиты создает не сама защищаемая программа, а модуль активации pcnsl.exe. Который запускается автоматически при старте приложения и все время обменивается с программой информацией. В общем, может показаться, что куда ни кинь — всюду клин, даже у Enigma лазеек было больше.

Но, конечно, даже у самой профессиональной и навороченной защиты имеется свое слабое место (вы, наверное, уже догадались, о чем я говорю, если читали мои предыдущие статьи на аналогичную тему). Я имею в виду триальный режим, в котором пользователю не отдают программу навечно, а позволяют с ней поиграть какое‑то время или определенное количество запусков. Есть такой режим и у StarForce. Сейчас мы попробуем разобраться, как его обойти без всяких отладчиков: с помощью смекалки, магии и парочки простых понятных инструментов.

Как я уже говорил, главная уязвимость этого режима защиты заключается в том, что для его нормальной работы (точнее, наоборот — чтобы программа переставала работать после завершения демонстрации) защита должна оставить какую‑то неудаляемую или хотя бы очень незаметную метку на компьютере пользователя. А мест для хранения подобных меток в Windows не так уж много, по сути всего два — это реестр и файловая система.

Помня о легендарности StarForce и о том, что систему разрабатывали крутые чуваки, вполне можно ждать от нее какого‑нибудь фирменного запрещенного джедайского приема, вроде хранения метки где‑то в служебных секторах диска или в недокументированных ячейках энергонезависимой памяти контроллера. Но если это не так, то все (или почти все), что записывается в файловую систему или реестр, может быть задокументировано и вытащено на белый свет при помощи замечательной программы Process Monitor, которая не раз уж помогала нам в решении подобных задач.

Итак, запускаем ProcMon, ставим фильтр на имя процесса основной программы (а заодно и на модуль pcnsl.exe, с которым у защищенной программы, как мы уже успели понять, довольно тесное взаимодействие). Первое, на что обращаем внимание, — это целый куст реестра, отведенный под приложение с информацией о лицензии.
starforce-hack-4.jpg

Вид ветки реестра защищенной программы при просмотре в редакторе реестра RegEdit

Как видите, в отличие от Enigma и Obsidium, у StarForce нет специализированных разделов реестра. Легенды гласят, что в старых версиях защиты они существовали и назывались:
Код:
HKCU/SOFTWARE/StarForce
или, чуть более оригинально
Код:
HKCU/SOFTWARE/SF
Но в целях конспирации их переместили в папку программы, что ничуть не помешало нам их найти без особого труда.

Удаляем эту ветку, и вроде бы почти получилось — при запуске программа, как и в самый первый раз, выдает окно о начале активации триала. Однако привязка тут двухуровневая: при нажатии кнопки «Активировать» выдается новое окошко, судя по которому программа все‑таки откуда‑то узнала, что триальный период уже закончился.
starforce-hack-5.jpg

Окно триального предупреждения после удаления ветки реестра

Пришлось довольно долго попыхтеть, анализируя простыню лога, пока я не обнаружил весьма странное обращение программы к конфигурационному файлу в одной из папок пользователя (мы умышленно не приводим его название и местоположение). С чего бы обычному приложению в него лезть? Подозрительно! Открываем данный файл — и в нем мы видим примерно такие строки:
Код:
[{436E44ED-269F-DA68-CA05-3EF38F4E7BBD}]
Class={B550918B-6C02-BB96-5111-C81A7F525081}
GIUD в первой из них точно такой же, как и имя подпапки Keys, найденной нами в реестре. Аккуратно удаляем эти две строки из файла, удаляем ветку реестра и при перезапуске программы получаем свеженький чистый триал без особых хлопот с отладчиком.

Заключение​

В общем, мы еще раз убедились в том, что система StarForce вовсе не канула в Лету, а продолжает развивать и совершенствовать собственные технологии. Но, конечно, идеальных методов защиты не существует, и пытливый ум при достаточной усидчивости и мотивации всегда найдет быстрый путь преодолеть преграды любой сложности.

Надеюсь, разработчики подумают о том, как усилить создаваемую ими защиту, а читателям я хочу напомнить, что этот рассказ был написан исключительно в академических целях и нарушать штатную работу коммерческих приложений — незаконно. Берегите себя, и да пребудет с вами сила!


автор @Kozhuh
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх