Фемида дремлет. Как работает обход защиты Themida

Themida или «Фемида» — одна из самых наворо­чен­ных защит для соф­та. Вмес­те с WMProtect ее отно­сят к нас­толь­ко суровым про­тек­торам, что некото­рые прог­раммис­ты, которым жаль денег на чес­тную покуп­ку этих инс­тру­мен­тов (а сто­ят они недеше­во), прос­то ими­тиру­ют их наличие, что отпу­гива­ет ленивых и неопыт­ных хакеров. Сегод­ня мы погово­рим о том, как сбро­сить три­ал при­ложе­ния, защищен­ного нас­тоящей Themida.

warning

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

Нес­мотря на широкую популяр­ность Themida, высокую сто­имость взло­ма и, соот­ветс­твен­но, боль­шое количес­тво ману­алов и виде­оуро­ков в сети, они поч­ти всег­да бес­полез­ны. Они в основном опи­сыва­ют сня­тие ста­рых вер­сий защиты 1 и 2. Уже третья вер­сия устро­ена нас­толь­ко слож­нее, что в паб­лике нет уни­вер­саль­ных инс­тру­мен­тов и скрип­тов для ее взло­ма или обхо­да. И даже на ста­рых вер­сиях всег­да находят­ся какие‑то нюан­сы, исклю­чающие воз­можность уни­вер­саль­ного однокно­поч­ного решения.

По­это­му я не буду оста­нав­ливать­ся сей­час на «тра­дици­онных» спо­собах обхо­да «Фемиды», а вмес­то это­го опи­шу наибо­лее прос­той и понят­ный метод иссле­дова­ния, взло­ма и пат­ча одно­го из защищен­ных гра­фичес­ких при­ложе­ний. Эта прог­рамма исполь­зует Themida треть­ей вер­сии, а мы, как обыч­но, воору­жим­ся лишь минималь­ным набором дос­тупных инс­тру­мен­тов (x64dbg и его пла­гины).

Нуж­но заметить, что для обна­руже­ния Themida не сле­дует силь­но полагать­ся на DetectItEasy. С этим про­тек­тором гораз­до луч­ше работа­ют Nauz File Detector и ExeInfo.

Nauz File Detector

ExeInfo

Ви­зуаль­но же на при­сутс­твие «Фемиды» в фай­ле как бы намека­ет наличие меж­ду сек­циями .idata и .pdata двух сек­ций с неп­роиз­носимы­ми наз­вани­ями из 8 слу­чай­ных сим­волов. Впро­чем, в треть­ей вер­сии раз­работ­чики уже не стес­няясь пря­мо называ­ют сек­ции .themida и .boot. Код гаран­тирован­но зашиф­рован, упа­кован и ста­тичес­кому ана­лизу и ревер­су не под­дает­ся.

По­это­му поп­робу­ем заг­рузить нак­рытую Themida прог­рамму в наш любимый отладчик x64dbg. Разуме­ется, все пло­хо: при стар­те отладчик про­вали­вает­ся в вир­туаль­ную машину, столь страш­ную на вид, что отби­вает­ся вся­кая охо­та с ней раз­бирать­ся. Хотя в отдель­ных слу­чаях это­го не избе­жать, ска­жем, при при­вяз­ке кон­крет­ной прог­раммы к компь­юте­ру или дон­глу. В любом слу­чае этот путь неп­рост и тер­нист: вир­туаль­ная прог­рамма мгно­вен­но палит отладчик, вдо­бавок она отсле­жива­ет тай­минг похож­дения отдель­ных учас­тков сво­его кода.

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

Тол­ку, прав­да, с это­го нем­ного: пос­ле такого бря­ка трас­сиров­ка валит прог­рамму наповал. Но это уже прог­ресс — далее по стан­дар­тной схе­ме, опро­бован­ной нами ранее на Enigma, Obsidium и про­чих, про­буем сдам­пить прер­ванный про­цесс при помощи дру­гого спе­циаль­но пред­назна­чен­ного для это­го пла­гина — Scylla.

При­ложе­ние дам­пится успешно. Как обыч­но, надо искать точ­ку вхо­да и во мно­гих слу­чаях это­го впол­не дос­таточ­но, одна­ко, наш слу­чай неп­ростой. Заг­рузив сдам­плен­ный файл в IDA мы обна­ружи­ваем, что наше при­ложе­ние неп­лохо обфусци­рова­но: на боль­шинс­тве вызовов импорти­руемых фун­кций (в час­тнос­ти, на биб­лиотеч­ных вызовах QT, на котором написа­на ана­лизи­руемая нами прог­рамма), сто­ят заг­лушки, ведущие на изрядной дли­ны цепоч­ки безум­ного код подоб­ного вида:

00007FF6F4FA521D | E9 DB2F5F00 | jmp 7FF6F55981FD00007FF6F4FA5222 | E9 E5E31D00 | jmp 7FF6F518360C00007FF6F4FA5227 | E9 25064500 | jmp 7FF6F53F585100007FF6F4FA522C | E9 375E5900 | jmp 7FF6F553B06800007FF6F4FA5231 | 73 D5 | jae 7FF6F4FA520800007FF6F4FA5233 | CF | iretd00007FF6F4FA5234 | 0026 | add byte ptr ds:[rsi],ah00007FF6F4FA5236 | 49:89ED | mov r13,rbp...00007FF6F55981FD | 48:83EC 08 | sub rsp,800007FF6F5598201 | E9 E6DB0200 | jmp 7FF6F55C5DEC...00007FF6F55C5DEC | 48:83EC 08 | sub rsp,800007FF6F55C5DF0 | 48:83EC 08 | sub rsp,800007FF6F55C5DF4 | 48:81EC 08000000 | sub rsp,800007FF6F55C5DFB | 48:891C24 | mov qword ptr ss:[rsp],rbx00007FF6F55C5DFF | 8F0424 | pop qword ptr ss:[rsp]00007FF6F55C5E02 | 8F0424 | pop qword ptr ss:[rsp]00007FF6F55C5E05 | E9 83000100 | jmp 7FF6F55D5E8D...

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

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

Ответить

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