Дієва техніка захисту По від злому

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

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

На жаль, багато програмістів практично не замислюються над захистом свого програмного продукту і сподіваються абияк». Чи варто при такому розкладі дивуватися, що кряки до популярних програм з'являються буквально через лічений годинник після їх офіційного виходу в світ, а деколи і раніше! Крекерськие команди співробітничають з людьми софтверних компаній, тут крутяться також великі гроші. Адже якби програміст доклав трохи зусиль для захисту програми – і більше 90% новачків, що захотіли зламати програму, плюнули на цю справу. Чому 90%? Ну, в даній статті приводяться найбільш ефективні з тих методів захисту, які нескладно утілити в життя, в основному все зводиться до зміни ісходников програми на мові високого рівня. Асемблерні вставки доступні тільки професіоналам, а значить тільки крупні виробники ПО (програмного забезпечення) можуть собі дозволити використовувати роботу таких фахівців.

Перш ніж написати свою програму, почати поширювати її, хороший программер подумає про вірогідність злому і стійкості програми до нього. Тут треба трохи поміркувати. Кожна програма має певну цінність, і чим вона цінніша, тим більше вірогідність що хтось спробує її модифікувати. Програміст стоїть з одного боку барикади, хакер-с інший. Оскільки програмістам належить ініціатива, вони задають темп гри. З'являється захист, проходить якесь время- і хакери знаходять засіб її зламати, пишеться керівництво із цього приводу, і захист поступово втрачає свою ефективність. Якщо розробник багато працював над стійкістю програми до злому, тоді час в перебігу якого не існуватиме зламаних копій, збільшується. Тут ми натикаємося на палицю про два кінці: з одного боку, захист має бути якомога ефективніше і простіше в її втіленні, з другой- вона все одно буде розкрита за кінцевий час. Тому перш ніж почати захищати дистрибутив, не завадило б подумати про цінність програми, обстановці положення її на ринку і так далі Тут не можна дати універсальної ради, але приведу приклад: одна програма коштує 100$, інша, аналогічна їй, безкоштовна. Тоді природно, звичайний користувач використовуватиме безкоштовну програму замість того щоб платити $. Але з іншого боку, не кожен знатиме про існування конкурента, і тоді доведеться купувати ліцензію. Досить часто початківці программери припускаються однієї помилки – переоцінюють реальну вартість програми. Я чудово розумію це відчуття гордості, яке виникає коли твоє дітище працює і видає чудові результати в своїй сфері діяльності. Але багато годинника проведено за монітором при написанні цієї програми примушують розробника подумати що ця програма безцінна, а насправді ціна їй – гріш. Тому не потрібно робити дурощів, реалізовуючи перші ж версії своїх програм платними, придумувати витончені захисту. Швидше за все, програма «сиру» і містить в собі купу помилок (багов), запуститься не на кожному комп'ютері і взагалі залишить не найприємніше враження про себе. У такому разі не треба довіряти собі в оцінці вартості програми, а надати це право стороннім людям. Запропонуєте попрацювати з програмою друзям, знайомим – вони дадуть вам купу рад і критики, багато знайдені баги можна закрити тут же, інші зажадають тривалих болісних копань в програмному коді. Можна виставити програму на своєму сайті для тестування – і цілком можливо, незабаром після деяких доопрацювань її цілком можна пропонувати за гроші. А який сенс ставити захист якщо ціна проги невисока? Правильно, ніякого.

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

Одна з найсильніших методик протидії дослідженню – написання власного віртуального процесора. Тоді програма як би виконуватиметься на іншому, придуманому процесорі, з яким хакреські інструменти виявляться безсилими і показуватимуть абракадабру. Вигадана архітектура, нові регістри – все залежить від витонченості фантазії. Але навряд чи ви, та людина який зараз читає мою статтю, зможете грамотно реалізувати цей захист – для цього потрібно присвятити все своє життя вивченню архітектури персонального комп'ютера, просиджувати за компом по 10-15 годин на добу, роблячи невеликі вимушені перерви поспати, поїсти і справити потребу. Такі люди є – вони, справжні профі і гуру в своїй області. Мало знати досконало всю документацію від Microsoft і Intel по опису функціонування операційної системи і процесора (а це вже багато тисяч сторінок, покритих кодами на яких без сліз не поглянеш). Потрібний також багато практикуватися, читати море інформації для знань багатьох «штучок». Далеко не завжди все описується в різного роду керівництві, з різних причин багато речей ховаються або вигадано спотворюються. Знання таких недокументованих особливостей архітектури дозволяє розробляти дійсно професійні системи.

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

Сучасні хакери вже далеко не ті, що були наприклад, в 80-і роки. Я жодною мірою не сумніваюся в професіоналізмі цих людей, але річ у тому, що їх зараз дуже багато. Раніше не був популярний Інтернет, не існувало ніякої літератури, доводилося все осягати на власному досвіді. Звідси люди, що досконало знають архітектуру комп'ютера. Зараз же ситуація інша. Щоб ламати програми, вже не обов'язково володіти такими знаннями, якими, скажімо, володів хакер століття, що пішло. Існує багато програм тих, що полегшують їх діяльність, багато літератури за принципом «роби як я». Такі люди можуть протидіяти поширеним защитам і немов перетворюються на маленьких сліпих котенят перед захистом іншого роду. Через це навіть невеликі протиналагоджувальні трюки сильно підвищать загальну захищеність проги, більшість таких «псевдохакерів» відступлять. Молитеся тільки щоб за захист не узявся справжній професіонал – він тільки посміється над нею, а потім на дозвіллі зламає. Але, повторюся, такі людей дуже мало і не факт що він візьметься за вашу прогу.

Для побудови нескладних, але в той же час защит, що діють, потрібно обов'язково уявляти собі методи, яким повинна протистояти програма.

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

Трасування – динамічний метод. За допомогою відладчика можна запустити на виконання невелику ділянку коди, подивитися у прямому розумінні результати його роботи, проглянути зміст регістрів пам'яті, а це означає що потрібно знайти потрібну ділянку кода- і справа в капелюсі. Нижче я приведу приклад перевірки програмою серійного номера на Visual Basic:

If strregnumber = «1234-5678-9ghk-ltyd» Thenmsgbox «Програма зареєстрована»: Registr = True ’Якщо серійний номер відповідає введеному, то виходить відповідне повідомлення і змінна що показує реєстрацію (Registr) набуває значення True. Else: Msgbox «Серійний номер невірний. Будь ласка, введіть правильний ключ»: Registr=false ‘Інакше програма незареєстрована. End If

В принципі все вірно, але якщо скористатися дизасемблером або відладчиком, то місця порівняння введеної коди з правильним знаходитимуться зовсім поряд з повідомленнями про реєстрацію. Тому буде дуже чудово, якщо программеру вдасться розкидати такі місця по всьому тілу програми, не сосредотачивая код в таких вузьких місцях. Можливо ви запитаєте: «Та від мене тут що залежить, звідки я знаю як розташує код компілятор! ». Так, це частково так, але все таки існують методики протидії такому злому. Такий метод захисту називається Ськремблінг. Знову приклад, цього разу на старому добром Qbasic:

Схожі статті: