Obsidium fatality. Обходим триальную защиту популярного протектора

Се­год­ня мы про­дол­жим раз­говор о популяр­ных защитах прог­рамм и о спо­собах их обхо­да. На оче­реди Obsidium, который счи­тает­ся одним из самых серь­езных инс­тру­мен­тов наряду с VMProtect и Themida. Сре­ди заяв­ленных фун­кций — пол­ный джентль­мен­ский набор: вир­туали­зация, анти­отладка, обна­руже­ние VM, защита памяти, про­вер­ка целос­тнос­ти, защита импорта, свой API для интегра­ции в поль­зователь­скую прог­рамму и про­чие вкус­ности, осложня­ющие жизнь прос­тому хакеру.

warning

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

На при­мере прог­раммы, исполь­зующей одну из пос­ледних вер­сий Obsidium, поп­робу­ем разоб­рать сла­бые и силь­ные мес­та этой защиты. В статье, пос­вящен­ной дру­гому популяр­ному про­тек­тору — Enigmа, я рас­ска­зывал о популяр­ном у раз­работ­чиков спо­собе защиты при­ложе­ния: поль­зовате­лю пре­дос­тавля­ется озна­коми­тель­ный пери­од работы с прог­раммой — мож­но исполь­зовать ее опре­делен­ное вре­мя или выпол­нить опре­делен­ное количес­тво запус­ков. Есть такая воз­можность и у Obsidium. Ска­чав с офи­циаль­ного сай­та демовер­сию защиты (пос­ледняя акту­аль­ная вер­сия — 1.7.3.3), запус­каем ее.

Ин­терфейс Obsidium

Для начала, как нам совету­ют, соз­дадим новый про­ект и в его нас­трой­ках ука­жем защиту при­ложе­ния в виде три­аль­ного пери­ода. Для это­го жмем в левой вер­тикаль­ной панели гра­фичес­кую кноп­ку с шес­терен­ками Settings и откры­ваем вто­рую спра­ва вклад­ку Time trial.

Нас­тра­иваем три­аль­ный пери­од для прог­раммы

Как видишь, здесь при­сутс­тву­ет такой же джентль­мен­ский набор фун­кций, как и в Enigma:

  • три­ал до опре­делен­ной даты;
  • три­ал на опре­делен­ное количес­тво дней;
  • три­ал на опре­делен­ное количес­тво запус­ков.

Нем­ного неоче­вид­ным кажет­ся пред­назна­чение четырех полей вво­да в левой ниж­ней час­ти окна под общим заголов­ком User-defined trial counters. На самом деле, как я уже говорил, для тех при­веред­ливых поль­зовате­лей, которым мало стан­дар­тной защиты по вре­мени или количес­тву запус­ков, Obsidium пред­лага­ет набор сво­их фун­кций для интегра­ции в прог­рамму. В качес­тве одно­го из вари­антов раз­работ­чик может уста­нав­ливать собс­твен­ные три­аль­ные счет­чики, кон­тро­лиру­емые пря­мо из кода во вре­мя выпол­нения прог­раммы. Это четыре целочис­ленные 16-бит­ные перемен­ные, сох­раня­емые в сис­теме до сле­дующе­го запус­ка прог­раммы, зна­чения которых мож­но читать фун­кци­ей int obsGetTrialCounter(DWORD dwCtrIdx) и дек­ремен­тировать фун­кци­ей bool obsDecTrialCounter(DWORD dwCtrIdx, short wValue). Эту фун­кцию мож­но исполь­зовать, нап­ример, если мы хотим, что­бы прог­рамма пос­ле десяти сох­ранений бло­киро­вала фун­кцию Save и про­дол­жала даль­ше работать как ни в чем не бывало, без даль­нейшей воз­можнос­ти сох­ранить файл на диск. Этот инс­тру­мен­тарий пре­дос­тавля­ет поль­зовате­лям более гиб­кие воз­можнос­ти управле­ния три­алом.

За­щита уста­нов­лена!

Пос­ле уста­нов­ки нуж­ных парамет­ров защиты жмем вто­рую сни­зу кноп­ку в левой панели с над­писью PROTECT, затем во вклад­ке Executables выбира­ем файл защища­емой прог­раммы и, наконец, нажима­ем кноп­ку Protect All. Теперь наше при­ложе­ние под защитой демовер­сии Obsidium, о чем нам будет напоми­нать раз­дра­жающее окош­ко при каж­дом ее запус­ке.

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

Obsidium v1.5.4.x - [ v1.6.x.x - 1.x.x ] - Obsidium Software - www.obsidium.de *ACM , Overlay : FE4711... Nothing detected

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

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

Ответить

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