Разрушение программы защиты и схем контроля

Допустим, что злоумышленнику известна интересующая его программа с точностью до команд реализации на конкретном процессоре. Следовательно, возможно смоделировать процесс ее загрузки и выяснить адреса частей программы относительно сегмента оперативной памяти, в которой она загружается.

Это означает, что возможно произвольное изменение кода программы и обеспечение отклонения (как правило, негативного характера) в работе прикладной программы.

Тогда алгоритм действия закладки может быть следующим.

1. Закладка загружается в память каким-либо образом.

2. Закладка осуществляет перехват (редактирование цепочки) одного или нескольких прерываний:

· прерывание DOS “запуск программ и загрузка оверлеев” (int 21h, функция 4Bh);

· прерывание BIOS “считать сектор” (int 13h, функция 02h);

· прерывание от системного таймера (int 08h).

3. По одному из трех событий закладка получает управление на свой код и далее выполняет следующие операции:

· проверка принадлежности запущенной программы или уже работающей (для таймерного прерывания) к интересующим программам;

· определение сегмента, в который загружена программа;

· запись относительно определенного сегмента загрузки некоторых значений в оперативную память так, чтобы отключить схемы контроля и (или) исправить программу нужным образом.

Принципиальная возможность исправления кода следует из того, что вывод о правильности работы программы делается на основе операций сравнения в арифметико-логическом устройстве процессора.

Сравнение результатов работы выполняется командой CMP, а результат сравнения изменяет один или несколько бит регистра флагов. Следовательно, того же результата можно добиться, изменив эти биты в одной из команд работы с регистром флагов типа CLD, CLS, LAHF и т.д.

Наконец, возможен случай, когда содержательный код программы защиты вместе со схемой контроля будет удален из памяти полностью и все последующие операции будут выполнены без влияния программы защиты.

Таким образом, анализируя в данном случае действия закладки, необходимо считать возможным любые искажения кода программ.

Основным способом активизации разрушающих закладок является запуск ассоциированных с ними программ. При этом закладка получает управление первой и выполняет какие-либо действия (изменение адресов прерывания на собственные обработчики, исправление в коде программ защиты и т.д.).

Листинг 14.3. Пример закладки, разрушающей схему контроля

{$M 1024,0,0}
{$I-}
uses
Dos;
const
CMPSeg=$2E7F; { Адреса ячеек, подлежащих модификации, }
CMPOfs=12; { указанные относительно PSP }
JMPSeg=$2EA4;
JMPOfs=2;
var
DOSSeg, DOSOfs, Psp:word;
OldInt8h:pointer;
procedure Int8h; interrupt;
begin
if (Psp=PrefixSeg) then
begin
if(Mem[DOSSeg:DOSOfs]=0) then
asm
mov ah, 62h
int 21h
mov Psp, bx

end;
end
else
begin
MemW[CMPSeg+Psp:CMPOfs]:=$9090; { Запись NOP вместо CMP }
MemW[JMPSeg+Psp:JMPOfs]:=$9090; { Запись NOP вместо JMP }


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: