Для чего предназначены программы дизассемблеры

Книга посвящена вопросам и методам дизассемблирования, знание которых позволит эффективно защитить свои программы и создать более оптимизированные программные коды.

Объяснены способы идентификации конструкций языков высокого уровня таких, как C/C++ и Pascal, показаны различные подходы к реконструкции алгоритмов. Приводится обзор популярных хакерских инструментов для Windows, UNIX и Linux — отладчиков, дизассемблеров, шестнадцатеричных редакторов, API и RPC шпионов, эмуляторов.

Рассматривается исследование дампов памяти, защитных механизмов, вредоносного программного кода — вирусов и эксплоитов. Уделено внимание противодействию антиотладочным приемам. Для программистов и продвинутых пользователей.

Книга, которую вы сейчас держите в руках, открывает двери в удивительный мир реверсинга (обратной разработки) защитных механизмов. Она адресована всем, кто любит головоломки и готов сделать свои первые шаги на пути к тому, чтобы стать настоящим хакером.

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

Основы дизассемблирования

Книга посвящается обратной разработке — пожалуй, наиболее сложному из аспектов хакерства, ведь дизассемблирование — это искусство.

В начале книги излагаются базовые основы хакерства — техника работы с отладчиками, дизассемблерами, шестнадцатеричными редакторами, API и RPC-шпионами, эмуляторами.

Приводится широкий обзор популярного хакерского инструментария для Windows, UNIX и Linux, а также демонстрируются практические приемы работы с популярными отладчиками (SoftICE, OllyDbg, WinDbg), от широко известных до нетрадиционных.

Значительное внимание уделено таким важным темам, как реконструкция алгоритмов работы защитных механизмов, идентификация ключевых структур языков высокого уровня, таких, как С/C++ и Pascal.

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

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

Источник: www.kavserver.ru

Дизассемблер

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

Знакомство с дизассемблером (ОЧЕНЬ СЛОЖНО)

Язык ассемблера исходный код обычно разрешает использование констант и комментариев программиста . Обычно они удаляются ассемблером из собранного машинного кода . Если так, дизассемблер, работающий с машинным кодом, произведет дизассемблирование без этих констант и комментариев; Дизассемблированный вывод становится труднее интерпретировать человеку, чем исходный аннотированный исходный код. Некоторые дизассемблеры предоставляют встроенную функцию комментирования кода, при которой сгенерированный вывод обогащается комментариями, касающимися вызываемых функций API или параметров вызываемых функций. Некоторые дизассемблеры используют информацию символической отладки , присутствующую в объектных файлах, таких как ELF. Например, IDA позволяет человеку-пользователю составлять мнемонические символы для значений или областей кода в интерактивном сеансе: человеческое понимание, применяемое к процессу дизассемблирования, часто соответствует человеческому творчеству в процессе написания кода.

Читайте также:
Xnview win full что это за программа

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

Проблемы дизассемблирования

Возможно написание дизассемблера, производящего код, который при сборке дает в точности исходный двоичный файл; однако часто бывают различия. Это предъявляет требования к выразительности ассемблера.

Например, ассемблер x86 принимает произвольный выбор между двумя двоичными кодами для чего-то столь же простого, как MOV AX, BX . Если исходный код использует другой вариант, исходный код просто не может быть воспроизведен в любой момент времени. Однако даже при полностью правильной разборке проблемы остаются, если программа требует модификации. Например, та же самая инструкция перехода на машинном языке может быть сгенерирована ассемблерным кодом для перехода в указанное место (например, для выполнения определенного кода) или для перехода на указанное количество байтов (например, чтобы пропустить нежелательную ветвь). Дизассемблер не может знать, что предназначено, и может использовать любой синтаксис для создания дизассемблера, воспроизводящего исходный двоичный файл. Однако, если программист хочет добавить инструкции между инструкцией перехода и ее местом назначения, необходимо понимать работу программы, чтобы определить, должен ли переход быть абсолютным или относительным, то есть должно ли его место назначения оставаться в фиксированном месте или быть перемещен так, чтобы пропустить как исходную, так и добавленную инструкции.

Примеры дизассемблеров

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

Любой интерактивный отладчик будет включать некоторый способ просмотра дизассемблированной отлаживаемой программы. Часто один и тот же инструмент дизассемблирования будет упакован как автономный дизассемблер, распространяемый вместе с отладчиком. Например, objdump, часть GNU Binutils, относится к интерактивному отладчику gdb.

  • Binary Ninja
  • DEBUG
  • Interactive Disassembler ( IDA)
  • Ghidra
  • Hiew
  • Hopper Disassembler
  • Netwide Disassembler (Ndisasm), дополнение к Netwide Assembler (NASM).
  • OLIVER ( CICS интерактивный тест / отладка) включает дизассемблеры для Assembler, COBOL и PL / 1
  • OllyDbg — 32-разрядный отладчик, анализирующий уровень ассемблера
  • Radare2
  • SIMON (пакетное интерактивное тестирование / отладка) включает дизассемблеры для Assembler, COBOL и PL / 1
  • , комментирующий 16-битный / 32-битный дизассемблер для DOS, OS / 2 и Windows от V Communications в 1990-е годы
Читайте также:
Anchor что за программа

Дизассемблеры и эмуляторы

В вывод можно включить динамический дизассемблер эмулятора или гипервизора, чтобы «отслеживать» построчно выполнение любых выполняемых машинных инструкций в реальном времени. В этом случае, а также строки, содержащие дизассемблированный машинный код, регистр (ы) и / или изменение (я) данных (или любые другие изменения «состояние », такие как коды условий), каждая из которых причины отдельных инструкций могут быть показаны рядом с разобранной инструкцией или под ней. Это обеспечивает чрезвычайно мощную отладочную информацию для окончательного решения проблемы, хотя размер результирующего вывода иногда может быть довольно большим, особенно если он активен для выполнения всей программы. OLIVER предоставил эти функции с начала 1970-х годов как часть своего предложения отладочного продукта CICS, а теперь их можно найти в составе продукта XPEDITER от Compuware.

Length disassembler

A дизассемблер длины, также известный как дизассемблер длины (LDE ), представляет собой инструмент, который по последовательности байтов (инструкций) выводит количество взятых байтов по разобранной инструкции. Известные проекты с открытым исходным кодом для архитектуры x86 включают ldisasm, Tiny x86 Length Disassembler и Extended Length Disassembler Engine для x86-64.

См. Также

  • Граф потока управления
  • Анализ потока данных
  • Декомпилятор

Ссылки

Дополнительная литература

  • Винчигерра, Лори; М. Уиллс, Линда; Кеджривал, Нидхи; Мартино, Пол; Винчигерра, Ральф Л. (2003). «Фреймворк для экспериментов по оценке инструментов разборки и перекомпиляции для C ++ и Java]». Труды 10-й рабочей конференции по обратному проектированию (WCRE): 14–23. DOI : 10.1109 / WCRE.2003.1287233. ISBN 0-7695-2027-8. S2CID10398240.
  • Шварц, Бенджамин; Дебрей, Саумья; Эндрюс, Грегори (2002). «Возвращение к разборке исполняемого кода». Труды 9-й рабочей конференции по обратному проектированию (WCRE). Департамент компьютерных наук, Университет Аризоны : 45–54. CiteSeerX10.1.1.85.6387.

Внешние ссылки

Найдите disassembler в Wiktionary, бесплатном словаре.
  • Список Дизассемблеры x86 в Викиучебниках
  • Transformation Wiki при дизассемблировании
  • Boomerang Общий декомпилятор программ машинного кода с открытым исходным кодом и перенацеливанием., бесплатный онлайн-дизассемблер кодов arm, mips, ppc и x86

Источник: alphapedia.ru

Вопрос 81. Отладчики, дизассемблеры и профайлеры. Назначение. Функции и возможности.

Турбо отладчик (Turbo Debugger) — это современный отладчик, позволяющий отлаживать программы на уровне исходного текста и предназначенный для программистов Многочисленные перекрывающие друг друга окна, а также сочетание спускающихся и раскрывающихся меню обеспечивают быстрый, интерактивный пользовательский интерфейс. Интерактивная, контекстно-зависимая система подсказки обеспечит вас подсказкой на всех стадиях работы.

Ниже перечислены лишь некоторые свойства Турбо отладчика: — использование расширенной памяти типа EMS для отладки больших программ; — вычисление любых выражений языка Си, C++, Паскаль и Ассемблера; — настраиваемое размещение информации на экране; — доступ к Ассемблеру и процессору по мере необходимости; — мощные средства использования точек останова и протокола регистрации; — запись нажатий клавиш (макрокоманды); — средства обратной трассировки отлаживаемой программы; — использование удаленной системы для отладки больших программ; — поддержка процессора 80386 и аппаратных отладчиков прочих изготовителей; — полн. поддержка объектно-ориент-го программирования на Турбо Паскаль 5.5 и старше; — полная поддержка языка C++ семейства компиляторов Borland C++; — возможности отладки резидентных в памяти программ и драйверов устройств; — возможности отладки прикладных программ Microsoft Windows. Профилировщики (называемые также анализаторами процесса выполнения программ) — это программные средства, позволяющие получить ряд количественных данных о процессе выполнения программы и на основании этих данных выявить в ней «узкие места», отрицательно сказывающиеся на эффективности ее работы.

Читайте также:
EdiTor packages что это за программа

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

Обнажая внутренний механизм работы программы и вскрывая сущность наиболее сложных операций (что достигается за счет широких возможностей профилировщика начиная от подсчета времени и количества выполнений операторов и заканчивая контролем за вызовами прерываний и обращениями к файлам), система TurboProfiler помогает отшлифовать ваш код и увеличить быстродействие Ваших программ. Реализуя возможности, отсутствующие в оптимизаторах, TurboProfiler выявляет участки программы на выполнение которых затрачивается большое количество времени, показывая тем самым в каком месте необходимо внести улучшения или изменить алгоритм работы.

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

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

Ограничение

Для продолжения скачивания необходимо пройти капчу:

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru