Звездная сила. Как уязвимость в StarForce позволяет обнулять триал

Дав­ным‑дав­но, в одной далекой гала… Стоп, это из дру­гой исто­рии. А в нашей исто­рии защита StarForce оте­чес­твен­ных раз­работ­чиков уже дав­но ста­ла леген­дарной. У мно­гих это наз­вание ассо­циирует­ся со счас­тли­вым детс­твом, компь­ютер­ными игра­ми и безус­пешны­ми попыт­ками ско­пиро­вать защищен­ный ком­пакт‑диск. Но StarForce жив и по сей день, успешно раз­вива­ется и осва­ивает новые горизон­ты. Сегод­ня мы погово­рим о том, как эта защита устро­ена.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

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

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

Итак, поп­робу­ем вжи­вую пощупать какую‑нибудь прог­рамму, защищен­ную при помощи StarForce ProActive. Для начала убе­дим­ся, что перед нами имен­но StarForce, а не что‑нибудь иное. Для это­го вос­поль­зуем­ся прос­тым и дос­тупным инс­тру­мен­том под наз­вани­ем Detect It Easy.

Ок­но Detect It Easy при заг­рузке в него защищен­ной прог­раммы

Ес­ли ты почему‑то не смог ска­чать акту­аль­ную вер­сию Detect It Easy (нап­ример, злой про­вай­дер отру­бил тебе интернет), мож­но вос­поль­зовать­ся и дру­гими популяр­ными вьюве­рами EXE PE вро­де hiew, CFF Explorer и им подоб­ных. В этом слу­чае приз­наком при­сутс­твия в иссле­дуемом фай­ле 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

По­мимо упо­мяну­той биб­лиоте­ки, раз­работ­чики любят класть в рабочий каталог прог­раммы стар­форсов­ский модуль акти­вации лицен­зии (обыч­но он име­ет наз­вание pcnsl.exe). Этот модуль тоже содер­жит перечис­ленные выше экспортные фун­кции и снаб­жен милой икон­кой в виде золото­го клю­чика.

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

И биб­лиоте­ка, и акти­ватор по каким‑то непонят­ным сооб­ражени­ям упа­кова­ны зна­мени­тым UPX, одна­ко не спе­ши радос­тно их рас­паковы­вать. Ибо рас­пакован­ная биб­лиоте­ка тут же перес­тает быть для прог­раммы род­ной: как и у любой дру­гой «взрос­лой» защиты, тут име­ется кон­троль целос­тнос­ти.

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

По­пыт­ка запус­ка из‑под отладчи­ка

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

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *