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

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


    Реклама    

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
зависимости от этого. Здесь ветвление служит лишь для индикации работы
под отладчиком, но вы можете применить его по своему усмотрению.
     На рис. 4.4 использование конвейера шины данных в иной
интерпретации и в более завуалированном виде. По существу, это
вариация на ту же тему и демонстрирует лишь разнообразие способов
работы с конвейером.
     Аномальные явления, с которыми приходится сталкиваться при
программировании МП Intel 80x86, не менее интересная тема при
рассмотрении построения защитных механизмов. Информацию о них
программист чаще всего получает экспериментальным путем (что
становится его "ноу-хау"). Отступлений от стандарта обычно немного
(исключение составляют машины фирмы Compaq с длинным перечнем
особенностей). Об одном упоминалось в печати [2] - это потеря
трассировочного прерывания после команд, связанных с пересылкой
сегментных регистров типа MOV SEG.REG,R/M и POP SEG.REG. К сожалению,
в статье результаты исследований описаны неполно. Во-первых, для МП
8086/8088 (а точнее, японского аналога V20) существует еще один тип
команд, заставляющий пропускать трассировочное прерывание: MOV
R/M,SEG.REG. Во-вторых, для МП с более высоким номером также идет
потеря трассировки, но только для стекового сегментного регистра. Это
свойство с успехом можно применить для определения трассировки и типа
машин.
    Известно, что отладчики при обработке 1-го прерывания анализируют
текущую команду на PUSHF (код 9Ch) и сбрасывают Т-бит. Поэтому
последовательность команд PUSHF, POP AX под отладчиком не позволит
получить установленный 8-й бит в регистре AX. На рис. 4.5 представлен
текст короткой программы, использующей эту особенность. Команда POP SS
заставляет отладчик пропустить следующую за ней команду PUSHF из-за
потери трассировки, и, благодаря этому, выявляется факт работы под
отладчиком.
     Образцом знания особенностей работы МП и наиболее лаконичным
вариантом распознавания его типа мы считаем подпрограмму, текст
которой приведен в статье "Intel insight on specific instructions"
[3]. Вот два примера из нее:
    1) Для определения типа МП, начиная с 80186 и выше, используется
тот факт, что для них в счетчиках сдвигов (линейных и циклических)
маскируются все биты, кроме 5-и младших, ограничивая тем самым
величину сдвига 31 битом.
    2) Начиная с МП 80286, характерна следующая особенность: команда
PUSH SP заносит в стек значение SP с учетом его декремента, а более
низшие типы МП - без.
    Для пытливого ума выявление особенностей микропроцессоров сослужит
хорошую службу как при составлении защитных алгоритмов, так и для
идентификации ПЭВМ, а именно на таких программистов и рассчитана эта
статья.
   В качестве примера, реализующего некоторые приемы, была разработана
утилита DLOCK. Правила пользования ею приведены в приложении 2.

                 Л и т е р а т у р а
     1. Дмитриевский Н.Н., Расторгуев С.П. " Искусство защиты
и "раздевания" программ", "СОВМАРКЕТ", 1991.
     2. статья "Особенности работы МП 8086/8088 в пошаговом
режиме", "Журнал д-ра Добба", N 2, 1991.
     3. "Intel insight on specific instructions", "Personal
