Триальный конь. Как сломать trial, защищенный Enigma Protector

По­пуляр­ный сре­ди раз­работ­чиков соф­та про­тек­тор Enigma пред­лага­ет нес­коль­ко вари­антов защиты при­ложе­ний. Один из них — уста­новить проб­ный режим с огра­ниче­нием на количес­тво запус­ков, дней исполь­зования или рабоче­го вре­мени. Кажет­ся, пре­одо­леть такую защиту неп­росто. Одна­ко для нас­тояще­го иссле­дова­теля нет прег­рад!

warning

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

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

info

За­щищен­ные с помощью Enigma при­ложе­ния мож­но дизас­сем­бли­ровать — об этом под­робно рас­ска­зыва­лось в статье «Боль­ше не эниг­ма. Лома­ем защиту при­ложе­ний Enigma x64 акту­аль­ных вер­сий».

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

Для понима­ния про­цес­са ска­чаем с офи­циаль­ного сай­та пос­леднюю демовер­сию защиты, бла­го они ее сво­бод­но раз­дают. Запус­тив прог­рамму, мы уви­дим в меню Settings вклад­ку Trial Control. Здесь находят­ся нуж­ные нам раз­делы: Limitation by Executions Count (огра­ниче­ние на количес­тво запус­ков), Limitation by Days Count (огра­ниче­ние на количес­тво дней), Limitation of Execution Time (огра­ниче­ние на количес­тво прог­рам­мно­го вре­мени) и Time Control (про­вер­ка мух­лежа с перево­дом вре­мени).

Вклад­ка Trial Control ути­литы Enigma Protector

Осо­бен­ности этих режимов зак­люча­ются в том, что при пер­вом запус­ке прог­рамма «при­вязы­вает­ся» к текуще­му момен­ту и ведет отсчет сво­ей работы имен­но от него. Тех­нология сбро­са подоб­ного три­ала зак­люча­ется в том, что­бы вер­нуть сис­тему в сос­тояние, пред­шес­тву­ющее запус­ку, пос­ле чего прог­рамма будет стар­товать как буд­то в пер­вый раз пос­ле уста­нов­ки. Нап­ример, с режимом Limitation from Date till Date (огра­ниче­ние на запуск в кон­крет­ный вре­мен­ной отре­зок) такой номер не прой­дет, пос­коль­ку при­ложе­ние уже не при­вяза­но к момен­ту пер­вого запус­ка. Защита про­веря­ет лишь текущее сис­темное вре­мя, незави­симо от того, запус­калась прог­рамма до это­го на дан­ном компь­юте­ре или нет. Хотя, конеч­но, мож­но обма­нуть и этот метод защиты, сбро­сив три­ал (что­бы исклю­чить запоми­нание текуще­го вре­мени с целью обма­нуть Time Control, если этот режим так­же вклю­чен) и переве­дя часы на нуж­ный вре­мен­ной интервал.

Од­нако хва­тит лиричес­ких отступ­лений, пора брать­ся за дело! Давай защитим любое при­ложе­ние, огра­ничив количес­тво его запус­ков, а потом сбро­сим эту защиту. По счастью, раз­работ­чики Enigma и здесь пош­ли нам навс­тре­чу, бес­плат­но пре­дос­тавив такую воз­можность в демовер­сии сво­его про­тек­тора. Для это­го откры­ваем вклад­ку Limitation by Executions Count, уста­нав­лива­ем вер­хний чек­бокс и в окош­ке Maximum count of executions ука­зыва­ем нуж­ное количес­тво запус­ков (ска­жем, три).

Нас­тра­иваем огра­ниче­ние на количес­тво запус­ков

Те­перь соберем защищен­ную вер­сию прог­раммы, которая при каж­дом стар­те будет показы­вать пятисе­кун­дное окош­ко рек­ламы Enigma (что поделать, за халяву при­ходит­ся пла­тить) и счи­тать запус­ки. Через три запус­ка вмес­то прог­раммы ты уви­дишь сооб­щение о пре­выше­нии лимита, озна­чающее, что халява закон­чилась.

Для начала поп­робу­ем пой­ти самым тер­нистым путем — попыта­емся снять защиту сов­сем. Как я уже писал в пре­дыду­щей статье, прог­рамма, защищен­ная Enigma вер­сии стар­ше 4, прос­то не дам­пится. Вер­нее, дам­пится, но на выходе получа­ется толь­ко сле­пок кода реали­зации защиты, который нам не силь­но нужен. Поп­робу­ем разоб­рать­ся, как сдам­пить прог­рамму руками, бла­го незащи­щен­ная вер­сия у нас есть. Открыв исходную прог­рамму, мы уви­дим в ней 12 сек­ций:

Name VirtSize RVA PhysSize Offset Flag
.text 00E8CEBC 00001000 00E8D000 00001000 60D00060
.data 000103F8 00E8E000 00010400 00E8E000 C0700040
.rdata 003C0A80 00E9F000 003C0C00 00E9E400 40600040
.qtmetad 00000620 01260000 00000800 0125F000 40600040
.eh_fram 002B5648 01261000 002B5800 0125F800 40300040
.bss 00003AC0 01517000 00000000 00000000 C0600080
.edata 00000E04 0151B000 00001000 01515000 40300040
.idata 000055C4 0151C000 00005600 01516000 C0300040
.CRT 00000038 01522000 00000200 0151B600 C0300040
.tls 00000008 01523000 00000200 0151B800 C0300040
.rsrc 000428B0 01524000 000428B0 0151BA00 C0300040
.reloc 00062CFC 01567000 00062E00 0155E400 42300040

В защищен­ной прог­рамме эти сек­ции тоже при­сутс­тву­ют, прав­да без наз­ваний, фла­гов и в зашиф­рован­ном виде:

1 00E8D000 00001000 0061CC00 00000600 E0000040
2 00011000 00E8E000 00001A00 0061D200 E0000040
3 003C1000 00E9F000 001E8E00 0061EC00 E0000040
4 00001000 01260000 00000200 00807A00 E0000040
5 002B6000 01261000 000BFA00 00807C00 E0000040
6 00004000 01517000 00000000 00000000 C0600080
7 00001000 0151B000 00000000 008C7600 E0000040
8 00006000 0151C000 00000800 008C7600 E0000040
9 00001000 01522000 00000200 008C7E00 E0000040
10 00001000 01523000 00000000 008C8000 E0000040
11 00043000 01524000 00000000 008C8000 E0000040
12 00063000 01567000 00000000 008C8000 E0000040

То, что они зашиф­рованы, — еще пол­беды, пос­коль­ку по мере заг­рузки сек­ции рас­шифро­выва­ются: в этом мы можем убе­дить­ся, «всплыв» отладчи­ком во вре­мя работы уже заг­ружен­ной прог­раммы. Одна­ко здесь нас ожи­дает неп­рият­ный сюр­приз — жиз­ненно необ­ходимые нам сек­ции импорта и экспор­та (в нашем при­мере .edata и .idаta) запол­нены нулями. Злов­редная Enigma очи­щает их пос­ле заг­рузки при­ложе­ния в память, что­бы осложнить нам жизнь. В прин­ципе, таб­лица экспор­та у нас есть, но импорт, ори­гиналь­ные наз­вания и фла­ги сек­ций отсутс­тву­ют, не говоря уже о точ­ке вхо­да в при­ложе­ние.

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

Ответить

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