Міні hasp ключ з будь-якого пристрою usb, статті, internet @ mania

Міні HASP ключ з будь-якого пристрою USB

У статті мова піде про реалізацію апаратно-програмного захисту на основі будь-якої флешки. Але слід враховувати, що запропонована методика не є серйозним конкурентом існуючих апаратних ключів таких як HASP HL ​​(з оновлюваної прошивкою) від Alladin [1]. Sentinel, Rockey і ін ...






Ви ніколи не замислювалися, для чого може згодитися звичайна флешка? Багато хто відразу дадуть відповідь: "... що за питання? Звичайно для зберігання інформації ...". Але, це якщо розглядати з точки зору обивателя. А якщо взлянуть на неї "очима комп'ютера"? Очевидно, що цей процес досить непростий, це і протокол обміну по USB, перехідні процеси, ідентифікатори і GUID (Globally Unique IDentifier) ​​...

Трохи теорії.
HASP (Hardware Against Software Piracy) - це система захисту програми (ПО) і апаратури від нелегального використання. Основою більшості ключів HASP - зазвичай є замовною чіп c унікальним ПО, як наприклад в які отримали зараз широке поширення в дверний автоматиці таблетках iBUTTON від Dallas Semiconductor.

Принцип захисту полягає в тому, що в процесі запуску програма опитує ключ, підключений до комп'ютера по I2C, LPT, PCMCIA або USB. Якщо ключ відповідає "правильно", то програма виконується нормально. Інакше, вона блокує доступ до певних функцій або просто не запускається. Таким чином, будь-яка захищається програма складається безпосередньо з самої програми і механізмів перевірки ключа. Завдання цих механізмів - перевірити наявність ключа, отримати його унікальний ідентифікатор, прочитати або змінити вміст вбудованої пам'яті.

Передумови захисту ПО. існуючі рішення
Основними критеріями для використання апаратних ключів є:
  • ціна використовуваних ключів повинна бути незрівнянно менше ціни софта
  • тривалий термін життя програмного продукту
  • індивідуальний алгоритм взаємодії
Перший критерій забезпечується досить легко: з інтенсивною розробкою нових видів пам'яті, таких як PRAM *, ціни на SSD (Solid State Disk) носії вже складають від 5 доларів. Таким чином розробник без шкоди для бюджету може поширювати продукт на самому ключі.






* PRAM (Phasechange Random Access Memory) - пам'ять з довільним доступом, заснована на фазових переходах речовини - халькогенида, що володіє швидкістю доступу близько 10 нс, що можна порівняти з сучасними ОЗУ.

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

Існує безліч варіацій ключів: без власної пам'яті, з захищеної пам'яттю, з вбудованими REAL TIME годинами, з вбудованими мережевими протоколами.

У той же час, крім пропонованого в статті вбудованого рішення у вигляді компонента, існують такі продукти як StarForce і HASP Envelope від компанії Alladin, що дозволяють вже на етапі продажу додавати захисні модулі обміну з ключем в готові програми, інтегруючи їх в код продукту. Але у них є витрати, пов'язані з витратами на покупку самих HASP ключів, вартість яких становить від 25 до 50 доларів за штуку (в залежності від моделі ключа) і ПО для вбудовування (від 200 доларів), при вартості захищається програми від 20 доларів.

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

** не всі флеш-накопичувачі мають даний номер, наприклад деякі чіпи від LG

Для роботи необхідно наступне:
  • Середа Borland Delphi 5-7
  • утиліта Dependency Walker з комплекту Visual C ++ 6.0 [2]
У середовищах NT / XP інформацію про пристроях надає стандартна системна бібліотека SetupApi.dll. Чим і скористаємося. Розглянемо експортовані нею функції за допомогою Dependency Walker, і для зручності розробника вбудуємо в компонент (надалі він буде використовуватися як базис механізму захисту)

для їх використання - здійснимо динамічне їх підключення в компоненті

при створенні компонента инициализируем опитування USB:

Покажемо на практиці як це працює. Вбудуємо компонент в уже готову програму [3] і в меню можна здійснити активацію режиму "міні HASP" (див. Рис.)


після того як флешка буде вставлена, настає подія DBT_DEVICEARRIVAL

виробляємо зчитування серійного номера, ID і GUID


для того, щоб програма знала про наявність потрібного нам "девайса" в будь-який момент часу, а не тільки в момент знімання, скористаємося функцією SetupDiGetClassDevsA все тієї ж бібліотеки - setapi.dll

введемо алгоритм найпростішої захисту на основі функції BlockInput з бібліотеки - user32.dll

Вільно звантажити вихідні коди компонента і тестовий монітор доступні по [4].

Міні hasp ключ з будь-якого пристрою usb, статті, internet @ mania