Крекінг: практика злому і теорія захисту

Для початку трохи теорії. Сама назва «крек» (а в розмовному «кряки») перекладається як «Тріщина», а в розмовній англійській як «Крадіжка зі зломом». Переклад говорить сам за себе (Прим. Автора - для чайників: крЕкінг - це злом шароварного (платного, від слова «Shareware») софта (програмного забезпечення), з метою отримання повнофункціональної версії, розблокування обмежень, обумовлених неліцензійної або незареєстрованої копією, а також продовження / зняття тріального (від слова Trial - випробувального) періоду або просто прибирання набридає вікна, в якому при кожному запуску вам нагадують про реєстрацію). Саме заняття крЕкінг з'явилося з появою першого платного софта. Відповідно відразу знайшлися люди (так би мовити Робін-Гуди), яким дуже не сподобалося, що за якийсь програмне забезпечення розробники почали ще й брати гроші. Вони не просто заради практики почали ламати софт, а й вільно поширювати свої «кряки» в інтернеті, напевно щоб принести загальну радість халяви в світ (або щоб дати розробникам зрозуміти, що вони сміливо можуть повністю відмовитися від усіх своїх захистів, тому що не було ще не зламаною захисту). Гаразд, перейдемо до справи ...

Щоб вивчити теорію захисту від злому ПО потрібно вивчити всі тонкощі самого злому. Так що ми спочатку почнемо саме з нього. Візьмемо пару програм і походу розберемося як, що і куди. Ось. В альтернативу всіх інших статтях по крЯкінгу я візьму НЕ закордонний софт, а наш радянський, чи то пак софт країн колишнього СРСР. До речі, тому що в Росії / Україні більше крекерів, ніж в інших країнах, то в основному наші умільці дійсно дуже добре захищають свій софт. Але, як відомо, з усіх правил завжди є винятки. Усе. До справи…

Почнемо з самого простого. Правда не зовсім з самого, тому що брати для прикладу такі програми, в яких пароль для її реєстрації спокійно лежить в текстових ресурсах, я не збираюся, тому що це повний примітив. Тому візьмемо для початку таку радянську прогу, в якій постійно просять ввести пароль, а інакше программуля зовсім відмовиться працювати.

Я взяв дійсно потрібну програму «Зодчий», яка представляє собою менеджер бази даних СНиПов (будівельні норми і правила) і ГОСТів для архітекторів. На доказ, що вона настільки корисна, я пошукав в інтернеті на неї вже зроблений кряком. І дуже здивувався, коли не знайшов жодного безкоштовного кряком, а найдешевший з них коштував близько 312грн. Що все одно набагато дешевше ніж ліцензія (вже повірте). До речі, не поспішайте качати з Інтернету все підряд кряком на Вас софт, тому що крім загрози «нахапати» вірусів існують ще й просто «лохотрони» (пустушки), в яких вам натомість на в майбутньому висланий вам код ви зобов'язуєтеся поповнити крякери телефонний рахунок або ще щось на подобі цього. Не ведіться.

Гаразд, повернемося до нашої справи. За натисканні на кнопку «Зареєструвати» з'являється поле з уже введеної половиною пароля і пропозиція ввести другу половинку. Давайте спробуємо ввести неправильний (раптом програма і так запуститься). На жаль прога після натискання на Enter тут же закрилася. «Що ж тут робити?», Запитаєте ви. А я вам відповім. В даному випадку є 7 підходів. Перерахуємо кожен з них:

Ось. Щоб здійснити кряком хоч одним з цих методів потрібно подивитися не стиснута програма зовнішнім пакувальником. Програми часто стискають в основному через захисту, через збереження авторських прав і просто через поліпшення компактності програми. Найпоширеніші пакери (від англ. Pack - «упаковувати»): UPX, AsPack (і AsProtect), PECompact, WinUPack, Telock, NeoLite, Yoda, PE-Shield, Armadillo ... Вони стискають як і всі (або не частина) ресурси так і сам код програми, що приводить до неможливості її дизассемблирования (декомпіляцію в вихідний код асемблера), налагодження (трасування) і навіть редагування ресурсів. Тому перед кряком обов'язково потрібно перевірити піддослідну прогу на «стислість».

Є чимало програм дізнаються чому саме стиснута програма і багато анпакеров (тобто пакувальників) Є чимало програм дізнаються чому саме стиснута програма і багато анпакеров (тобто пакувальників). Я віддаю перевагу 2 самих, на мою думку, кращих з них. Це: PEiD і PE-scan. У кожного з них своя «родзинка»: PEiD може навіть показати якою мовою програмування написана прога, а в PE-scan навіть вбудовані деякі стандартні розпаковують.

Як бачимо наш «Зодчий» (його виконуваний файл має ім'я ARM_ARH.EXE) нічим не стиснутий. А PEiD навіть показує нам, що він написаний на мові Borland Delphi. Також вони обидва можуть показати наочну інформацію про структуру файлу, в яку вам вникати зовсім не обов'язково. Оскільки наш файл нічим не стиснутий ми можемо сміливо приступати до всього іншого.

Давайте спробуємо почати з самого простого, з перевірки шифрується чи пароль. Для цього нам знадобиться дЕбаггер (від анлг. Debugger - «відладчик»). Я прихильник «OllyDBG». Так як вважаю, що ера SoftICE'а вже в минулому (але він ще актуальний для налагодження драйверів). Відкриваємо в ньому наш ARM_ARH.EXE, чекаємо поки Оля ( «Olly») проаналізує весь код і починаємо налагодження. Тиснемо F9 (Run), наш Зодчий запускається без exception'ов (від англ. Exception - «виключення»). Це означає, що на нього «не поставили» ніякої анти-налагоджувальної захисту.

Вводимо замість 2-ї половини пасу (пароля) що завгодно і схрестивши пальці молимося, що зараз відловимо необхідний пароль. Тиснемо на Enter, перед нами «постає» вікно Olly, в статусному панелі якого ми можемо прочитати, що виник екзепшн за адресою 0EEDFADE. В принципі це нам і треба. Тепер «шарім» поглядом по дампи пам'яті (праве нижнє вікно). Тут ми бачимо все, що сталося з програмою з моменту її запуску (перехід за адресами, завантаження модулів, рядків, виклик функцій і повернення з них). Але, на жаль, пароля ми тут так і не знайшли. Але не турбуйтеся, не все вже так погано.

Спробуємо таку теорію, а що якщо повний пароль завантажується тільки тоді, коли ми вводимо пароль заново повністю, а не тільки 2-у половину. Для цього тиснемо радіо-кнопку «Повторно на величина це PC» і перед нами з'являється абсолютно порожній TEdit (поле для введення). Вводимо знову що попало і тиснемо Enter. Знову таки вилітає exception з тією ж адресою. Помилка, швидше за все, обумовлена ​​запитом програми на вихід. Знову «промотувати» весь дамп в пошуках паролів. І ... натикаємося на дуже цікаві рядки:

0012F0D0 | 00FA2E18 ASCII "75ZS8H"

0012F0D4 | 00FA2E04 ASCII "A3R6NR"

0012F0D8 | 00FA2DC8 ASCII "75ZS8H2238859"

0012F0DC | 00F9F170 ASCII "A3R6NR306767043" // якщо пам'ятаєте, це вже введён-

0012F0E0 | 00F9F18C ASCII "A3R6NR306767043-?" ная половина нашого пароля.

0012F0E4 | 00F9F128 ASCII "033005"

Хм. Не важко побачити, що ASCII-рядок "75ZS8H2238859" дуже змахує (по довжині) на другу половину. Варто спробувати. І ... Вітаю, у нас все вийшло! Скріншот можете подивитися нижче.

Ну ось. З одним простим кряком ми впоралися. Тепер у нас є пароль, який ми можемо продавати за 312грн. Але у нас є ще й мізки, тому ми його і зберігати не будемо, тому що знаємо, що ці дії припадають під статтю КК України. Тому ця стаття розглядається тільки як наочний приклад, в якому показується наскільки слабка буває захист у програмного забезпечення. І за будь-яке невідповідне використання даного матеріалу відповідальність несе тільки сам читач.

Так перейдемо до більш складного кряком. Візьмемо дуже популярний на сьогоднішній день плеєр: Light Alloy. Його зробила наша радянська компанія-розробник Softella ( http://www.softella.com/ ).

Для реєстрації розробники пропонують нам відгадати одну з загадок. Але якщо нам дуже важко кожен раз їх вгадувати, то ми можемо написати крек. Також під час запуску спочатку показується NUG-вікно. Тобто вікно, з повідомленням про демо-версії:

На заголовку вікна LA красується неприємна напис UNREGISTERED. А сама реєстрація проходить в такому вигляді:

Ну що ж, як ви вже здогадалися, нам слід шукати «розвилку» перевірки пароля. Почнемо. Спочатку перевірити не запакований чи чимось наш LA.exe. Відправляємо в PEiD і ... бачимо, що він нахабно стиснутий найпопулярнішим пакером UPX.

Щоб розпакувати його лізьте в НЕТ по лінк http://upx.sourceforge.net/ і качайте распаковщик UPX'а або скачайте його разом з GUI (графічний інтерфейс), мій називається UPX X-Shell 1.02 ( http://www.urixsoft.nm.ru/ ). Відкрийте його в ньому і натисніть кнопку «Видобути». Якщо на статусної панелі з'явиться напис «... БЕЗ ПОМИЛОК», значить все в порядку.

Тепер ви побачите, що розмір LA.exe збільшився з 894КБ аж до 2,75МБ і поряд з файлом з'явилася резервна копія LA.ex ~ зі старим розміром. Відмінно, розпакували.

Тепер до справи. Завантажуємо наш плеєр в Оллі і запускаємо (F9). Відразу ж вилітає екзепшн. Це перша протівоотладочная захист. Але вона легко пропускається Оллі після натискання Shift + F9.

Тепер іщём текстові посилання (string rпосле eferences), які відповідають смислу. Для цього в головному вікні налагодження з ярликом «С» і заголовком «CPU - main thread, module LA» натисніть праву кнопку миші -> Search for-> All referenced text strings і промотувати в пошуках чого-небудь. Я напав на такий рядок: ASCII "Registration is successful. Please restart application."

Подвійний клік і ми переносимося саме на ту адресу команда якого підвантажує цей текст. За логікою, розвилка повинна бути вище. Йдемо вгору і бачимо команду порівняння test і стрибок відразу ж неї.

Слово short означає - короткий, тобто близький стрибок. Бачимо що він здійснюється (це показує маленька галочка ліворуч від шістнадцятирічного уявлення команди) і що він перестрибує в цьому ж файлі (LA) на адресу 0050417А. Сама команда je означать jump if equal, тобто стрибок при рівності. З адреси 0050417А йдуть команди присвоєння / приміщення mov і приміщення в регістр загального призначення edx рядки про неправильність коду.

Це означає, що в майбутньому вона з будь-якого зголоситься, швидше за все в процедурі яка викликається командою call (від англ. Call - «викликати») за адресою 00504186. Ось. Тоді пробуємо «перемкнути» стрілку (умовний стрибок). Тобто ми стрибнемо на повідомлення «Access code is not valid» вже тоді, коли ми введемо саме правильний пароль. А при введенні будь-якого іншого пароля програма продовжить своє виконання вниз по коду і дійде до необхідного «Registration is successful». Це самий стандартний і найпростіший метод крЯкінга.

Спочатку завершимо попередню сесію налагодження натиснувши Ctrl + F2. Клацаємо двічі по рядку з нашим стрибком (адреса 0050415D) і перейменовуємо je в jne (jump if not equal). І знову тиснемо Run (F9).

На жаль ... Як це не дивно LA показує все те саме повідомлення про неправильність пароля. А це означає, що програма там навіть і не проходить ... А це просто програмістський обман.

Ну що ж, ми не здаємося. Стрілки «>», зліва від коду команд, означають, що на команду за цією адресою можливий перехід програми з якогось віддаленого адреси. Тобто на мічений стрілкою адреса відбувається стрибок або виклик процедури.

Тоді давайте спробуємо поставити брейк (breakpoint) на команду з адресою 0050418B. Для цього потрібно «підсвітити» мишкою або клавой цю команду і натиснути F2. Адреса подсветится виділяється кольором. Тиснемо Ctrl + F2 і знову F9.

Програма все так же запускається, але при введенні неправильного пароля зупиняється саме так, де ми поставили брейк і передає управління в відладчик. А це значить, що ми з вами не помилялися і що все-таки ми на правильному шляху. Значить потрібно підніматися ще вище щоб знайти «справжній» ділянку порівняння і стрибок наступний за ним.

Знаходимо найближчі (втім і єдині в цій подпроцедуре, в якій ми знаходимося) умовні переходи:

00504096 |. 0F84 86000000 je LA.00504122

005040E3 75 2A jnz short LA.0050410F

На обох стоять маленькі галочки (просто вони не скопіювати як символ). Сміливо ставимо брейк на них і перезапускаємо налагодження. При натисканні кнопки підтверджує введення пароля у нас «вилітає» наш брейк. Тобто все йде за планом.

Тепер чисто для тесту ми міняємо його з je на jne і трассіруем методом Step over (покомандного налагодження програми без входу в подпроцедуру). Коли доходимо до нашого другого jump'а ми бачимо, що він теж «збирається» стрибнути (Jump is taken). А якщо він стрибне ми знову потрапимо на «... code is invalid». Тобто ми зіткнулися з подвійною перевіркою пароля.

Це свідчить про наявність більшої кількості звивин у розробників ніж одна. Хм, але нам то що. Сміливо міняємо jnz (все одно, що jne) на зворотний йому je і насолоджуємося результатом:

Тепер треба зберегти наші зміни в виконуваний файл. Для цього тиснемо правую-> Copy to executable-> All modifications. Відкриється вікно «D», натисніть «закрити» його. І вам запропонують зберегти його. Введіть щось на подобі LA (cracked) .exe.

Тепер давайте перевіримо на працездатність нашу збережену програму. Запускаємо і опа ... Програма «вибиває» дві помилки. Але ж в отладчике у нас все працювало. А це означає, що розробники поставили ще й подвійну перевірку справжності пароля при запуску. Для цього вони і просили перезапустити програму. Під виглядом, що вона так не може оновитися.

Ну добре. Завантажуємо вже LA (cracked) в Оллі. Запускаємо. Натикаємося на два exception'а, пропускаємо їх через щіфта і ... перед нами красується все той же вікно з написом «UNREGISTERED».

Хм ... А адже чому б не «відштовхнутися» саме від нього. Нишпоримо в текстових посиланнях і знаходимо:

005558A1 |. B9 6C5B5500 mov ecx, LA_c.00555B6C; ASCII "- UNREGISTERED"

Брейк можна не ставити, тому що програма точно проходить тут (Це посилання тільки одна). Йдемо вгору в пошуках можливих корисних розвилок, яких по ідеї повинно бути дві ...

0055584E |. 75 70 jnz short LA_c.005558C0

0055586D |. 75 51 jnz short LA_c.005558C0

В даному випадку маленькі галочки (які позначають еквівалентність) показують нам, що стрибок не відбудеться. А значить програма «спуститься» до «UNREGISTERED». Отже нам треба зробити ці стрибки. Міняємо їх на je, зберігаємо зміни і запускаємо вже збережений файл.

Все супер. Перед нами постає віконце Light Alloy'я без всяких UNREGISTERED. Відмінна робота!

Так. Наступні приклади я буду описувати трохи швидше. Все-таки ви ж уже теж досвідчені ...

Візьмемо ще одну радянську прогу SlyControl Візьмемо ще одну радянську прогу SlyControl. Це програма для дистанційного керування комп'ютером з всіляких пристроїв (WinLIRC, Tekram M205, FlyRC2 ...). Російським, або людям знаючим російську мову цю програму можна реєструвати кожен місяць (до речі, куди вводити повний код я так і не знайшов), але ми ж максималісти. КрЯкнем її ...

За що ми зачепимося? Хм. Отладчик розпізнає тільки латинські букви. Пошукаємо в текстових посиланнях мило (e-mail) розробника ... Нема.

О, кнопка xUSSR. Шукаємо ... Є! Те що треба. Але їх є дві. Ставимо брейк на обидві.

004165D7. BA A26C4A00 mov edx, SlyCtrl2.004A6CA2; ASCII "xUSSR"

00416FED. BA 2C6E4A00 mov edx, SlyCtrl2.004A6E2C; ASCII "xUSSR"

В принципі, програма повнофункціональна, залишається тільки позбавити її цього NUG'а (повідомлення, що нагадує про реєстрацію). Трассіруем ... Пропускаємо пару екзепшнов і «натикаємося» на перший брейк (для інтересу можете переконатися в тому, що прога не буде проходити через другий брейк). Але вікно реєстрації ще не з'явилося. Так що трассіруем далі, що б знайти саме його виклик. І доходимо до:

00413D6D FF92 E8000000 call dword ptr ds: [edx + E8]; jmp. & vcl60. @ Forms @ ...

00413D73. 8B0D 7CEC4A00 mov ecx, dword ptr ds: [4AEC7C]; SlyCtrl2._RegForm

В даному випадку краще піти вгору і перемкнути «розвилку», ніж просто заповнити виклик Рег.Форми NOP'амі. Та й на головній формі красується напис:

Та й на головній формі красується напис:

Так що йдемо вгору ... І бачимо одну дуже примітну структурку:

І бачимо одну дуже примітну структурку:

Адже це спокійно може бути порівняння. Змінюємо. До нашої з вами радості не з'являється жодного NUG'а, а заголовок форми дуже змінився в кращу сторону:

До нашої з вами радості не з'являється жодного NUG'а, а заголовок форми дуже змінився в кращу сторону:

Ось так ось ми поламали пару радянських програм.

А тепер я хочу вам показати як робляться NO-CD. Тобто кряком ігор з метою їх запуску без диска і забезпечення їх повнофункціональний. Візьмемо вже далеко не радянську гру «Heroes of Might and Magic V» версії 1.0 від видавця 1С. Встановимо. запустимо:

Як бачите гра «просить» диск. Якщо у вас здоровенний гвинт і вам не в лом вставляти півтора гігабайтовий віртуальний диск, то можете нічого і не робити. Але ми її спробуємо крякнутий.

Програма нічим не стиснута і написана на «Micorsoft Visual C ++ 7.0 Method2 [Debug]». Завантажуємо її в Оллі і ... через здорового розміру (11,26Мб) Оллі переглючівает і він висне на 97,7 відсотках аналізу файлу.

Може через пів дня він і довантажиться, але я зі своїм PIV 640 3,2GHz вирішив, що 10 хвилин вистачило, щоб зрозуміти, що він вже не завантажиться.

Тоді наважуємося використовувати більш примітивний софт для кряком, такий як W32Dasm і HIEW. Колись я «сидів» тільки на них. Dasm (disassembler) тужиться, але буквально через 3 хвилини все-таки повністю завантажує і аналізує наш H5_Game.exe.

Натискаємо Ctrl + L (Load) замість F9 (Оллі) і бачимо знову віконце з попередженням про вставці диска. Перемикаємося на Дасм, тиснемо Паузу (кнопкою чи прогалиною) і бачимо, що управління не передалося відразу Дасму.

Ну нічого, тиснемо на повтор і бачимо як Дасм нам відразу показав адреса MessageBox'а, в якому ми тільки що натиснули «Повтор»:

Походу тут конструкція cmp / jne відповідальна за наш вибір натискання кнопок ( «Повтор» або «Скасувати»), але сам факт, що діалог вже викликаний присутній. Значить йдемо вгору і натикаємося на такі рядки:

Стрибки jbe і jne можете перевірити, але нічого не вийде. Це означає що сюди програма «стрибає» з іншої ділянки проги. А з якого нам показують два рядки: Referenced by a ... Jump at Addresses:

і 3 адреси стрибків, з яких може бути здійснений стрибок сюди, до нашого MessageBox'у.

Шукаємо їх в АСМ-лістингу (можна Промотка, а можна через «Перейти» Shift + F12) і ставимо на все 3 стрибка брейк. Букви «(C)» і «(U)» означають «Conditional» (від англ. Умовний) і «Unconditional» (безумовний).

: 00401181 0F8598000000 jne 0040121F

: 004011AB 7472 je 0040121F

: 004011F8 7525 jne 0040121F

І «женемо» прогу далі (F9). Бачимо, що спрацьовує перший (верхній) брейк, потім кілька разів стрибає на 2-ой, але в кінцевому випадку на MessageBox стрибає все-таки з самого нижнього.

Пробуємо его поміняти. Гиги) Не вийшло ?! ;-) Правильно, тому що W32Dasm не призначений для динамічного редагування декомпілювати файлу.

Для цього відкриваємо його в 16-ковий дізассемблерном редакторі HIEW. Я особисто перейменовую файл в H5_Game (c) .exe.hiew і вибираю HIEW в «відкрити за допомогою».

Коли відкривається HIEW натисніть Enter 2 рази. Це переведе його в режим дизассемблера.

Переходимо на адресу нижнього стрибка. Для цього натисніть F5 і введіть адресу з точкою: .004011F8.

Натискаємо F3 (правка) і якщо ви добре розбираєтеся в 16-терічной системі числення, то можете просто замінити 5 на 4 в 2-х байтах: 75 25. А якщо вам важко це пам'ятати, то можете натиснути ще й F2 і правити саму асемблерну команду. Зберігаємо (F9). Тепер копіюємо з переіменовкой файл H5_Game (c) .exe.hiew в H5_Game (c) .exe і запускаємо. Але перед нами знову з'являється все те саме повідомлення ...

Знову переглядаємо код. І бачимо, що стрибок:

: 0040121D 7533 jne 00401252

Повинен перестрибувати через MessageBox. Значить він не здійснюється.

Так давайте перемкнемо його. Знову в HIEW. З 7533 в 7433. Зберігаємо (F9). Перейменовуємо. І запускаємо. Ги. Гра починає завантажуватися.

