Глава 4. Эмуляторы процессоров. Использование эмуляторов для взлома и защиты программного обеспечения.
Взломщик, получив листинг программы посредством дизассемблирования или в отладчике, видит знакомые инструкции процессора. Скорость взлома защиты во многом зависит от того, насколько он хорошо знаком с данным процессором. Именно против этого факта направлена рассматриваемая защита.
Суть методологии защиты состоит в том, что критичные участки кода программы или вся программа целиком должна быть написана под «самодельный процессор», инструкции которого выполняются эмулятором на реальном процессоре x86. То есть, спроектировать процессор и написать эмулятор под него.
Начинать проектирование процессора следует с определения круга задач, которые ему предстоит решать. Например, если программа зашифрована – то задача – в ее расшифровке. Спроектированный процессор может быть менее эффективен в плане производительности, чем тот, на котором работает эмулятор, однако некритичные по времени, но нуждающиеся в защите процедуры можно переписать под него.
Для затруднения разбора и понимания эмулятора злоумышленником можно придумать много способов.
1. Можно, вместо многих арифметических инструкций ввести одну универсальную, которая будет складывать два специальных регистра, отведенных для сложения, умножать два регистра, отведенных для умножения. После этого, загружать данные в нужные регистры и выполнять инструкции.
2. Код процедур для эмуляции можно зашифровать или сжать, а потом восстанавливать на лету по одной команде самим эмулятором.
3. Эмулировать мультизадачность – несколько ветвей алгоритма выполняются одновременно, что приводит к большой сложности отладки.
При атаке на данную защиту основная задача злоумышленника - разбор и понимание команд эмулятора. Однако, для этого ему придется писать собственный дизассемблер, разбираясь в командах эмулятора без документации, что очень затруднительно.
Следует отметить также, что эмуляторы x86 позволяют обойти очень многие механизмы противодействия отладке, которые используются производителями. В связи с этим, эмуляторы являются мощным оружием двух сторон – злоумышленников и разработчиков систем защиты. Против эмуляторов бесполезны многие противоотладочные приемы, в них широко используется усиление отладочных и отслеживающих механизмов. Эмуляторы позволяют отвязывать ПО от электронных ключей, эмулируя их на программном уровне. Наиболее мощные дизассемблеры (IDA) позволяют подгрузить логику любого виртуального эмулятора, используемого разработчиком.
Для разработчика главная задача – усложнение архитектуры виртуального процессора до такой степени, чтобы его анализ требовал высокой квалификации взломщика и был чрезвычайно трудоемким и утомительным. Наиболее сложным является анализ многопоточных виртуальных машин с динамическим набором команд и множеством циклов выборки и декодирования.
- Модульная архитектура технических средств защиты по от несанкционированного использования
- Функционирование подсистем и модулей системы защиты по от несанкционированного использования
- Электронные ключи hasp
- Глава 1. Методы и средства обратного проектирования.
- 1.1. Понятие обратного проектирования
- 1.2. Основные приемы, используемые злоумышленником при отладке и дизассемблировании программного обеспечения
- 1.2.1. Специфика атак на модули проверки корректности ключевой информации
- 1.2.2. Специфика атак на модули проверки истечения временного срока работы программы или ограничения по количеству ее запусков
- 1.2.3. Отлов злоумышленником вызова WinApi функций при взломе по
- 1.3. Мониторинг событий
- Глава 2. Методы противодействия обратному проектированию
- 2.1. Методы противодействия отладчикам
- 2.1.1. Защита от отладчиков реального режима
- 2.1.2. Защита от отладчиков защищенного режима
- 2.1.3. Методы, основанные на невозможности полного эмулирования отладчиком среды загрузки программы
- 2.2. Методы противодействия дизассемблированию программного обеспечения
- 2.3. Защита, основанная на человеческом факторе злоумышленника
- Глава 3. Общие методы защиты программ от отладки и дизассемблирования
- 3.1. Использование недокументированных команд и недокументированных возможностей процессора
- 3.2. Шифрование кода программы
- Глава 4. Эмуляторы процессоров. Использование эмуляторов для взлома и защиты программного обеспечения.
- Глава 5. Защита исходных текстов программного обеспечения
- Глава 6. Идентификация и аутентификация субъектов
- 6.1. Идентификация и аутентификация пользователей с использованием технических устройств
- 6.2. Идентификация и аутентификация с использованием индивидуальных биометрических характеристик пользователя
- 7. Защита от разрушающих программных воздействий
- 7.1. Понятие разрушающего программного воздействия
- 7.2 Модели взаимодействия прикладной программы и рпв
- 7.3 Компьютерные вирусы как класс рпв
- 7.4. Защита от рпв. Изолированная программная среда
- Глава 8. Руководящие документы России
- Приложение
- 6.1. Отладка программ в отладчике SoftIce
- 6.2. Дизассемблирование программ с помощью интерактивного дизассемблера Ida Pro
- 6.3. Редактор кода hiew
- Лабораторные работы