Введення в захист shareware-програм, vr-online - безкоштовний електронний журнал для всіх

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

Для початку запам'ятай кілька базових принципів:

- не привертати уваги до ядру захисту. не треба виводити всякі дурні повідомлення типу «Спасибі за реєстрацію» або «Неправильний пароль», це суттєво спростить злом, особливо якщо ти їх виводиш відразу після перевірки реєстраційних даних, оптимальним варіантом буде відкладена реєстрація, тобто не перевіряти реєстраційні дані відразу після введення, просто запам'ятай їх і виведи нейтральне повідомлення типу «Для завершення реєстрації необхідний перезапуск програми / перезавантаження комп'ютера.». Коректність реєстрації перевіряй при закритті (OnCloseQuery), або при відкритті програми (OnShow), якщо дані коректні, то просто збережи зареєстроване стан, як саме - інше питання. Наприклад, можна створити файл із зашифрованою реєстраційної інформацією, як це робить DrWeb, або створити десяток ключів в реєстрі, а комбінація з значень деяких з них буде відповідати зареєстрованому станом, а значення інших будуть випадковими. Одного ключа недостатньо, тому що його легко виявити (наприклад, за допомогою утиліти RegMon) і перевести в потрібний стан.

- Не порівнюйте самі паролі, це спростить написання кейгена. Замість цього слід порівнювати їх хеши, отримані за допомогою якого-небудь незворотного алгоритму шифрування (MD5, SHA1, etc). Якщо ти вирішив зробити паролем хеш логіна, то не забудь використовувати шифрування хоча б кілька разів, при цьому попутно виконувати довільні операції (xor, циклічний зсув, урізання, заміну подстрок, etc.) над рядком поточного хешу, не завадить також зробити паролів прив'язку до датою, щоб вони з часом старіли.

- використовуй exe-пакувальники і протектори. Крім зменшення розміру виконуваного файлу пакувальники дадуть додатковий бонус твоєї системі захисту, так як крекеру, перш ніж перейти до злому, необхідно розпакувати твою програму, тому старайся використовувати пакувальники, для яких в інтернеті немає автоматичних пакувальників, вже це відлякає багатьох крекерів. Але не тіште себе ілюзією, це не дасть тобі гарантію від злому, так як пакувальник додає в файл і распаковщик, щоб перед виконанням програма могла розпакувати в оперативну пам'ять, ось тут то її і можна взяти тепленькою і беззахисною, залишиться тільки відновити таблицю імпорту, наприклад, за допомогою Import REConstructor. Велику захист тобі дадуть протектори, такі як Armadillo, їх захист вельми важко зняти.

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

Декомпілятори частково або повністю відтворюють програму на мові високого рівня, використовуючи лише виконуваний файл. Декомпілятори існують для безлічі компіляторів: Delphi. NET, VB, Java, etc. Нас в даний момент цікавить Delphi (для C ++ Builder буде те ж саме), для нього є два декомпілятори: DeDe і exe2dpr.

Захиститися від декомпілятори, якщо крекер вже зняв пакувальники і протектори, практично неможливо, тому ні в якому разі не розташовуйте перевірку реєстраційних даних в обробник OnClick тієї самої кнопки ОК, яка підтверджує їх введення, - це початок кінця твого захисту, пам'ятай про це! Але не все так страшно, декомпіляція програм, написаних на Delphi є частковою, тому її мало для злому, після неї необхідно скористатися
дизассемблером і / або отладчиком. А радикальним засобом від декомпілятори буде написання програми на Visual C ++, для нього наскільки мені відомо декомпілятори не існує (щоправда існують сигнатури для IDA, які дозволять розпізнати всі бібліотечні функції).

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

Найбільш популярними отладчиками є OllyDbg, відладчик, вбудований в IDA і SoftICE. Перші два є отладчиками рівня користувача, тому для нескладної захисту досить просто перервати їх процеси: OllyDbg.exe, idag.exe, idag64.exe. Це можна зробити, наприклад, такою функцією:

Для зупинки SoftICE, якщо він запускається як служба (найбільш частий випадок), треба виконати команду оболонки net stop ntice, наприклад так:

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

Written by: Romul aka Смирнов Роман

Схожі статті