Тепер візьмемо досить схожий випадок. Гра: «FIFA2007» (Ви скажете: «Так вона у мене і так без диска йде!». Це означає, що у вас швидше за все нова версія з російськими коментаторами або ваша гра від іншого видавця). Встановлюємо, запускаємо:

Встановлюємо, запускаємо:

Подивимося що ми зможемо з цим зробити. Діємо як і в минулий раз. PEiD нам говорить, що fifa07.exe нічим не стиснутий. Тут, на мою, саме реально піти найпоширенішим методом налагодження: ставити брейк на WinAPI функції, викликають діалог або показують вікно. Ну, для цього їх потрібно знати. Ось пару найпоширеніших: MessageBoxA, MessageBoxW, ShowWindow, ShowWindowEx.

Завантажуємо фіфу в Оллі. Відкриваємо, якщо не відкрито за замовчуванням, плагін «Command line» (Plugins-> 2. Command line). Пишемо туди «bpx MessageBoxA», тиснемо Enter. І точно так само робимо з MessageBoxW ...

Якщо ви захочете вибрати брейк з усього списку API-функцій, які використовуються в додатку, ви можете написати в плагін: «bpx" що завгодно "». Тобто не правильну API. Наприклад: «bpx dfgsdfg». І зі списку через праву поставити брейк куди хочете нічого не вводячи. Тепер у вікні «(B) Breakpoints» з'явиться список ваших поставлених брейк. У ньому ви можете призупинити роботу одного з брейк або видалити будь-який з них. Значить брейк ми поставили.

