Злом програмного забезпечення

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Злом програмного забезпечення (англ. software cracking) — дії, спрямовані на усунення захисту програмного забезпечення (ПЗ), вбудованої розробниками для обмеження функціональних можливостей. Останнє необхідно для стимуляції покупки такого пропрієтарного ПЗ, після якої обмеження знімаються.

Крек (також спотворене кряк і, вкрай рідко, крак) (англ. crack) — програма, що дозволяє здійснити злом програмного забезпечення. Як правило, крек придатний для масового використання. По суті, крек є втіленням одного з видів злому, найчастіше, це звичайний патч. Для слова тріщина використовуються такі евфемізми: «ліки», «таблетка», «аспірин» і т. п.[1] Крекер (також спотворене крякер) (англ. cracker) — людина, яка займається створенням креків.

Види злому[ред. | ред. код]

Практично будь-який злом зводиться до використання одного з наступних способів:

  • Введення серійного номера (реєстраційного коду) (жарг. серійник) (англ. serial number, S/n) — злом програми за допомогою введення правильного реєстраційного ключа (або фрази), отриманого нелегальним способом. Ключ може генеруватися на основі будь-якої інформації (імені власника ПЗ, характеристик апаратної частини комп'ютера, і т. ін.), або мати фіксоване значення. Для генерації реєстраційного ключа використовується той же алгоритм, що і в програмі.
    Примітка1: Реєстраційний код може поширюватися в ключовому файлі (файл ліцензії)(англ. keyfile), який зазвичай поміщається в каталог з встановленою програмою.
  • Примітка2: Для масового злому, найчастіше, створюється (і в подальшому використовується) генератор ключів (жарг. кейген) (англ. keygen скор. від key generator) — програма для генерації реєстраційних ключів (див. вище). Даний вид злому найбільш затребуваний (особливо, коли програма часто оновлюється або рег. Ключ генерується на основі якоїсь інформації (див. Вище)) і тому найбільш цінується. Як правило, вимагає більшої кваліфікації зломщика в порівнянні з іншими видами злому, але не завжди.
  • Використання завантажувача (жарг. лоадер) (англ. loader) — спосіб обходити деякі види захисту ПЗ, полягають у використанні зовнішніх (навісних) систем захисту. Полягає у зміні певних фрагментів програми в оперативній пам'яті відразу після її завантаження в цю пам'ять, але перед її запуском (тобто перед виконанням коду в точці входу).
  • Використання (бінарного) патчу (часто жарг. крек або кряк от англ. crack) (англ. byte patch) — спосіб, схожий на «завантажувач», але модифікація виробляється статично в файлах програми. Як правило, це один з найпростіших і швидких способів злому ПЗ.
  • Використання зламаної версії файлу(ів) (англ. cracked) — спосіб полягає в підміні оригінальних файлів програми файлами, які вже зламані.
  • Використання емулятора ключа (англ. key emulator) — спосіб використовується для обману захистів, побудованих на використанні в якості захисту електронного ключа (як правило, підключається до LPT або USB порту комп'ютера). Полягає в знятті дампу внутрішньої пам'яті ключа. Файл з вмістом цієї пам'яті подається на вхід спеціальною програмою — емулятора, яка підключає свій драйвер-фільтр в стек драйверів і обманює захищену програму, емулюючи роботу з апаратним ключем. У випадках наявності в програмі звернень до ключу для апаратного шифрування ділянки пам'яті цей метод використовується в зв'язці з методом Бінарний патч.
  • Підміна офіційного сайту програм і / або відповідну зміну налаштувань з метою обійти перевірку ключа, якщо вона була винесена розробниками на будь-якої інтернет-ресурс (В абсолютній більшості випадків — для запобігання злому, рідше — для обліку і ведення статистики, збору відомостей). Найчастіше здійснюється на примітивному рівні шляхом модифікування файлу hosts і запуску різних емуляторів, іноді — використання різних програм (Денвер) або використання реально існуючого веб-ресурсу.
  • Заборона доступу програмі до інтернету полягає в комплексі дій, спрямованих на здійснення примусової заборони доступу програми до інтернету. Виконується в тих випадках, коли програма вимагає активації ліцензійного ключа через інтернет (як правило, офіційний сайт розробника), або у випадках, коли програма зв'язується з сервером розробника для обміну даними або поновлення. Як правило, встановлюється спеціальна утиліта, яка блокує доступ програми в мережу інтернет. Ця дія, зазвичай, проводиться після введення ключа, згенерованого кейгеном.

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

Цей список не є вичерпним, а лише позначає найбільш розповсюдженні способи злому.

Вид злому, в більшості випадків, обумовлений видом захисту. Для деяких захистів можливо використовувати різні види злому, для інших — спосіб може бути єдиним.

Принципи злому[ред. | ред. код]

Як правило, в основі роботи крекера лежить дослідження асемблерного коду, отриманого з машинних інструкцій з допомогою спеціально призначеної для цієї програми-дизассемблера. В залежності від обраного способу злому, результат дослідження може використовуватися, наприклад, для побудови генератора ключів або для внесення необхідних змін в виконуваний файл. Останній спосіб в більшості випадків найбільш легкий, так як не вимагає вивчення алгоритму перевірки правильності ключа: злом найчастіше зводиться до пошуку перевірки кількох умов (на зразок «Введене Число дорівнює Еталонному Числу?») і заміні такої умови на безумовний перехід (goto, jmp), або, рідше, на протилежне (тобто для даного прикладу на «Введене Число не дорівнює Еталонному Числу?»).

Крім того, внесення змін в виконуваний файл (патч) може проводитися з метою відключення небажаних дій з боку програми (наприклад, нагадування про необхідність реєстрації), скорочення функціональності програми. У цих випадках, часто, відповідні команди процесора замінюються на байти зі значенням 90h (у шістнадцятковій системі числення), що відповідає ассемблерной команді nop (No Operation), тобто «порожній команді», яка не виконує ніяких дій. Якщо таких команд багато, то застосовується безумовний перехід (перестрибування непотрібного коду). Можливо також розширення можливостей програми написанням додаткового коду, але, як правило, це дуже трудомісткий процес, який не виправдовує тимчасових витрат.

Між тим, патч можливий, як правило, у тому разі, коли виконуваний файл програми не захищений спеціальними «пакерами» і «протекторами» — програмами, які приховують реальний код виконуваного файлу. Для останнього типу програм часто використовується найбільш інтелектуальна частина зворотної розробки (англ. reverse engineering) — дослідження коду програми за допомогою відладчика і створення генератора ключів, але можливі й інші рішення, наприклад, створення завантажувача (див. вище).

Правові аспекти діяльності[ред. | ред. код]

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

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Хайдарова В. Ф. {{{Заголовок}}}. — 1000 прим. — ISBN 978-5-9765-1187-3.