ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Корисні поради з криптографії
         

     

    Інформатика, програмування

    Захист програм від копіювання.

    Олексій! Із задоволенням читаю ваші сторіночки про криптографії і не зміг втриматися щоб не розповісти ще ободной досить ефективний спосіб програм від копіювання. Сам я пишу програми на Fox і використовую цей метод сутність якого наводжу нижче.

    Як зазвичай виглядає запаролений програма? Її крадуть, запускають, і вона гордо так питає: Пароль?!!! (Їй відповідають: на горщику Сидить КОРОЛЬ (joke) або щось в цьому роді Програма говорити: Password невірний, працювати не буду. Звуть хакера. Кажуть, ворога бачиш. Бачу відповідає. Давай, борись. Хакер дістає з кобури дебагер 38 калібру, і справляється з поставленими завданнями.

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

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

    З повагою,

    Олександр Козлов, програмер. Реєстрація заснована на серійних ключах.

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

    Справа в тому, що при хорошому знанні асемблера дуже просто його обійти: коли користувач вводить своє ім'я та реєстраційний код, програма генерує "правильний" код і порівнює його з тим, який він запровадив, тому "перехопити" цей код (просто вважати його з пам'яті) не составлет особливих труднощів. У більшості випадків достатньо просто поставити breakpoint на функцію lstrcmp - і всі справи ... Упаковка програми, анти-дебаггерние і анти-дізассемблерние "примочки" допомагають слабо. Дуже рекомендую заглянути на http://fravia.org - Там багато чого з цього приводу написано.

    А ось перший метод може бути реалізований досить непогано. Зберігати "правильні" ключі в програмі зовсім не обов'язково - можна підпорядкувати їх деяким правилам; щось подібне робить Microsoft зі своїми CD-keys, але у них все дуже просто. Алгоритм перевірки може бути довгим і заплутаним, так що його дізассемблірованіе (і "розбирання", що ж він робить) заподіє чимало головного болю. Саме перший метод я і застосував для захисту своєї програми (Advanced Disk Catalog - старі версії), але й він був "зламаний" (хоча, як мені написав ламав його хакер, добірка всього двох правильних ключів забрала в нього багато часу). Тоді мені в голову прийшла ідея: а що, якщо ключі зберігати усередині програми, але зашифрованими? Я "згенерувати" деяку кількість ключів (абсолютно випадковим чином), зашифрував їх (окремо) 128-бітовим ключем по алгоритму RSA і прошив в програму у вигляді ресурсу. Коли користувач вводить ключ, він шифрується за тим же алгоритмом і порівнюється з правильними. Так як система з відкритим ключем не дозволяє зробити зворотне перетворення, базуючись лише на відкритому ключі (а закритого немає навіть у мене -- розшифровувати-то не треба), то підібрати ключі неможливо навіть теоретично.

    Є, втім, ще одна проблема: хакер (або "крэкер", якщо завгодно) може замінити 'je' на 'jne' (або щось в цьому роді) там, де відбувається остання перевірка, і функція "IsValidKey (...)" буде завжди повертати TRUE. Залишиться лише написати маленький patch ... Щоб захиститися і від цього, я знаходив CRC свого exe-файла і порівнюю його з правильний, прошитим теж усередині програми (природно, при обчисленні ця частина файлу - де лежить правильний CRC - виключається; а "прошивається" він після компіляції). До речі, це ще і захист від вірусів. Взагалі-то, перевірку CRC теж можна локалізувати і "запатчіть", але це вже трохи складніше, особливо якщо програма викликає функції читання/запису і для інших цілей. Крім того, не варто у разі неспівпадання CRC відразу про це повідомляти, ініче можна буде поставити hardware breakpoint і знайти місце, де він обчислюється. І останнє. Якщо хочеться захистити програми зовсім вже "круто", томожно кілька функцій у своїй програмі (ті, які повинні викликатися тільки в зареєстрованій версії), зашифрувати за тим же алгоритмом з відкритим ключем. При цьому, природно, частина серійного номера (посилається зареєструвалися) треба зробити "статичною", тобто незмінним для всіх користувачів. На основі цієї частини після реєстрації генерується повний закритий ключ, який далі використовується для розшифровки зазначених функцій. Таким чином, навіть якщо буде написаний patch, що дозволяє "зареєструватись" з будь-яким (довільним) кодом, розшифровка пройде неправильно, і замість нормального коду буде виконуватися "сміття".

    Цей спосіб я застосував в іншій своїй програмі (Advanced ZIP Password Recovery), і її поки не розкрили. Всього найкращого,

    Vladimir Katalov Як написати свій власний реєстратор.

    Існує 2 типу написання реєстратора програми:

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

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

    исходник написаний на Delphi 2.0

    У полі NameEd типу TEdit вводиться ім'я (залежить від регістрів букв), а в полі PasswEd теж типу TEdit з'являється реєстраційний ключ. Змінивши глобальну константу RegCode можна отримати зовсім інший ключ для одного і того ж вводиться імені. Сенс цього алгоритму в тому, що спочатку з першим елементом Reg (який прирівнюється RegCod'у) робиться побітового операція XOR з усіма елементами стринга імені і XOR з довгою цього стринга, потім у циклі XORітся поточний елемент з попереднім, а потім весь отриманий масив переводиться в 16-розрядну систему числення і записується в результуючий стринг PasswEd.Text.


    const
    RegCode: array [1 .. 5] of integer = ($ 3В, $ 1E, $ FB, $ A1, $ 92); (Введіть сюди свої власні значення)

    .......


    procedure TMainForm.NameEdChange (Sender: TObject);
    var Reg: array [1 .. 5] of integer;
    z: integer;

    {******** Переклад в шестнадцатірічное систему *********}
    procedure HEXCase (HexNm: integer);
    begin

    case HexNm of
    0 .. 9: PasswEd.Text: = PasswEd.Text + IntToStr (HexNm);
    10: PasswEd.Text: = PasswEd.Text + 'a';
    11: PasswEd.Text: = PasswEd.Text + 'b';
    12: PasswEd.Text: = PasswEd.Text + 'c';
    13: PasswEd.Text: = PasswEd.Text + 'd';
    14: PasswEd.Text: = PasswEd.Text + 'e';
    15: PasswEd.Text: = PasswEd.Text + 'f';
    end ;


    end;
    {***************************}


    begin (Main)


    (прирівнюємо RegCode = Reg)
    For z: = 1 to 5 do Reg [z]: = RegCode [z];


    (XORім перший елемент)
    Reg [1]: = Reg [1] XOR Length (NameEd.Text);


    (XORім його знову з усім Nam'ом)
    For z: = 1 to Length (NameEd.Text) do


    (XORім його знову з довжиною Nam'a)
    Reg [1]: = Reg [1] XOR Ord (NameEd.Text [z]);


    (XORім попередній з поточним)
    For z: = 2 to 5 do

    Reg [z]: = Reg [z] XOR Reg [z-1];

    PasswEd.Clear;


    (Перекладаємо Reg в HEX стринг)
    For z: = 1 to 5 do
    begin
    HexCase (Reg [z] div 16);
    HexCase (Reg [z] mod 16);
    end


    end ; (main)  Якщо Ви хочете отримувати за свою Shareware програму гроші, то      можете скористатися послугами пропонованими російською компанією      StrongSoftware

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status