Йдемо далі. Запускаємо програму і сподіваємося, що «вилетить» хоч один наш брейк. F9 і ... УРА! Один з найпоширеніших:

У вікні дампа ми можемо подивитися як по частинах завантажувалося вміст діалогу:

Тепер йдемо вгору (можете спробувати стрибки, але вони не перестрибують виклик повідомлення) і натикаємося на першу сходинку цієї подпроцедури. Виділимо цю строчку і в статусному рядку бачимо:

Local calls from 005EFD12, 005F0595, 005F066D, 005F0694, 005F0D6A, 005F0ED3

Це нам показує, що наша підпрограма викликалася call 'ами з перерахованих адрес. Тепер залишається поставити брейк на всі ці call 'и і поскасовувати виклик цій подпроцедури. Для цього попереходили на кожну адресу виклику і понаставляли брейк. Копіюємо перша адреса, тиснемо Ctrl + G, вставляємо і тиснемо Enter. Оллі відразу стрибне на введений адресу. Тиснемо F2 (брейк) і точно так же проробляємо з усіма іншими call 'ами.

Тепер завершимо минулої налагодження натиснувши Ctrl + F2 (Reset). І запустимо знову (F9). Бачимо, що вискочив брейк за адресою 005F0D6A. Можливо, що будуть ще й після перевірки, так що не слід ще сильно радіти. Пробуємо за NOP ить цей call.