Computer World", April, 1990.


        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
        ¦         СОКРЫТИЕ АДРЕСОВ                                   ¦
        ¦а) безусловного перехода                                    ¦
        ¦    jmp m        mov ax,offset m  ; занести в стек          ¦
        ¦    . . .        push ax          ; адрес метки.            ¦
        ¦                 ret              ; перейти на метку.       ¦
        ¦                 . . .                                      ¦
        ¦  m:. . .     m: . . .                                      ¦
        ¦    . . .        . . .                                      ¦
        ¦б) вызов подпрограммы                                       ¦
        ¦    call subr          mov ax,offset m  ; занести в стек    ¦
        ¦    . . .              push ax          ; адрес возврата.   ¦
        ¦    . . .              jmp subr         ; перейти на под-   ¦
        ¦    . . .         m:   . . .            ; программу.        ¦
        ¦  subr:        subr:   . . .                                ¦
        ¦в) прерывание                                               ¦
        ¦    int 21h           pushf         ; занести в стек флаги. ¦
        ¦    . . .             xor si,si                             ¦
        ¦                      mov es,si                             ¦
        ¦                      call dword ptr es:[21h*4]             ¦
        ¦                        . . .                               ¦
        ¦г) возврат из подпрограммы                                  ¦
        ¦    . . .                  . . .          ; взять из стека  ¦
        ¦    ret                    pop bx         ; адрес возврата и¦
        ¦                           jmp bx         ; перейти на него.¦
        ¦   . . .                  . . .                             ¦
        ¦д) выход из прерывания                                      ¦
        ¦   iret                mov bp,sp          ; переход на точку¦
        ¦                       jmp dword ptr [bp] ; возврата из пре-¦
        ¦   . . .               . . .              ; рывания.        ¦
        ¦                       add sp,4           ; точка возврата. ¦
        ¦                       popf                                 ¦
        ¦                       . . .                                ¦
        ¦        МОДИФИКАЦИЯ                                         ¦
        ¦е) перехода                                                 ¦
        ¦     mov word ptr cs:m+1,1234h  ; адрес 1234h вписать вместо¦
        ¦     . . .                      ; 0000 у оператора безуслов-¦
        ¦  m: jmp 0000h                  ; ного перехода             ¦
        ¦     . . .                                                  ¦
        ¦ж) вызываемой подпрограммы                                  ¦
        ¦      mov word ptr cs:m+1,es    ; изменить сегмент п/п      ¦
        ¦      mov word ptr cs:m+3,5678h ; и адрес 0000 на 5678h     ¦
        ¦      . . .                                                 ¦
        ¦  m:  call far 0000h                                        ¦
        ¦      . . .                                                 ¦
        ¦з) косвенного перехода                                      ¦
        ¦      mov bx,1234h                                          ¦
        ¦      jmp dword ptr cs:[bx]                                 ¦
        ¦      . . .                                                 ¦
        ¦и) косвенного вызова подпрограммы                           ¦
        ¦      les si,dword ptr cs:subr                              ¦
        ¦      call word ptr es:[si]                                 ¦
        ¦      . . .                                                 ¦
        ¦к) команды                                                  ¦
        ¦      and  byte ptr cs:m,0EFh ; обнулить 4-й бит по адресу m¦
        ¦      . . .                                                 ¦
        ¦  m:  push ax              ; команда преобразуется в INC AX ¦
        ¦      . . .                                                 ¦
        АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
                            рис. 4.1

                        Фрагмент пакета COPYLOCK
            (использование конвейера шины данных микропроцессора)
        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
        ¦         . . . . .                                          ¦
        ¦cs:07FF          mov     cx,40Eh                            ¦
        ¦cs:0802          mov     di,08A6h                           ¦
        ¦cs:0805          call    subr                               ¦
        ¦        . . . . .                                           ¦
        ¦;=====================================                      ¦
        ¦; Затирание участка памяти.                                 ¦
        ¦        subr     proc    near                               ¦
        ¦cs:0D63          pushf                                      ¦
        ¦cs:0D64          cld                                        ¦
        ¦cs:0D65          mov     ax,ds                              ¦
        ¦cs:0D67          mov     es,ax                              ¦
        ¦cs:0D69          rep     stosw                              ¦
        ¦cs:0D6B          popf                                       ¦
        ¦cs:0D6C          retn                                       ¦
        ¦        subr     endp                                       ¦
        АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
                               рис. 4.2

                    ОПРЕДЕЛЕНИЕ РЕЖИМА ТРАССИРОВКИ
                              (1 вариант)
        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
        ¦ 1 0000         code    segment para public                 ¦
        ¦ 2              assume cs:code,ds:code                      ¦
        ¦ 3                                                          ¦
        ¦ 4 0000         sample1  proc                               ¦
        ¦ 5                                                          ¦
        ¦ 6 0000  0E               push cs                           ¦
        ¦ 7 0001  1F               pop ds                            ¦
        ¦ 8 0002  C6 06 0008r 00   mov byte ptr m+1,0  ; изменение   ¦
        ¦                                 ; смещения в команде JMP   ¦
        ¦ 9 0007  EB 06        m:  jmp short norm_ex                 ¦
        ¦10 0009  BA 001Br         mov dx,offset trace ; выполнение с¦
        ¦                                              ; трассировкой¦
        ¦11 000C  EB 04 90             jmp exit                      ¦
        ¦12 000F                       norm_ex:      ; выполнение без¦
        ¦                                            ; трассировки   ¦
        ¦13 000F  BA 0026r             mov dx,offset norm            ¦
        ¦14 0012               exit:                                 ¦
        ¦15 0012  B4 09                    mov ah,9                  ¦
        ¦16 0014  CD 21                    int 21h                   ¦
        ¦17 0016  B8 4C00              mov ax,4C00h                  ¦
        ¦18 0019  CD 21                int 21h                       ¦
        ¦19                                                          ¦
        ¦20 001B               trace   db 'Tracing!',0Ah,0Dh,'$'     ¦
        ¦21                                                          ¦
        ¦22 0026               norm    db 'Normal exit.',0Ah,0Dh,'$' ¦
        ¦23                                                          ¦
        ¦24                                                          ¦
        ¦25 0035         sample1  endp                               ¦
        ¦26 0035         code     ends                               ¦
        ¦27                       end     sample                     ¦
        АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
                               рис. 4.3

                        ОПРЕДЕЛЕНИЕ РЕЖИМА ТРАССИРОВКИ
                                 (2 вариант)
        ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
        ¦ 1 0000        code    segment para public                  ¦
        ¦ 2                     assume cs:code,ds:code               ¦
        ¦ 3                                                          ¦
        ¦ 4 0000        sample2    proc                              ¦
        ¦ 5                                                          ¦
        ¦ 6 0000  0E               push cs                           ¦
Предыдущая страница Следующая страница
1 2 3 4 5 6 7  8 9 10 11 12 13 14 ... 20
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (7)

Реклама