Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К экзамену (МиСЗКИ).docx
Скачиваний:
18
Добавлен:
15.04.2019
Размер:
155.29 Кб
Скачать
  1. Методы взлома программ

Эмуляция ключа

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

  • программный

  • аппаратный

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

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

Для предотвращения таких попыток обычно при­нимаются следующие меры, усложняющие зада­чу взломщика до сложности задачи криптоана­лиза.

  1. Нестандартная элементная база при изготов­лении ключа (заказные ASIC микросхемы).

  2. Зашумление и динамическое изменение про­токола обмена с ключом. Данная мера преду­сматривает обмен программы с ключом боль­шим количеством информации, не имеющей значения («мусор»). Это затруднит взломщи­ку поиск закономерностей и восстановление оригинального протокола.

  3. Реализация в ключе функции f(х), достаточно сложной для того, чтобы ее анализ невозмож­но было провести за приемлемое время.

И хотя данный способ взлома из-за своей слож­ности относится к разряду экзотических, все же существуют широко рекламируемые и серийно выпускаемые платы-эмуляторы. Примером яв­ляются платы P-CARD — эмулятор ключа SentinelPro, и C-CARD — эмулятор более простых ключей SentineIC и Sentinel Scribe. Обе платы-эмулятора выпускаются компанией Safesoft Systems и предназначены для установки в ISA-слот.

Взлом с использованием отладчиков

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

  1. Отладчики реального режима

В данную группу входят «классические» отладчи­ки реального режима DOS, такие как DOS Debug, AFD, Turbo Debugger. В настоящее время отлад­чики из этой группы практически не используют­ся для реинжиниринга, поскольку они традици­онно используют для своей работы отладочные и трассировочные прерывания (INT1/INT3), стек отлаживаемой программы, оставляют следы в теле программы и в стеке. Даже примитивные антитрассировочные меры, например, исполь­зование в защитных процедурах векторов пре­рываний INT1/INT3, ставят взломщика, пользую­щегося отладчиком из данной группы, в затруд­нительное положение.

  1. Отладчики защищенного режима

В данную группу входят отладчики, получившие наибольшее распространение в последнее вре­мя. Отладчики защищенного режима работают в качестве супервизоров режима V86 и предоста­вляют гораздо больше возможностей, чем от­ладчики из предыдущей группы. В качестве при­меров можно привести широко известные в хакерских кругах SoftICE, WinICE, и, менее попу­лярный Turbo Debugger/386. С одной стороны, отладчики из данной группы оставляют гораздо меньше следов, по которым их можно иденти­фицировать. Например, для установки контрольной точки в теле исполняемой программы используется не стандартное прерывание конт­рольной точки INT3, которое можно легко обна­ружить, а аппаратное прерывание по выполне­нию инструкции. С другой стороны, дополни­тельные возможности в виде прерываний по до­ступу к памяти или портам ввода/вывода делают такие отладчики очень мощным инструментом для реинжиниринга.

  1. Эмуляторы процессора

В данную группу входят средства, эмулирующие аппаратную среду процессоров 80x86 и перифе­рийного оборудования. Очевидно, кроме собст­венно эмулятора, в состав таких средств входят подсистемы отладки, реализующие все функции отладчиков. Эмуляторы процессора могут быть как программными, так и аппаратными. Таким образом, программа получает полную иллюзию работы на обычном процессоре и не может оп­ределить, что кроме процессора существует еще подсистема отладки. Данные средства потенци­ально представляют наибольшую опасность для защитных механизмов, поскольку их наличие определить невозможно. Прием сохранения дампа памяти, описанный в предыдущем разделе, настолько универсален для взлома конвертов, что были созданы специ­альные инструменты для автоматического снятия защиты с использованием данного приема. Условно такие инструменты называют автомати­ческими распаковщиками. Автоматические рас­паковщики используют следующие основные ре­жимы работы.

    1. Распаковка трассировкой

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

    1. Распаковка с поддержкой таблиц

Данный режим основан на том, что каждый ком­пилятор при генерации ЕХЕ файла помещает в его начало абсолютно одинаковый для всех про­грамм startup-код. Например, любая програм­ма, скомпилированная Borland С, начинается с инструкций mov ah,30h; int 21h. Для каждого компилятора можно выделить последователь­ность инструкций, однозначно идентифицирую­щую данный компилятор. Как правило, для оп­ределения таких последовательностей исполь­зуется перехват программных прерываний, вы­зываемых из startup-кода.