Пробуємо за NOP ить цей call

І вуалля: ФІФА відмінно запустилася і без диска. Тепер можна насолоджуватися гордо крякнутий грою ;-)

Ну і останній приклад візьмемо трохи важче. Гра називається: «Deer Hunter 2004». Знаючі англійська здогадаються, що це полювання на оленів. Гра старенька, але дуже реалістична.

Вісь. Тут заморочка в тому, що гра без диска йде. Втім так само як і з диском. Але наші пірати, які мабуть нахабно вкрали цю гру не посмот- рели, що гра без диска йде тільки як клієнт версія. Тобто в цю гру можна грати тільки підключившись до локального або інтернет-сервера. Про це свідчить це повідомлення:

Поїхали ... Прога нічим не стиснута і написана на MS Visual C ++ 7.0. Відмінно.

Проблема полягає в тому, що нам треба знайти перевірку правдивості диску Проблема полягає в тому, що нам треба знайти перевірку правдивості диску. Оскількі навіть коли я вставляю куплений диск в свій CD-ROM гра все одно його не знаходить або бачить, що він не оригінальний. Ну нічого, ми йому покажемо ;-)

На цьому скрині (скор. Від Screenshot) видно, що кнопки «Створити сервер» і «на полювання» погашені. А чи не погашена тільки та, яка відповідає за підключення до сервера.

