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

Хакерский инструмент

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

Еще по теме: Отладка программ с помощью WinDbg

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

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

Статья в образовательных целях и не призывает к каким-либо незаконным действиям. Ни редак­ция spy-soft.net, ни автор не несут ответс­твен­ность за ваши действия.

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

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

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

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

Кроме этого, обыч­но рядом с защищен­ной прог­раммой находится биб­лиоте­ка с име­нем из неп­роиз­носимо­го сочета­ния сим­волов или с более прос­тым наиме­нова­нием — protect.dll. В любом слу­чае в ней будут находится экспор­тиру­емые фун­кции такого вида:

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

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

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

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

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

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

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

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

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

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

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

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

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

Как видите, в отли­чие от Enigma и Obsidium, у StarForce нет спе­циали­зиро­ван­ных раз­делов реес­тра. Леген­ды гла­сят, что в ста­рых вер­сиях защиты они сущес­тво­вали и называ­лись:

или, чуть более ори­гиналь­но

Но в целях кон­спи­рации их перемес­тили в пап­ку прог­раммы, что ничуть не помеша­ло нам их най­ти без осо­бого тру­да.

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

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

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

GIUD в пер­вой из них точ­но такой же, как и имя под­папки Keys, най­ден­ной нами в реес­тре. Акку­рат­но уда­ляем эти две стро­ки из фай­ла, уда­ляем вет­ку реес­тра и при переза­пус­ке прог­раммы получа­ем све­жень­кий чис­тый три­ал без осо­бых хло­пот с отладчи­ком.

Заключение

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

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

Еще по теме: Обход защиты протектора Obsidium

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий