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

Крис Касперски - Образ мышления – дизассемблер 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". [Страница - 3]

и, соответственно, наоборот.
3

является именно смещением, а не чем ни будь иным, поскольку, его ожидает функция 0x9
прерывания 0x21. Но дизассемблеру для успешной работы мало знать одних прототипов
системных и библиотечных функций, – он должен еще уметь отслеживать содержимое
регистров, а, следовательно, «понимать» команды микропроцессора. Создание такого
дизассемблера (часто называемого контекстным) очень сложная инженерная задача,
тесно граничащая с искусственным интеллектом, которая на сегодняшний день еще никем
не решена. Существует более или менее удачные разработки, но ни одна из них не
способна генерировать 100%-работоспособные листинги.
Например, путь в исходной программе имелся фрагмент (а), загружающий в
регистр AX смещение начала таблицы, а в регистр BX индекс требуемого элемента.
Ассемблер, заменяя оба значения константами (b), создает неразрешимую задачу, – легко
видеть, что один из регистров содержит смещение, а другой индекс, но как узнать какой
именно?
MOV
AX,offset Table
MOV
BX,200h ; Index
ADD
AX,BX
Æ
MOV
AX,[BX]
(а) Исходная программа

BB 00 02
01 D8
8B 07
Æ
B8 10 00
(b) Машинный код

MOV
AX,0010
MOV
BX,0200
ADD
AX,BX
MOV
AX,Word ptr [BX]
(c) Дизассемблированный текст

Другая фундаментальная проблема заключается в невозможности определения
границ инструкций синтаксическим дизассемблером. Путь в исходной программе (a)
имелась директива выравнивания кода по адресам кратным четырем, тогда ассемблер (b)
вставит в этом месте несколько произвольных символов (как правило нулей), а
дизассемблер «не зная» об этом, примет их за часть инструкций, в результате чего
сгенерирует ни на что ни годный листинг (c).
JMP Label
Align 4
Label: XOR AX,AX
RET
(а) Исходная программа
00:
03:
05:
(c)

E9 01 00
jmp
00 33
add
C0 C3
rol
Дизассемблированный

00:
03:
04:
06:
(b)

E90100
00
33 C0
C3
Машинный код

04
[bp][di],dh
bl,-070;
текст

Контекстные дизассемблеры частично позволяют этого избежать, поскольку,
способны распознавать типовые способы передачи управления, но если программист
использует регистровые переходы, дизассемблеру придется эмулировать выполнение
программы, для определения значений регистров в каждой точке программы. Это не
только технически сложная, но и ресурсоемкая задача, решение которой еще предстоит
найти.
Дизассемблирование – творческий процесс, развивающий интуицию и абстрактное
мышление, возможно, даже особый вид искусства, позволяющего каждому проявить свою
индивидуальность. На сегодняшний день не существует ни одного полностью
автоматического дизассемблера, способного генерировать безупречно работоспособный
листинг и доводить полученный ими результат до готовности приходится человеку. Таким
образом, встает вопрос о механизмах взаимодействия человека с дизассемблером.
По типу реализации интерфейса взаимодействия с пользователем, существующие
дизассемблеры можно разделить на две категории – автономные и интерактивные.
Автономные дизассемблеры требуют от пользования задания всех указаний до начала
дизассемблирования и не позволяют вмешиваться непосредственно в сам процесс. Если
же конечный результат окажется неудовлетворительным, пользователь либо вручную
правит полученный листинг, либо указывает дизассемблеру на его ошибки и повторяет всю
4

процедуру вновь и вновь, порой десятки раз! Такой способ общения человека с
дизассемблером непроизводителен и неудобен, но его легче запрограммировать.
Интерактивные
дизассемблеры
обладают
развитым
пользовательским
интерфейсом, благодаря которому приобретают значительную гибкость, позволяя
человеку «вручную» управлять разбором программы, помогая автоматическому
анализатору там, где ему самому не справится – отличать адреса от констант, определять
границы инструкций и т.д.
Примером автономного дизассемблера является SOURCER, а интерактивного –
IDA. Преимущество SOURCER-а заключается в простоте управления, в то время как
работа с IDA требует высокой квалификации и навыков системного программирования.
Неопытные пользователи часто предпочитают SOURCER, лидирующий среди других
дизассемблеров, на небольших проектах. Но он очень плохо справляется с анализом
большого, порядка нескольких мегабайт, заковыристого файла, а с шифрованным или
π-кодом не справляется вообще! И тогда на помощь приходит IDA, --">

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


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