Гаразд, за справу. Завантажуємо DH2004.exe в Оллі і шукаємо текстові посилання. Щоб не мучитися і промотувати весь здоровенний список посилань, можна натиснути правую-> Search for text -> «І ввести фразу» і якщо посилання не одна то жати правую-> Search for next.

Я вважав за краще шукати по цитаті «Do you want». Крім того відразу ж поруч валялися посилання з тих же діалогів про відсутність дисків:

0040D232 push DH2004.00561B08 ASCII "Do you want to play without the CD-ROM? You may only join local games."

0040D252 push DH2004.00561B50 ASCII "Deer Hunter 2004 CD-ROM not detected"

0040D257 push DH2004.00561ADC "Please Insert Deer Hunter 2004 CD-ROM!"

Подвійний клік по першій посиланням і переходимо на рядки:

Подвійний клік по першій посиланням і переходимо на рядки:

Бачимо, як тут збирається повідомлення. Тепер шукаємо не короткий стрибок. Оскількі короткий нас не виведе з діалогу. Ось все стрибки, від низу до верху (в зворотному порядку) до першого довгого:

0040D226 |. 74 28 | je short DH2004.0040D250

Він перестрибує наш діалог, але викликає схожий:

0040D21D |. EB 56 | jmp short DH2004.0040D275

0040D21B |. 74 02 | je short DH2004.0040D21F

Циклові стрибки ... І нарешті:

0040D1E0 |. 0F84 8F000000 | je DH2004.0040D275

Як бачимо, він явно не короткий. Замінюємо на jne, пробуємо і ... УРА:

Тиснемо «на полювання!» І насолоджуємося грою. Мережа теж працює, перевірено.

Якщо ви хочете зробити хороший крек, який би багато не займав і який зручніше б крякав гру (тобто не заміною виконуваного файлу), то можна скористатися утилітою «PatchCreationWizard». Яка може створювати маленькі програмки, які будуть змінювати в виконуваному файлі саме ті байти, які змінили ви при кряком. Тоді вам тільки варто буде вказати де знаходиться, файл, який ви збираєтеся пропатчити і натиснути «Patch».

Давайте створимо як би повністю завершений кряком для нашого «Мисливця». Сподіваюся ви самі здогадалися зберегти все вимірюв- нання в інший файл (у мене це за традицією DH2004 (с) .exe).

Тепер запускаємо PatchCreationWizard, тиснемо Next, вибираємо «Byte Patch», Next, в поле «Your Handle» пишемо свій гордий нік або ще якусь важливу інформацію, в «Target Title» теж чета в цьому роді, ну я там звик писати « кряк на ... », а в поле« Target File »потрібно вписати ім'я файлу, який будемо патчить.

Тиснемо Next, натискаємо кнопку «Browse» праворуч від поля «Original File» і, відповідно, вказуємо оригінальністю не крякнутий файл (DH2004.exe в нашому випадку); потім тиснемо по «Browse» праворуч від «Patched File» і вибираємо крякнутий (DH2004 (с) .exe).

Тиснемо в останній раз Next і чекаємо поки згенерувати наш патч. Тепер в папці з грою з'явився файл patch.exe. Запустимо його. Він відмінно пропатчівать гру.

Тепер, після установки гри, варто просто кинути його в папку з грою, запустити і натиснути «Patch». І гра буде успішно крякнутий. Кряк (патч) тепер буде займати всього 5Кб (приблизно), замість обсягу всієї exe'шкі (1,7МВ - Deer Hunter; 5,2MB - FIFA, 15MB - Heroes of M & M). Вагома різниця.

Але потрібно пам'ятати, що це не законно і переслідується КК України. Але все-таки прикро, коли купуєш гру, а вона навіть з диском не йде. Доводиться викручуватися.

А тепер напишу про захист від цього свавілля. Почну поступово з найслабшою і найбільш неефективною. Однією з найбільш примітивних є захист методом генерації пароля не зі стелі, а виходячи з імені користувача або ID комп'ютера. Це виключає можливість підходу одного і того ж пароля на різних комп'ютерах. Але при кряком воно обходиться так само легко, як і просто пароль.

Ще для заплутування крякери роблять не одне поля для введення пароля, а 3-6. Це збиває з пантелику бо там стільки ж і порівнянь. Тобто потрібно шукати не одну «розвилку», а цілих 6, які програмісти могли запхати в зовсім різні місця. Але для досвідченого крякери це все одно не представить великої проблеми.

Трюком є ​​після введення пароля або просити перезапуску або хоча б закривати діалог введення пароля (без всяких «Ура! Пароль вірний» або «На жаль ви навіть з 132 рази не вгадали пароль» ;-)). Крякери буде важко перехопити управління після введення пароля, а вже тим більше знайти «розвилку», тому що йому не від чого буде відштовхнутися щоб знайти порівняння.

Більш хорошим захистом є активація тільки через Інтернет, тому що тоді кряком залишається перестрибувати сам «вихід» в Інтернет і повертати прапор правильності пароля або перемикати прогу на самому початку, де вона при запуску перевіряє себе на активування. Потрібно використовувати ще антіотладочние сегменти коду. Які стежать чи не діє відладчик в системі, і якщо все-таки діє, то послати програмі команду відмови ра- боти. Або такі сегменти, які викликають не пропускається виняток.

Ну майже найкращий захист це стискати програми якимись невідомими пакерами, як наприклад Armadillo. На яких анпакер знайти дуууже важко або практично неможливо. Але все одно, знаючи (бачачи) алгоритм кодування, «вищим умам» не складе труднощів написати зворотний хід слідства.

А так же актуально використовувати утиліти, які приховують / підробляють заголовок (header) файлу, а саме ту частину, де прописано яким пакером він стиснутий. Тобто в PEiD ви будете бачити, що файл нічим не стиснутий або «типу» стиснутий тим пакером, назва якого ви прописали в цій програмі.

Ось найвідоміші з них: DotFix FakeSigner, StealthPE, HidePE. Останні дві це обидва продукти однієї і тієї ж фірми і роблять одну і ту ж функцію, просто були зроблені обидва з метою заробити побільше грошей.

Але найкращий з них, на сьогоднішній час, звичайно DotFix FakeSigner. Він включає і підробку header'а і анти-отладочную захист. А для ігор на сьогоднішній час кращим захистом є «StarForce», який теж ламають, але дуже мало людей. Оскількі захист побудована на зниження швидкості приводу і відображенні лазера від спеціальної доріжки диска під певним кутом ...

Ну ось на цьому і все. На сьогодні досить. У наступній статті я вам можливо розповім про злом StarForce'а і про кращий метод захисту софта - віртуальну машину.

Ну добре. До побачення і до нових зустрічей на нашому вільному літературному просторі. ;-) Поки що! З вами був Uncr0wneD.

З.І. Дану статтю потрібно розглядати тільки в ознайомчої формі. Автор не несе ніякої відповідальності.

«Що ж тут робити?
За що ми зачепимося?
Гиги) Не вийшло ?
B08 ASCII "Do you want to play without the CD-ROM?