Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
SCP 090: Apocorubik's Cube
SCP 249: The random door
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Долгин А.Е. Весь текст 223.76 Kb

Как защитить информацию (пособие по борьбе с хакерами)

Предыдущая страница Следующая страница
1 2 3 4 5  6 7 8 9 10 11 12 13 14 ... 20
    Характеристики третьей группы, очевидно, не всегда индивидуальны у
конкретной машины. Общеизвестно, что в одной партии конрольная сумма
BIOS одинакова (если, конечно, это не так называемая "белая" сборка).
Энергонезависимая память CMOS, содержащая часы реального времени и
информацию о конфигурации, также зачастую одинакова. К сожалению,
формат CMOS различен на разных типах машин, а значит единого способа
привязки нет. Если же расчет строится на определенный тип компьютера,
то доступ к CMOS вполне возможен (с условием, что конфигурация не
будет меняться в процессе эксплуатации программы).
    Алгоритм чтения/записи байтов в ячейки CMOS приведен на рис. 3.2.
Кстати, процедуру подсчета контрольных сумм можно усложнить, если
арифметическую операцию "сложение" заменить на логическую или добавить
к ней еще что-нибудь.
    А на рис. 3.3 более интересный алгоритм, шифрующий и одновременно
привязывающий программу к конкретному компьютеру. На определенные
участки защищаемой программы накладывают некоторую область CMOS
(например, операцией XOR). При запуске программа сама осуществит
обратную процедуру, дешифрируя свой код (удобнее использовать область,
защищенную контрольной суммой, байты 10h - 20h). Естественно, что на
другом компьютере константа "CMOS" будет отличаться и, значит, процесс
дешифровки испортит программу. Кстати, здесь годится и собственная
информация, записанная в резервные ячейки энергонезависимой памяти,
если, конечно, ее формат позволяет это делать, как, например, у
компьютеров фирмы WIPRO Information Technology Limited (допускающих
достаточно вольное обращение с CMOS: в том числе и с ячейками,
защищенными контрольной суммой, с последующей корректировкой по
адресам 2Eh,2Fh). А компьютеры SystemPro фирмы Compaq, хотя и не дают
программисту возможности воспользоваться этим методом защиты, но
обладают (как и некоторые другие на базе МП 80386 и выше) таким
интересным свойством, как пользовательский пароль, который занесен в
байты 38h - 3Fh и защищен от чтения и записи.
    Последние две особенности третьей группы характеристик ПЭВМ, на
наш взгляд, наиболее перспективны для защиты ПО от исследования и
поэтому рассматриваются в следующей главе ("Защита от исследований").
     Независимо от выбранного способа идентификации, больше всего
вопросов вызывает сама передача программ покупателю. Ведь в этот
момент они уже должны содержать в себе эталонные характеристики ПЭВМ
пользователя, чтобы проводить соответствующие проверки. Хорошо, если
автор может прийти и лично настроить свои программы, а как быть с
иногородними покупателями?
     Действия по настройке лучше всего поручить специальной
инстолирующей программе, которая может храниться на одной дискете с
передаваемым пакетом. Инстолятору поручают разархивацию продукции
(расшифровку и приведение в рабочее состояние), перезапись с дискеты
на винчестер, определение используемых характеристик компьютера и
вписывание их в известные одному автору места программ (конкретные
адреса для этих значений должны быть предусмотрены заранее). Попутно
проверяется - не является ли ключевая дискета незаконной копией и
соответствует ли название организации-покупателя упоминаемому в
договоре купли-продажи. По завершению работы инстолятор может стереть
сам себя с дискеты или сделать отметку об успешно проведенной
инстоляции (чтобы самоликвидироваться после исчерпания оговоренного
договором лимита).
     Такую схему передачи можно применять даже при пересылке
