Библиотека knigago >> Компьютеры: Разработка ПО >> Крэкинг и реверсинжиниринг >> Образ мышления – дизассемблер IDA Pro. Том I


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1138, книга: Божественные истории (ЛП)
автор: Эйми Картер

"Божественные истории" Эйми Картер — захватывающая серия романов в жанре любовной фантастики, которая погружает читателей в мир античной Греции, где боги и люди тесно переплетаются. Первый роман серии, "Полуночная ложь", рассказывает об Ариаднe, жрице богини Афины, которую обманом заставляют выйти замуж за Тесея. Преследуемая проклятием, она оказывается вовлечена в смертельный заговор, угрожающий как Олимпу, так и миру смертных. В своем отчаянном поиске истины Ариадна...

СЛУЧАЙНАЯ КНИГА

Крис Касперски - Образ мышления – дизассемблер IDA Pro. Том I

Образ мышления – дизассемблер IDA Pro. Том I
Книга - Образ мышления – дизассемблер IDA Pro. Том I.  Крис Касперски  - прочитать полностью в библиотеке КнигаГо
Название:
Образ мышления – дизассемблер IDA Pro. Том I
Крис Касперски

Жанр:

Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Крэкинг и реверсинжиниринг, Assembler

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Образ мышления – дизассемблер IDA Pro. Том I"

Подробный справочник по функциям встроенного языка, интерфейсу и архитектуре дизассемблера IDA Pro 4.01 с уточнением особенностей младших версий.

Показывает приемы эффективного использования IDA Pro для исследования зашифрованного кода, π-кода, самомодифицирующегося кода и кода, защищенного антиотладочными приемами.

Ориентирован на системных программистов средней и высокой квалификации в совершенстве владеющих языком ассемблера микропроцессоров серии Intel 80x86 и работающих с операционными системами фирмы Microsoft.

Читаем онлайн "Образ мышления – дизассемблер IDA Pro. Том I". [Страница - 2]

демонстрационного) входят две ипостаси – одна графическая под Windows-32 (в дальнейшем обозначаемая как IDAG) и три консольных для MS-DOS, OS/2 и Windows-32. В демонстрационный пакет входит лишь одна графическая ипостась. Обе ипостаси обладают сходными функциональными возможностями, поэтому в книге будет описана лишь одна из них, скомпилированная для исполнения в среде Windows-32 (в дальнейшем обозначаемая как IDAW)
Покупка IDA Pro Standard или IDA Pro Advanced дает право на бесплатное приобретение IDA SDK (Software Development Kit) – программного пакета, позволяющего пользователю самостоятельно разрабатывать процессорные модули, файловые загрузчики и плагины (внешние самостоятельные модули). Это неограниченно расширяет возможности IDA Pro, позволяя анализировать любой код, для какого бы микропроцессора и операционной системы он ни предназначался. SDK различных версий не совместимы друг с другом и созданные пользователем модули могут не работать в другой версии IDA Pro, поэтому, прежде чем переходить на очередную версию IDA Pro, настоятельно рекомендуется убедиться в сохранении работоспособности всех скриптов, модулей и плагинов и т.д.

Рисунок 1 ”ida.console.view” Так выглядит консольная ипостась IDA Pro 4.01
Рисунок 2 “ida.gui.view” Так выглядит графическая ипостась IDA Pro 4.01
Рисунок 3 “ida.gui.view.4.14.bmp” Так выглядит графическая ипостась IDA Pro 4.14 Demo


Кратное введение в дизассемблирование

Одним из способов изучения программ в отсутствии исходных текстов является дизассемблирование, – перевод двоичных кодов процессора в удобочитаемые мнемонические инструкции. С перового взгляда кажется: ничего сложного в такой операции нет, и один дизассемблер не будет сильно хуже любого другого. На самом же деле, ассемблирование – однонаправленный процесс с потерями, поэтому автоматическое восстановление исходного текста невозможно.
Одна из фундаментальных проблем дизассемблирования заключается в синтаксической неотличимости констант от адресов памяти (сегментов и смещений). Потребность распознавания смещений объясняется необходимостью замены конкретных адресов на метки, действительное смещение которых определяется на этапе ассемблирования программы.
Сказанное можно проиллюстрировать следующим примером: рассмотрим исходную программу (a). При ассемблировании смещение строки s0, загружаемое в регистр s0 заменяется его конкретным значением, в данном случае равным 108h, отчего, команда “MOV DX, offset s0” приобретает вид “MOV DX, 108h”. Это влечет за собой потерю информации – теперь уже нельзя однозначно утверждать как выглядел исходный текст, т.к. ассемблирование “…offset s0” и “…108h” дает одинаковый результат, т.е. функция ассемблирования не инъективна1.
Если все машинные инструкции исходного файла, перевести в соответствующие им символьные мнемоники (назовем такую операцию простым синтаксическим дизассемблированием), в результате получится (b). Легко видеть – программа сохраняет работоспособность лишь до тех пор, пока выводимая строка располагается по адресу 108h. Если модификация кода программы (c) нарушает такое равновесие, на экране вместо ожидаемого приветствия появляется мусор – теперь выводимая строка находится по адресу 0x10C, но в регистр DX по прежнему загружается прежнее значение ее смещения – 0x108 (d).

mov ah,9 mov ah,9 mov ah,09
mov dx, offset s0 mov dx,0108h mov dx,0108h
int 21h  int 21h  int 21h
ret ret xor ax,ax
s0 DB 'Hello,World!',0Dh,0Ah,'$' s0 DB 'Hello,World!',0Dh,0Ah,'$' int 16h
ret
s0 DB 'Hello,World!',0Dh,0Ah,'$'
(а) Исходная программа (b) Дизассемблированная программа (с) Модифицированная программа

:0100 start proc near
:0100 mov ah, 9
:0102 mov dx, 108h ─┐
:0105 int 21h │
:0107 xor ax, ax │
:0109 int 16h ◄────┘
:010B retn
:010B aHelloWorld db 'Hello,World!',0Dh,0Ah,'$'
:010C end start

(d) Неработоспособный результат

Аналогичная проблема возникает и переводе с одного языка на другой – фраза «это ключ» в зависимости от ситуации может быть переведена и как “this is key”, и “this is clue”, и “this is switch”… Для правильного перевода мало простого словаря - подстрочечника, необходимо еще понимать о чем идет речь, т.е. осмысливать переводимый текст.
Человек легко может определить, что содержимое регистра DX в данном случае является именно смещением, а не чем ни будь иным, поскольку, его ожидает функция 0x9 прерывания 0x21. Но дизассемблеру для успешной работы мало знать одних прототипов системных и библиотечных функций, – он должен еще уметь отслеживать содержимое регистров, а, следовательно, «понимать» команды микропроцессора. Создание такого --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.