Програма перевірки доступу за методом Тюрінга
C # розроблявся як мова програмування прикладного рівня для CLR і, як такий, залежить, насамперед, від можливостей самої CLR. Це стосується, перш за все, системи типів C #, яка відображає BCL. Присутність або відсутність тих чи інших виразних особливостей мови диктується тим, чи може конкретна мовна особливість бути транслювали у відповідні конструкції CLR. Так, з розвитком CLR від версії 1.1… Читати ще >
Програма перевірки доступу за методом Тюрінга (реферат, курсова, диплом, контрольна)
Зміст
Вступ
1 .Аналіз систем захисту програмного забезпечення
1.1 Огляд існуючих систем захисту ПЗ
1.2 Методи захисту програмного забезпечення від несанкціонованого доступу
1.3 Методи захисту комп’ютера від несанкціонованого доступу
2. Теоретичні підходи до побудови
2.1 Метод створення програми перевірки доступу за методом Тюрінга
2.2 Розробка структури програми
2.3 Вибір мови програмування
3. ПРАКТИЧНА РЕАЛІЗАЦІЯ
3.1 Розробка програми
3.2 Інструкція по роботі з програмою
3.3 Тестування програми
Список використаних джерел
ДОДАТОК
ВСТУП Проблеми інформаційної безпеки стали актуальними одночасно з виникненням перших електронно-обчислювальних машин і удосконалювались разом з розвитком технічної бази. Вдосконалення технічної бази систем обробки інформації забезпечило подальший розвиток концепції безпеки, в рамках якої стали виділяти захист технічних засобів, програмного забезпечення і інформації.
Програмне забезпечення — сукупність програм системи обробки інформації програмних документів, необхідних для експлуатації цих програм.
На сьогоднішній день постали такі проблеми, як незаконне використання алгоритмів, несанкціоноване використання, модифікація, поширення і збут програмних продуктів. У відповідності з різними підходами до захисту прав творців комп’ютерних програм, захист програмного забезпечення можна класифікувати таким чином:
захист від власне незаконного копіювання захист від незаконного використання;
захист від дослідження програм;
ідентифікація програмних продуктів.
Отже, зараз існує досить багато проблем які пов’язані із захистом програмного забезпечення, і тому розробляється велика кількість систем захисту програмного забезпечення для їх подолання, без яких неможлива безпечна робота, як з програмним забезпеченням, так і з комп’ютером.
1 АНАЛІЗ СИСТЕМ ЗАХИСТУ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
1.1 Огляд існуючих систем захисту ПЗ
Існуючі системи захисту програмного забезпечення можна класифікувати за рядом ознак, серед яких можна виділити метод установки, використовувані механізми захисту та принцип функціонування.
Системи захисту ПЗ за методом установки можна підрозділити на системи, встановлюються на скомпільовані модулі ПЗ, системи, що вбудовуються в вихідний код ПЗ до компіляції, і комбіновані.
Системи першого типу найбільш зручні для виробника ПО, так як легко можна захистити вже повністю готове й відтестовані ПЗ (зазвичай процес встановлення захисту максимально автоматизований і зводиться до вказівки імені захищається файлу і натискання «Enter»), а тому і найбільш популярні. У той же час стійкість цих систем досить низька (в залежності від принципу дії СЗ), так як для обходу захисту досить визначити точку завершення роботи «конверту» захисту і передачі управління захищеної програмі, а потім примусово її зберегти в незахищеному вигляді. Системи другого типу незручні для виробника ПО, так як виникає необхідність навчати персонал роботі з програмним інтерфейсом (API) системи захисту з витікаючими звідси грошовими і тимчасовими витратами. Крім того, ускладнюється процес тестування ПЗ та знижується його надійність, тому що крім самого ПЗ помилки може містити API системи захисту або процедури, його використовують. Але такі системи є більш стійкими до атак, тому що тут зникає чітка межа між системою захисту і як таким ПЗ. Найбільш живучими є комбіновані системи захисту. Зберігаючи переваги і недоліки систем другого типу, вони максимально ускладнюють аналіз і дезактивацію своїх алгоритмів.
По використовуваних механізмам захисту СЗ можна класифікувати на: системи, використовують складні логічні механізми; системи, що використовують шифрування захищається ПЗ; і комбіновані системи.
Системи першого типу використовують різні методи і прийоми, орієнтовані на складне становище дизасемблювання, налагодження та аналізу алгоритму СЗ та захистило ПЗ. Цей тип СЗ найменш стійок до атак, так як для подолання захисту достатньо проаналізувати логіку процедур перевірки і належним чином їх модифікувати. Більш стійкими є системи другого типу. Для дезактивації таких захистів необхідно визначення ключа дешифрування ПЗ. Найбільш стійкими до атак є комбіновані системи.
Для захисту ПЗ використовується ряд методів, таких як:
Алгоритми заплутування використовуються хаотичні переходи в різні частини коду, впровадження помилкових процедур — «пустушок», неодружені цикли, спотворення кількості реальних параметрів процедур ПЗ, розкид ділянок коду з різних галузей ОЗУ і т.п.
Алгоритми мутації Створюються таблиці відповідності операндів синонімів і заміна їх один на одного при кожному запуску програми з певною схемою або випадковим чином, випадкові зміни структури програми.
Алгоритми компресії даних Програма упаковується, а потім розпаковується по мірі виконання.
Алгоритми шифрування даних Програма шифрується, апотім розшифровується по мірі виконання.
Обчислення математичних виразів складних в процесі відпрацювання механізму захисту елементи логіки захисту залежать від результату обчислення значення якої-небудь формули або групи формул.
Методи труднощі дизасемблювання використовуються різні прийоми, спрямовані на запобігання дизасемблювання в пакетному режимі.
Емуляція процесорів і операційних систем створюється віртуальний процесор і / або операційна система (не обов’язково реально існуючі) і програма-перекладач з системи команд IBM в систему команд створеного процесора або ОС, після такого перекладу ПЗ може виконуватися тільки за допомогою емулятора, що різко ускладнює дослідження алгоритму ПЗ.
Нестандартні методи роботи з апаратним забезпеченням — модулі системи захисту звертаються до апаратури ЕОМ, минаючи процедури операційної системи, і використовують маловідомі або не документовані її можливості.
У свою чергу зловмисники так само застосовують ряд методів і засобів для порушення систем захисту. Ситуація протистояння розробників СЗПО і зловмисників постійно змінюється за рахунок комбінування вже відомих методів захисту та нападу, а так само за рахунок створення і використання нових методів. У цілому ця взаємодія може бути описано схемою на Рис. 1.
За принципом функціонування СЗ можна підрозділити на пакувальники / шифратори;
СЗ від несанкціонованого копіювання і СЗ від несанкціонованого доступу (НСД).
Пакувальники / шифратори Спочатку, основною метою пакувальників / шифраторів було зменшення обсягу виконуваного модуля на диску без шкоди для функціональності програми, але пізніше на перший план вийшла мета захисту ПЗ від аналізу його алгоритмів і несанкціонованої модифікації. Для досягнення цього використовуються алгоритми компресії даних; прийоми, пов’язані з використанням не документованих особливостей операційних систем (ОС) і процесорів; шифрування даних, алгоритми мутації, заплутування логіки програми, приведення ОС в нестабільний стан на час роботи ПЗ та ін.
Позитивні сторони:
У рамках періоду безпечного використання дані системи забезпечують
високий рівень захисту ПЗ від аналізу його алгоритмів.
Методи пакування / шифрації набагато збільшують стійкість систем захисту інших типів.
Негативні сторони:
Практично всі застосовувані методи уповільнюють виконання коду ПЗ.
Шифрування / упаковка коду ПЗ викликає труднощі при оновленні (update) і виправлення помилок (bugfix, servicepack).
Можливе підвищення апаратно-програмних вимог ПЗ.
У чистому вигляді дані системи не застосовні для авторизації
використання ПЗ.
Ці системи застосовуються лише до продуктів невеликого обсягу (до 1 мегабайта).
Даний клас систем уразливий, оскільки програмний код, в кінцевому підсумку, розпаковується або розшифровується для виконання.
Мають невеликим терміном безпечного використання, з огляду на п.4
Упаковка та шифрування виконуваного коду вступає в конфлікт із забороною самоідентифікування коду в сучасних ОС.
СЗ від несанкціонованого копіювання здійснюють «прив'язку» ПЗ до дистрибутивному носія (гнучкий диск, CD …). Даний тип захистів грунтується на глибокому вивченні роботи контролерів накопичувачів, їх фізичних показників, нестандартних режимів розбивки, читання / запису і т.п. При цьому на фізичному рівні створюється дистрибутивний носій, що володіє (Приблизно) неповторними властивостями (зазвичай це досягається при допомоги нестандартної розмітки носія інформації або / і запису на нього додаткової інформації - пароля або мітки), а на програмному — створюється модуль, налаштований на ідентифікацію та аутентифікацію носія за його унікальним властивостям. При цьому можливе застосування прийомів, використовуваних пакувальниками / шифратор.
Позитивні фактори:
Утруднення нелегального копіювання та розповсюдження ПЗ;
Захист прав користувача на придбане ПЗ.
Негативні фактори:
Велика трудомісткість реалізації системи захисту;
Уповільнення продажів через необхідність фізичної передачі
дистрибутивного носія інформації;
Підвищення системних вимог через захисту (наявність накопичувача);
Зниження відмовостійкості ПЗ;
Несумісність захисту та апаратури користувача (накопичувач, контролер);
На час роботи ПЗ займається накопичувач;
Загроза крадіжки захищеного носія;
СЗ від НСД здійснюють попередню і періодичну аутентифікацію користувача чи використовувати його комп’ютерної системи шляхом запиту додаткової інформації. До цього типу СЗ можна віднести системи парольного захисту ПЗ, системи «прив'язки» ПЗ до комп’ютера користувача, системи з «ключовими дисками «та апаратно-програмні системи з електронними ключами. У першому випадку «ключову» інформацію вводить користувач, у другому — вона міститься в унікальних параметрах комп’ютерної системи користувача, у третьому — вона зберігається на диску і в четвертому випадку
«Ключова» інформація зчитується з мікросхем електронного ключа.
Парольні захисту Цей клас СЗПО, на сьогоднішній день, є найпоширенішим. Основний принцип роботи даних систем полягає в ідентифікації та аутентифікації користувача ПЗ шляхом запиту додаткових даних, це можуть бути назва фірми та / або ім'я та прізвище користувача і його пароль або тільки пароль / реєстраційний код. Ця інформація може запитуватися різних ситуаціях, наприклад, при старті програми, після закінчення терміну безкоштовного використання ПЗ, при виклику процедури реєстрації або в процесі встановлення на ПК користувача. Процедури парольного захисту прості в реалізації і, тому, дуже часто застосовуються виробниками ПЗ. Більшість парольних СЗПО використовує логічні механізми, що зводяться до перевірки правильності пароля / коду й запуск або не запуску ПЗ, в залежності від результатів перевірки. Існують також системи, шифрувальні захищається ПЗ та використовують пароль або похідну від нього величину як ключ дешифрування, більшість таких систем використовує слабкі або найпростіші алгоритми шифрування, нестійкі до спрямованим атакам. Це відбувається через складність коректної реалізації стійких криптоалгоритмів і недоцільність їх застосування для захисту недорогих умовно-безкоштовних програмних продуктів, що становлять більшість ПЗ, яке користується парольні захисту. Лише останнім часом розроблені парольні СЗПО, реалізують стійкі криптоалгоритми типу DES і RSA, вони реалізовані у вигляді модуля і допоміжних бібліотек і встановлюються на вже скомпільовані модулі ПЗ.
Слабкою ланкою парольних захистів є блок перевірки правильності введеного пароля / коду. Для такої перевірки можна порівнювати введений пароль з записаним в коді ПО правильним або з правильно сгенерованими з введених додаткових даних паролем. Можливо так само порівняння похідних величин від введеного і правильного паролів, наприклад їх хеш-функцій, в такому випадку в коді можна зберігати тільки похідну величину, що підвищує стійкість захисту. Шляхом аналізу процедур перевірки можна знайти реальний пароль, записаний в коді ПЗ, знайти правильно згенерований пароль з введених даних або створити програму для перебору паролів для визначення пароля з потрібної хеш-сумою. Крім того, якщо СЗПО не використовує шифрування, досить лише примусово змінити логіку перевірки для отримання безперешкодного доступу до ПЗ. Шифрувальні системи більш стійкі до атак, але при використанні найпростіших або некоректно реалізованих криптоалгоритмів є небезпека дешифрування ПЗ.
Слабкою ланкою таких захистів є той факт, що на ПК користувача ПЗ завжди запускається на виконання, що призводить до можливості примусового збереження ПЗ після відпрацювання системи захисту, дослідження самої захисту та виявлення даних, що використовуються СЗПО для аутентифікації ПК користувача.
Позитивні фактори:
Не потрібно додаткових апаратних засобів для роботи захисту.
Утруднення несанкціонованого доступу до скопійовані по.
Простота застосування.
" Невидимість" СЗПО для користувача.
Негативні фактори:
Помилкові спрацьовування СЗПО за будь-яких змінах в параметрах ПК.
Низька стійкість при доступі зловмисника до ПК користувача.
Можливість конфліктів із системним ПЗ.
Програмно-апаратні засоби захисту ПЗ з електронними ключами Цей клас СЗПО останнім часом здобуває все більшу популярність серед виробників програмного забезпечення (ПЗ). Під програмно-апаратними засобами захисту, в даному випадку, розуміються засоби, засновані на використанні так званих «апаратних (електронних) ключів». Електронний ключ — це апаратна частина системи захисту, що представляє собою плату з мікросхемами пам’яті і, в деяких випадках, мікропроцесором,
вміщену в корпус і призначену для установки в один із стандартних портів ПК (COMM, LPT, PCMCIA, USB …) або слот розширення материнської плати. Так само як такого пристрою можуть використовуватися СМАРТ-карти. За результатами проведеного аналізу, програмно-апаратні засоби захисту Зараз є одними з найбільш стійких систем захисту ПЗ від несанкціонованого доступу.
Електронні ключі по архітектурі можна підрозділити на ключі з пам’яттю
(Без мікропроцесора) і ключі з мікропроцесором (І пам’яттю).
Найменш стійкими (в залежності від типу програмної частини) є системи з апаратною частиною першого типу. У таких системах критична інформація (ключ дешифрування, таблиця переходів) зберігається в пам’яті електронного ключа. Для дезактивації таких захистів в більшості випадків необхідна наявність у зловмисника апаратної частини системи захисту (основна методика: перехоплення діалогу між програмної та апаратної частинами для доступу до критичної інформації).
1.2 Методи захисту програмного забезпечення від несанкціонованого доступу У сучасних умовах при обробці інформації з обмеженим доступом вагому роль відіграють електронно-обчислювальні машини (ЕОМ) — ядро будь-якої інформаційно-телекомунікаційної системи (ІТС). Масштаби і сфери застосування ЕОМ такі, що виникає проблема забезпечення безпеки інформації, що циркулює в ній. Побудова надійної й ефективної системи захисту не можлива без чіткого усвідомлення методів та засобів несанкціонованого доступу (НСД) до ІТС. Проблемі захисту інформації присвячена велика кількість робіт, більшість з яких носить оглядовий характер і не дає глибинного розуміння причин виникнення каналів НСД, способів та засобів його реалізації, наслідків, що тягнуть за собою такі дії зловмисників. НСД — доступ до інформації, що здійснюється з порушенням встановлених в автоматизованій системі правил його розмежування. Він спрямований на ураження властивостей інформації (конфіденційності, цілісності або доступності) і вимагає використання різних способів та технічних засобів його реалізації. При цьому канали витоку даних утворюються як при роботі ЕОМ, так і в режимі очікування. Джерелами таких каналів є:
електромагнітні поля;
струми і напруги, що наводяться в провідних системах (живлення, заземлення і
з'єднання);
перевипромінювання інформації, що обробляється, на частотах паразитної генерації
елементів і пристроїв технічних засобів ЕОМ, а також на частотах контрольновимірювальної апаратури.
Крім цих каналів, обумовлених природою процесів, що протікають у ЕОМ, та їхніми технічними особливостями, у комп’ютерах, що постачаються на ринок, можуть навмисно створюватися додаткові канали витоку інформації, для цього може використовуватися:
розміщення в ЕОМ закладок на мовну чи оброблювану інформацію;
встановлення u1088 радіомаяків;
навмисне застосування таких конструктивно-схемних рішень, що призводять до збільшення електромагнітних випромінювань у певній частині спектра;
встановлення закладок, що забезпечують знищення ЕОМ ззовні (схемні рішення);
встановлення елементної бази, що виходить з ладу.
Методи НСД до інформації можна класифікувати, виходячи з таких ознак за:
вид доступу,
характер дій зловмисника,
багаторазовість доступу,
спрямованість дій зловмисника, тяжкість наслідків.
За видом доступу всі методи можна розділити на дві великі групи. До першої відносять методи і засоби, що використовуються при локальному доступі, а до другої - при віддаленому доступі.
За характером дій зловмисника застосовувані ним методи можуть бути спрямовані на копіювання, модифікацію, знищення чи впровадження інформації. В останньому випадку використовується особливість ІТС, відсутня в традиційних засобах накопичення відомостей, пов’язана з тим, що в таких системах зберігаються не тільки дані, але й програмні засоби, що забезпечують їхні обробку й обмін. Ця особливість інтенсивно використовується зловмисниками, які часто прагнуть одержати доступ до тієї чи іншої системи не заради доступу до відомостей, що зберігається в ній, а для впровадження програмної закладки, тобто для несанкціонованого створення в системі ново інформації, що становить собою активний компонент самої ІТС. За багаторазовістю доступу виділяють методи, спрямовані на його разове та багаторазове одержання. У першому випадку завдання попередження несанкціонованих дій зловмисника значно ускладнюється, однак часто, оскільки останній не піклується про приховання факту втручання, трохи полегшується виявлення таких дій. У другому випадку завдання попередження спрощується, але ускладнюється виявлення, оскільки основну увагу порушник, що планує багаторазово проникати в ІТС, зосереджує на конспірації всіх ознак такого проникнення. За спрямованістю дій зловмисника вирізняють методи і засоби несанкціонованого одержання відомостей з ІТС, спрямовані на отримання системної інформації (файли паролів, ключів шифрування, переліки облікових записів, схеми розподілу мережних адрес тощо), а також прикладних даних.
1.3 Методи захисту комп’ютера від несанкціонованого доступу Особливості захисту персональних комп’ютерів (ПК) обумовлені специфікою їх використання. Як правило, ПК користується обмежене число користувачів. ПК можуть працювати як в автономному режимі, так і в складі локальних мереж (сполученими з іншими ПК) і можуть бути залучені до віддаленого ПК або локальної мережі за допомогою модему по телефонній лінії. Стандартність архітектурних принципів побудови, устаткування і програмного забезпечення персональних комп’ютерів, висока мобільність програмного забезпечення і ряд інших ознак визначають порівняно легкий доступ професіонала до інформації, що знаходиться в ПК. Якщо персональним комп’ютером користується група користувачів, то може виникнути необхідність в обмеженні доступу до інформації різноманітних користувачів. Несанкціонованим доступом (НСД) до інформації ПК будемо називати незаплановане ознайомлення, опрацювання, копіювання, застосування різноманітних вірусів, у тому числі руйнуючі програмні продукти, а також модифікацію або знищення інформації та порушення встановлених правил розмежування доступу.
У захисті інформації ПК від НСД можна виділити три основні напрямки:
орієнтується на недопущення порушника до обчислювального середовища і ґрунтується на спеціальних технічних засобах упізнання користувача
другий пов’язано з захистом обчислювального середовища і ґрунтується на створенні спеціального програмного забезпечення по захисту інформації.
третій напрямок пов’язаний із використанням спеціальних засобів захисту інформації ПК від несанкціонованого доступу.
Для захисту персональних комп’ютерів використовуються різноманітні програмні методи, що значно розширюють можливості по забезпеченню безпеки інформації, що зберігається. Серед стандартних захисних засобів персонального комп’ютера найбільше поширення одержали:
засоби захисту обчислювальних ресурсів, що використовують парольну ідентифікацію й обмежують доступ несанкціонованого користувача.
застосування різноманітних методів шифрування, що не залежать від контексту інформації.
засоби захисту від копіювання комерційних програмних продуктів.
захист від комп’ютерних вірусів і створення архівів.
Достатньо надійний засіб захисту програм від переносу на інші комп’ютери полягає у використанні ключової дискети. У цьому випадку робоча програма, що знаходиться на жорсткому диску, перед початком роботи перевіряє наявність на дисководі дискети з ключовою інформацією. Для того, щоб ключову дискету не можна було розмножити за допомогою команди DISKCOPY, що здійснює копіювання на фізичному рівні, ключова інформація записується на доріжці з нестандартним форматом, розташованої до того ж за межами робочого простору диска. Така ключова дискета підготовляється спеціальною установчою програмою, що за допомогою функції 05h переривання BIOS 13h, форматує, наприклад, доріжку номер 40 (або 80) із розміром сектора 256 байтів замість 512 і записує на її заданий ключ. Робоча програма перед початком роботи виконує читання нестандартної доріжки і при відсутності самої доріжки або ключа на ній аварійно завершується. Такий засіб зручний тим, що користувач, придбавши програмний продукт із ключовою дискетою, може вільно переносити його з комп’ютера на комп’ютер і навіть запускати його на декількох комп’ютерах одночасно, але не має можливості передати програмний пакет третій особі (не позбавивши себе ключової дискети)
2. Теоретичні підходи до побудови
2.1 Метод створення програми перевірки доступу за методом Тюрінга доступ тюрінг програма захист
CAPTCHA ([kжpt??]; від англ. Completely Automated Public Turing test to tell Computers and Humans Apart — повністю автоматизований публічний тест Тюрінга для розрізнення комп’ютерів і людей) — товарний знак Університету Карнегі - Меллона, в якому розробили комп’ютерний тест, використовуваний для того, щоб визначити, ким є користувач системи: людиною або комп’ютером. У Рунеті часто транскрибується як «капча». Термін з’явився в 2000 році. Основна ідея тесту: запропонувати користувачеві таку задачу, яку з легкістю може вирішити людина, але яку складніше вирішити комп’ютеру. Станом на 2011 р. приблизно 200 мільйонів CAPTCHA вводилося кожен день людьми в світі. У найбільш поширеному варіанті CAPTCHA користувач вводить символи, зображені на малюнку (часто з додаванням перешкод або напівпрозорості). За загальноприйнятим нормам доступності інтернету для людей зі слабким зором, така CAPTCHA повинна доповнюватися варіантом, заснованим на розпізнаванні мови (аудіо-CAPTCHA). Можуть також застосовуватися інші погано алгоритмізовані завдання: наприклад, дізнатися, що знаходиться на зображенні, відзначити всі картинки з кішками або відповісти на питання, пов’язане зі знаннями або менталітетом людей (наприклад, «висить груша, не можна з'їсти»). Тим не менш, стандартом стало саме розпізнавання символів: воно не прив’язане ні до якої культури (основна перешкода — слабкий зір), працює навіть на мобільних браузерах, і користувач зі стажем швидко пізнає картинку як CAPTCHA. Існують програми (наприклад, PWNtcha), що розпізнають конкретні реалізації CAPTCHA. Крім того, існує можливість підключати модулі з програм розпізнавання тексту загального призначення (наприклад, FineReader, OmniPage) в програми сторонніх розробників для розпізнавання картинок CAPTCHA. По відношенню до автоматизованого розпізнавання існують поняття «слабка CAPTCHA» і «сильна CAPTCHA». У числі «слабостей» — фіксований шрифт, фіксоване положення символів, відсутність спотворень, відділення символів від фону з використанням колірного ключа або розмиття по Гауса, легке відділення символів один від одного і т. д. Втім, іноді буває, що сильна CAPTCHA виявляється важко розпізнаваний і для людини. Зрідка зустрічається CAPTCHA, легко прочитується комп’ютером і з великими труднощами — людиною (наприклад, з неконтрастною картинкою). Якщо згенерувала картинка виявилася нечитаною, користувач, як правило, має можливість отримати нову. Міцна CAPTCHA повинна видавати картинку з іншою відповіддю. Є спосіб «розпізнавання», відповідно до приказки «чужими руками жар загрібати», що використовує людський ресурс з високовідвідуваних сайтів, наприклад, сайтів порно-тематики. Робот викачує CAPTCHA з потрібного інтернет-сервісу і пред’являє його відвідувачеві порносайту. Натомість відвідувач порносайту отримує доступ до порно-ресурсу, а робот дізнається код, зображений на картинці, і вводить його на «штурмуючи» сайті. Відвідувач порносайту може і не підозрювати, що кожен переглянутий порноролик обертається реєстрацією нової поштової скриньки для розсилки спаму. Для захисту (не повної) від такого способу обходження CAPTCHA, сайт автоматично змінює CAPTCHA-картинку, якщо відповідь на неї не ввели відразу (протягом невеликого проміжку часу), — регулярно кожен раз через певний період часу, або при спробі почати запізнілий введення відповіді. Є також спеціалізовані сайти для обміну або продажу капч.
2.2 Розробка структури програми Сьогодні, завдяки панам спам-ботам із ними, в мережі практично неможливо щось зробити без введення символів зі згенерованого зображення — CAPTCHA (далі - капча). Основні правила при розробці капчі потрібно обов’язково дотримуватися кількох основних правил:
1. Капча створена для людей Вона повинна сходу читатися, але не на шкоду стійкості до розпізнавання. Дуже наочний приклад капчі, не дотримує це правилозображення праворуч.
2. Генератор капчі повинен бути чітко обмежений у використовуваних символах. До речі, коли мова йде про капчі з використанням кириличних символів — ні в якому разі генератор не повинен використовувати букву «е». Особисто я знаю багато людей, у яких на ~ (тильда / е) повішено якусь дію в системі.
3. Капча повинна бути стійкою до розпізнавання. Але не на шкоду читаності. Взагалі, цей пункт — найскладніший у всій розробці. Необхідно знайти золоту середину — капча сходу читається людьми і взагалі (наскільки можливо) не читається ботами. Так само необхідно враховувати специфіку ресурсу, на якому планується використовувати капчу, і його контингенту. Якщо мова йде про, припустимо, форумі читаючих домогосподарок за сорок, то на стійкість капчі можна плюнути з високої вежі - нікому він не упреться. Якщо мова йде про, наприклад, імейджборде, то тут потрібна капча а-ля вирвиоко. Проектування в якості теоретичного об'єкта, для якого ми будемо робити капчу, виступить сферичний форум у вакуумі, з помірно агресивними, помірно розумними і взагалі помірними користувачами. Отже, по порядку перерахуємо, що ж ми можемо використовувати:
1. У зображенні повинно використовуватися хоча б кілька кольорів. Бажано завжди різні Зображення вище — приклад того, як це виглядає в дії. Насправді, це не дуже надійний варіант, так як текст з фоном дуже контрастує.
2. Повинен бути присутнім шум. Прописна істина. Практично в будь капчі можна зустріти шум, який найчастіше виражається в безлічі ліній, що перетинають текст, різної довжини і під різним кутом.
3. Літери повинні знаходитися на невеликій відстані один від одного. Тут головне не перестаратися. Надмірне зближення символів призведе до сильного погіршення читабельності людиною. На прикладі вище можна помітити, що букви злипаються, це створює перешкоду для бота при сегментації зображення.
4. Розміри символів мають бути різними Якщо застосовувати цей трюк, то треба пам’ятати, що перешкода фактично виражається в тому, що для сегментації капчі бот не зможе використовувати постійну матрицю. Тому якщо і робити розмір символів різним, то обов’язково для кожного символу розмір повинен бути випадковим, динамічним.
5. Огидний шрифт Дуже корисний спосіб. Зарубки, курсив, стилізація — відмінні підводні камені для бота. Так само в поєднанні з шумом у вигляді ліній дуже добре буде виглядати тонкий шрифт. Якщо абстрагуватися від першого правила генерації капчі, то можна використовувати безліч шрифтів відразу, наприклад свій шрифт для кожного символу.
6. Символи під випадковим кутом Вельми дієвий спосіб убезпечитися від ботів. Знову ж таки, сегментація буде ускладнена, хоч і не значно. Краще всього вибрати невеликий діапазон кута, інакше ж читаність сильно зіпсується (букви будуть напливати один на одного).
7. Динамічні спотворення Нічого жахливішого людство ще не придумало. Спотворення в капчі найчастіше дуже сильно знижують читаність людиною. Зрозуміло, це досить ефективно проти ботів, але це так само ефективно і проти людей. Головне — не перестаратися, спотворення повинні бути незначними. Отже, що ж ми зробимо:
Контрастний фон, з шумом
Лінії за текстом, лінії на тексті
Текст у випадковому положенні
Кількість символів буде випадковим, від 4 до 7
Розмір кожного символу буде випадковим
Колір тексту кожного разу буде випадковим
Символи будуть злегка торкатися
2.3 Вибір мови програмування В даний час розроблено багато високорівневих мов програмування, серед який я виділив для себе мову C#. Для реалізації даного проекту було обрано об'єктно-орієнтовану мову програмування С#.
C # розроблявся як мова програмування прикладного рівня для CLR і, як такий, залежить, насамперед, від можливостей самої CLR. Це стосується, перш за все, системи типів C #, яка відображає BCL. Присутність або відсутність тих чи інших виразних особливостей мови диктується тим, чи може конкретна мовна особливість бути транслювали у відповідні конструкції CLR. Так, з розвитком CLR від версії 1.1 до 2.0 значно збагатився й сам C #; подібної взаємодії слід чекати і надалі. (Проте ця закономірність була порушена з виходом C # 3.0, що представляє собою розширення мови, не спираються на розширення платформи. NET.) CLR надає C #, як і всім іншим. NET-орієнтованим мовам, багато можливостей, яких позбавлені «класичні» мови програмування. Наприклад, збірка сміття не реалізована в самому C #, а проводиться CLR для програм, написаних на C # точно так само, як це робиться для програм на VB.NET, J # та інших. Синтаксис C # дуже виразний, але простий у вивченні. Усі, хто знайомий з мовами C, C + + або Java з легкістю впізнають синтаксис з фігурними дужками, характерний для мови C #. Розробники, які знають будь-який з цих мов, як правило, зможуть домогтися ефективної роботи з мовою C # за дуже короткий час. Синтаксис C # робить простіше те, що було складно в C + +, і забезпечує потужні можливості, такі як типи значень Nullable, перерахування, делегати, лямбда-вирази і прямий доступ до пам’яті, чого немає в Java. C # підтримує універсальні методи і типи, забезпечуючи більш високий рівень безпеки і продуктивності, а також ітератори, що дозволяють при реалізації колекцій класів визначати власну поведінку ітерації, яке може легко використовуватися в клієнтському коді. В C # 3.0 вирази LINQ (Language-Integrated Query) роблять строго-типізований запит першокласної конструкцією мови. Як об'єктно-орієнтована мова, C # підтримує поняття інкапсуляції, успадкування та поліморфізму. Всі змінні і методи, включаючи метод Main — точку входу додатки — інкапсулюються в визначення класів. Клас може успадковувати безпосередньо з одного родового класу, але може реалізовувати будь-яке число інтерфейсів. Для методів, які перевизначають віртуальні методи в батьківському класі, необхідно ключове слово override, щоб виключити випадкове повторне визначення. У мові C # структура схожа на полегшений клас: це тип, який розподіляється по стопках, реалізовує інтерфейси, але не підтримує спадкування.
3. ПРАКТИЧНА РЕАЛІЗАЦІЯ
3.1 Розробка програми Створення програми починається власне з створення форми (рис. 1.1)
Рисунок 1.1 — Створення форми капчі
Форма має 5 елементів: безпосередньо сама форма капчі, PictureBox де власне знаходиться капча, текстове поле для вводу символів TextBox1, кнопки Не Бачу Символів і ОК.
Для Роботи програми підключені наступні бібліотеки:
using System;
using System.Collections.Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System.Windows.Forms;
Далі конструктор форми Form1:
У коді проекту в клас Form1 додамо рядок:
private string text = String. Empty; button1 буде відповідати за оновлення картинки, а button2 за перевірку вводу. Тепер потрібно написати функцію генерації зображення з випадковим текстом. Це зможе зробити наступний код:
private Bitmap CreateImage (int Width, int Height)
{
Random rnd = new Random ();
Створимо зображення:
Bitmap result = new Bitmap (Width, Height);
Обчислимо позицію тексту :
int Xpos = rnd. Next (0, Width — 50); int Ypos = rnd. Next (15, Height — 15);
Додамо різні кольори :
Brush [] colors = {Brushes.Black, Brushes. Red, Brushes. RoyalBlue, Brushes. Green};
Вкажемо де малювати:
Graphics g = Graphics. FromImage ((Image) result);
Нехай фон картинки буде сірим:
g.Clear (Color.Gray);
Згенеруємо текст text = String. Empty; string ALF = «123 456 7890QWERTYUIOPASDFGHJKLZXCVBNM» ;
for (int i = 0; i <5; + + i) text + = ALF [rnd.Next (ALF.Length)];
Намалюємо сгеніріруемий текст:
g.DrawString (text, new Font («Arial», 15), colors [rnd.Next (colors.Length)], new PointF (Xpos, Ypos));
Додамо трохи перешкод.
Лінії з кутів: g. DrawLine (Pens.Black, new Point (0, 0), new Point (Width — 1, Height — 1));g.DrawLine (Pens.Black, new Point (0, Height — 1), new Point (Width — 1, 0)); Білі точки:
for (int i = 0; i
return result;
}
Викличемо дану функцію з події завантаження форми та події натискання на кнопку button1:
private void Form1_Load (object sender, EventArgs e)
{
pictureBox1.Image=this.CreateImage (pictureBox1.Width, pictureBox1. Height);
}
private void button1_Click (object sender, EventArgs e)
{
pictureBox1.Image=this.CreateImage (pictureBox1.Width, pictureBox1. Height);
}
На подію кліка по другій кнопки повісимо наступний код:
private void button2_Click (object sender, EventArgs e)
{
if (textBox1.Text == this. text)
MessageBox.Show («Верно!»);
else
MessageBox.Show («Ошибка!»);
}
3.2 Інструкція по роботі з програмою Для того, щоб запустити дану програму на персональному комп’ютері потрібно скомпілювати проект. Після компіляції програма запуститься, і одразу запропонує користувачеві ввести символи для перевірки. Якщо символи будуть введені вірно, програма завершить роботу, і надасть доступ до основної програми.
3.3 Тестування програми Після запуску програми, з’явилось вікно програми — капчі. Користувачеві запропоновано ввести з клавіатури символи для перевірки на автентичність.
На Рисунку 1.2 відкрите вікно програми.
Рисунок 1.2 — Початкове вікно програми Користувач починає вводити символи з клавіатури, програма по натисканню кнопки ОК, перевіряє введені символи, порівнює з еталоном, і якщо всі символі вірні, дозволяє доступ. На рисунку 1.3 показано підтвердження вводу.
Рисунок 1.3 — Підтвердження вводу символів Якщо, символи введені невірно, програма не допустить користувача до програми, і з’явиться повідомлення «Помилка Вводу» (рис. 1.4).
Рисунок 1.4 — Помилка вводу символів Список використаних джерел:
Захист програмного забезпечення. Частина 1. — Дудатьєв А.В., Каплун В. А., Семеренко В.П.
http://ru.wikipedia.org/wiki/C_Sharp
http://habrahabr.ru/post/146 475/
http://lib.ru/CTOTOR/kernigan.txt
http://forum.vingrad.ru/forum/topic-360 249.html
ДОДАТОК
using System;
using System.Collections.Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System.Windows.Forms;
namespace Capcha
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent ();
}
private void Form1_Load (object sender, EventArgs e)
{
pictureBox1.Image = this. CreateImage (pictureBox1.Width, pictureBox1. Height);
}
private string text = String. Empty;
private Bitmap CreateImage (int Width, int Height)
{
Random rnd = new Random ();
Bitmap result = new Bitmap (Width, Height);
int Xpos = rnd. Next (0, Width — 50);
int Ypos = rnd. Next (15, Height — 15);
Brush[] colors = { Brushes. Black,
Brushes.Red,
Brushes.RoyalBlue,
Brushes.Green };
Graphics g = Graphics. FromImage ((Image)result);
g.Clear (Color.Black);
text = String. Empty;
string ALF = «123 456 7890QWERTYUIOPASDFGHJKLZXCVBNM» ;
for (int i = 0; i < 5; ++i)
text += ALF[rnd.Next (ALF.Length)];
g.DrawString (text,
new Font («Arial», 15),
colors[rnd.Next (colors.Length)],
new PointF (Xpos, Ypos));
g.DrawLine (Pens.Black,
new Point (0, 0),
new Point (Width — 1, Height — 1));
g.DrawLine (Pens.Black,
new Point (0, Height — 1),
new Point (Width — 1, 0));
for (int i = 0; i < Width; ++i)
for (int j = 0; j < Height; ++j)
if (rnd.Next () % 20 == 0)
result.SetPixel (i, j, Color. White);
return result;
}
private void button1_Click (object sender, EventArgs e)
{
pictureBox1.Image = this. CreateImage (pictureBox1.Width, pictureBox1. Height);
}
private void button2_Click (object sender, EventArgs e)
{
if (textBox1.Text == this. text)
{
MessageBox.Show («Добро Пожаловать!»);
Program.flag = true;
this.Close ();
}
else
{
MessageBox.Show («Ошибка Ввода!»);
}
}
}
}