Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Защита от отладки, основанная на особенностях конвейеризации процессора




Пример

Пример

Пример

Пример

Базовые методы противодействия дизассемблированию программного обеспечения

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

Методы защиты ПО от дизассемблирования пытаются «обмануть» дизассемблера, заставить его сбиться, произвести дизассемблирование неверно, перепутать код и данные, выдать на своем выходе «мусор». В этом случае злоумышленник не сможет правильно исследовать логику работы ПО.

Рассмотрим несколько основных подходов к защите программного обеспечения от дизассемблирования.

1. Шифрование кода программы.

Защищаемый участок кода шифруется каким-либо алгоритмом, а в программу добавляется модуль дешифрования, который в нужный момент дешифрует его и передаст ему управление. Защищаемый участок кода перед дизассемблером предстанет в зашифрованном виде и будет воспринят дизассемблером неверно, на выходе дизассемблера будет сформирован «мусор».

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

2. Сокрытие команд передачи управления.

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

 

Mov word ptr cs:m[1],1234h; модификация адреса перехода
 
m: jmp place; вместо метки place ранее внесён другой адрес
 

 

mov word ptr cs:m[1],es; модификация адреса вызываемой подпрограммы
mov word ptr cs:m[3],5678h  
 
m: CALL far 0000h; данный адрес перехода был ранее модифицирован
 

 

3. Использование косвенной передачи управления.

Данный подход можно проиллюстрировать следующим примером.

Mov bx, 1234h

Jmp dword ptr cs:[bx]

 

4. Использование нестандартных способов передачи управления.

Для затруднения изучения дизассемблированного кода могут использоваться нестандартные способы передачи управления, по каким либо адресам. Разработчик может, например, моделировать работу операторов JMP, CALL, INT средствами других операторов, что затруднит понимание листинга на языке ассемблера. Примеры возможных альтернативных записей команд передачи управления приведены в таблице 13.

Табл. 13. Примеры возможных альтернативных

записей команд передачи управления

Первичный код Альтернативный код
… Jmp m … m: … Mov ax, offset m Push ax Ret … m:
… Call subr m: … subr: … Ret Mov ax, offset m Push ax Jmp subr m: … subr: … Ret
… int 13h … pushf; флаги в стек push cs mov ax, offset m push ax; занести в стек адрес возврата xor ax,ax mov es,ax jmp dword ptr es:[13h*4] m: …
… ret … pop bx jmp bx
Iret Mov bp,sp Jmp dword ptr [bp]; переход на точку возврата из прерывания … add sp, 4; точка возврата popf

 

5. Осуществление короткого перехода вперёд, а между командой перехода и адресом перехода добавление «мусора».

В данном случае, можно добиться совершенно неверного результата дизассемблирования, в особенности для автоматических дизассемблеров.

Seg000:0100 add si, 6; фрагмент кода

Seg000:0103 jmp si; фрагмент кода

Seg000:0105 db 0B9h; фрагмент данных

Seg000:0106 mov si, 114h; фрагмент кода

 

В приведенном выше примере дизассемблер не сможет в автоматическом режиме определить адрес перехода во второй строке и попытается интерпретировать код с адреса 0000:0005 как инструкции. В этом случае результат дизассемблирования будет совершенно неверен и выглядит следующим образом:

Seg000:0000 add si,6;

Seg000:0003 jmp si;

Seg000:0005 mov cx, 14BEh;

Seg000:0008 add [di+5691h], bp

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




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 565; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.