программных продуктов по почте - после самоуничтожения инстолятора
владение ключевой дискетой становится бесполезным.

        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
        ¦                        Ассемблер:                          ¦
        ¦                        ДДДДДДДДДД                          ¦
        ¦ 1 0000          code    segment para public                ¦
        ¦ 2                       assume cs:code,ds:code             ¦
        ¦ 3                                                          ¦
        ¦ 4 0000          sample  proc                               ¦
        ¦ 5                                                          ¦
        ¦ 6 0000  FA          cli                                    ¦
        ¦ 7 0001  BA 0043     mov dx,43h      ; включить 0-й канал   ¦
        ¦ 8 0004  B0 34       mov al,34h      ; таймера              ¦
        ¦ 9 0006  EE          out dx,al                              ¦
        ¦10 0007  B2 40       mov dl,40h      ; задать начальное     ¦
        ¦11 0009  8A C6       mov al,dh       ; значение счетчика    ¦
        ¦12 000B  EE          out dx,al                              ¦
        ¦13 000C  EE          out dx,al                              ¦
        ¦15                ;=======================================  ¦
        ¦16 000D  33 F6         xor si,si        ;                   ¦
        ¦17 000F  8B FE         mov di,si        ; Здесь может быть  ¦
        ¦18 0011  B9 8000       mov cx,8000h     ; расположен любой  ¦
        ¦19 0014  FC            cld              ; ваш текст         ¦
        ¦20 0015  F3> A5        rep movsw           ;                ¦
        ¦21                ;=======================================  ¦
        ¦23 0017  BA 0043   mov dx,43h   ; зафиксировать текущее     ¦
        ¦24 001A  B0 04     mov al,4     ; значение счетчика         ¦
        ¦25 001C  EE        out dx,al                                ¦
        ¦26 001D  B2 40     mov dl,40h   ; считать значение счетчика ¦
        ¦27 001F  EC        in  al,dx    ; в AX                      ¦
        ¦28 0020  8A E0     mov ah,al                                ¦
        ¦29 0022  EC        in  al,dx                                ¦
        ¦30 0023  86 E0     xchg ah,al                               ¦
        ¦31 0025  FB        sti                                      ¦
        ¦32                                                          ¦
        ¦33        ; здесь должна быть проверка считанного значения  ¦
        ¦34                                                          ¦
        ¦35 0026  B8 4C00        mov ax,4c00h                        ¦
        ¦36 0029  CD 21          int 21h                             ¦
        ¦37                                                          ¦
        ¦38 002B         sample  endp                                ¦
        ¦39 002B         code    ends                                ¦
        ¦40              end     sample                              ¦
        ¦                                                            ¦
        ¦                        BASIC:                              ¦
        ¦                        ДДДДДД                              ¦
        ¦100     OUT     &H43, &H34                                  ¦
        ¦110     OUT     &H40, 0                                     ¦
        ¦120     OUT     &H40, 0                                     ¦
        ¦        . . . . . . . . . . . . . . . . . . .               ¦
        ¦                                                            ¦
        ¦        ' Текст замеряемого участка программы               ¦
        ¦                                                            ¦
        ¦        . . . . . . . . . . . . . . . . . . .               ¦
        ¦300     OUT     &H43, 4                                     ¦
        ¦310     X% = INP ( &H40 ) + INP ( &H40 ) * 256              ¦
        ¦320     PRINT X%                                            ¦
        АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
                                  рис. 3.1

        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
        ¦1)  чтение:                                                 ¦
        ¦    Ассемблер:                         BASIC:               ¦
        ¦    ДДДДДДДДДД                         ДДДДДД               ¦
        ¦      . . .                           . . .                 ¦
        ¦mov al,номер байта CMOS    300  OUT &H70, номер байта CMOS  ¦
        ¦  out 70h,al                 310  X% = INP ( &H71 )         ¦
        ¦  jmp $+2                                                   ¦
        ¦  in al,71h                               . . .             ¦
        ¦     . . .                                                  ¦
        ¦2   запись:                                                 ¦
        ¦        Ассемблер:                     BASIC:               ¦
        ¦        ДДДДДДДДДД                     ДДДДДД               ¦
        ¦        . . .                          . . .                ¦
        ¦  mov al,номер байта CMOS    300  OUT &H70, номер байта CMOS¦
        ¦  out 70h,al                 310  OUT &H71, новое значение  ¦
        ¦  jmp $+2                                                   ¦
        ¦  mov al,новое значение               . . .                 ¦
        ¦  out 71h,al                                                ¦
        ¦   . . .                                                    ¦
        АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
                                  рис. 3.2


        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
        ¦    Ассемблер:              BASIC:                          ¦
        ¦    ДДДДДДДДДД              ДДДДД                           ¦
        ¦  . . .                     . . .                           ¦
        ¦  mov ax,0f800h         500  DEF SEG = &Hf800               ¦
        ¦  mov es,ax             510  S = 0                          ¦
        ¦  xor ax,ax             520  FOR I = 0  TO  32766  STEP 2   ¦
        ¦  mov bx,ax             530  S = S + PEEK(I) + PEEK(I+1)*256¦
        ¦  mov cx,4000h          540  NEXT                           ¦
        ¦rpt:                    550  PRINT S                        ¦
        ¦  add ax,es:[bx]                                            ¦
        ¦  inc bx                   . . .                            ¦
        ¦  inc bx                                                    ¦
        ¦  loop rpt                                                  ¦
        ¦   . . .                                                    ¦
        АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
                              рис. 3.3


                      4. ЗАЩИТА ОТ ИССЛЕДОВАНИЙ.
     Чтобы модернизировать механическое изделие, электронное
устройство или интеллектуальный продукт - программу - надо понять
принцип работы, определить основные и вспомогательные части. Для
программ существуют специальные инструменты, позволяющие разбирать их
"до винтика". Самые универсальные называются дизассемблеры и
отладчики. Первые преобразуют непонятный машинный код в удобочитаемый
текст на языке низкого уровня - ассемблере. Вторые - информируют обо
всех процессах, протекающих в недрах компьютера, после выполнения
отдельного участка или даже каждого шага программ, то есть помогают
понять суть выполняемых операций. Поэтому следущая "линия обороны"
любого блока защиты проходит именно здесь.
    Четкой грани между дизассемблированием и анализом полученного
текста под отладчиком - нет (часто эти функции совмещены в единой
программе), что и позволило объединить методы борьбы с обоими
способами "взлома" в рамках одной статьи. Но приемы против каждого из
них - свои. Ведь противодействовать декодировке записанного на дискете
файла нельзя (допустима лишь пассивная защита - запутывание алгоритма
или шифрация самих кодов), зато при работе защищенных модулей на
компьютере ( пусть даже в пошаговом режиме отладки ) активное
сопротивление вполне возможно.
     Еще одно замечание. Искусственное усложнение исполняемого модуля
затрудняет исследование алгоритмов. Надежность защиты, в данном
случае, зависит от того, насколько программист отождествит себя со
Предыдущая страница Следующая страница
1 2 3 4 5  6 7 8 9 10 11 12 13 14 ... 20
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (4)

Реклама