Главная страница
Навигация по странице:

  • VirtualAddress = LinearAddress - (SegmentBase

  • Описание функций встроенного языка


    Скачать 2.86 Mb.
    НазваниеОписание функций встроенного языка
    Анкорobraz_mihlenia_-_dizassembler_IDA
    Дата29.09.2022
    Размер2.86 Mb.
    Формат файлаpdf
    Имя файлаobraz_mihlenia_-_dizassembler_IDA.pdf
    ТипСправочник
    #704305
    страница39 из 39
    1   ...   31   32   33   34   35   36   37   38   39
    ПРИЛОЖЕНИЯ
    КРАТКО О ЗАГРУЗКЕ ФАЙЛОВ
    ОПЦИИ КОМАНДНОЙ СТРОКИ
    Любопытной особенностью IDA является то, что она поддерживает zip формат и позволяет работать непосредственно с упакованными файлам. Если имя файла не указано в командной строке, то IDA сама запросит его при запуске. В процессе дизассемблирования IDA _не_ работает с выбранным файлом (и его безболезненно можно удалить), а создает набор файлов ID? - собственной базы данных - с которой и взаимодействует.
    Поэтому при повторых загрузках файла грузиться не он сам, а созданная ранее база. Понимание этого карайне важно, т.к. при этом не отслеживаются никакие модификации файла, как уже упоминалось исследуемый файл однократно загружается в базу и в дальнейшем не принимает никакого участия в работе.
    Для особых ситуаций предусмотрен ключ командной строки '-c', удаляющий перед запуском ранее созданные дизассемблером базы. Разумеется вместе со всеми заботливо созданными вами комментариями, именами, метеками... уничтожая всю проделанную работу. Конечно, это не может служить решением проблемы - необходимо

    421
    перегрузить только модифицированный фрагмент, а не уничтожать всю базу! И хотя штатно такая возможность не была предусмотрена, встроенный язык IDA позволяет написать подобный загрузчик самостоятельно.
    При первой же загрузке файла появится следующий диалог:
    ( ) Portable executable (PE) [PE.LDW]
    ( ) MS-DOS executable (EXE) [DOS.LDW]
    ( ) Binary file
    В большинстве случаев IDA автоматически определяет тип загружаемого файла, но все же оставляет конечное решение за Вами. Это действительно часто бывает полезно во многих случаях - например вы всегда можете загрузить файл как бинарный и работать с его структурами вручную. Например текущая версия IDA не поддерживает само-загружающиеся модули и завершает работу при попытке загрузки оннных.

    422
    Однако, хоть и редко, но с такими файлами исследователь рано или поздно сталкивается. Единственный выход загружать файл как бинарный и дизассемблировать его с помощью собственных скриптов. Не очень вдохновляющая перспектива конечно, но можно утешить себя по крайней мере тем, что другие дизассемблеры не умеют и этого.
    Остается только надеяться, что рано или поздно разработчики разрешат эту проблемму, но и сегодня IDA обгоняет остальные дизассемблеры числом и качеством поддерживаемых форматов файлов.
    EXE
    Исполняемый файл MS-DOS
    COM
    Исполняемый файл MS-DOS,CP\M
    SYS
    Устанавливаемый драйвер
    MS-DOS
    NE
    New Executable
    Format
    Windows 3.x;OS/2
    LX
    Linear Executable
    Format
    OS/2 2.x and OS/2
    Warp
    LE
    Linear Executable
    Format
    Windows VxD
    PE
    Portable Executable
    Format
    Windows 95; Windows
    NT
    OMF
    Intel Object Module
    Format
    MS DOS;Windows 3.x;
    OS/2
    LIB
    Library of Object
    Files
    MS DOS, MS Windows
    3.x;OS/2.
    AR
    Library of Object
    Files
    UNIX,MS Windows95; MS
    Windows NT
    COFF
    Common Object File
    Format
    UNIX
    NLM
    Novell Netware
    Loadable Modules
    ZIP
    Archive files.
    JAVA
    Java classes
    В действительности этот список не исчерпывает возможности IDA, гибкая архитектура которой позволяет работать с произвольными типами файлов, кроме того с каждой версией число поддерживаемых форматов все увеличивается.
    Loading segment 0x1000 _ _ (EXE & BIN)
    Loading offset 0x0 _ _ (BIN)
    Сегмент и смещение загрузки на первом этапе освоения IDA лучше не изменять.
    Смещение актуально только для BIN файлов. Например для дизассемблирования дампа MBR сектора его необходимо загрузить со смещением 0x7C00 иначе все смещения будут указывать в "космос". Для типотизированных файлов IDA игнорирует установленное смещение загрузки, извлекая эту информацю из соответстующих полей заголовка.
    Базовый адрес сегмента на самом деле не имеет никакого отношения к исследуемому файлу, а к вирутальной памяти IDA. Его значение необходимо только при написании собстенных скриптов, а в остальных случаях оно никак не отразится процессе дизассемблирования.
    [X] Create segments

    423
    Создавать или несоздавать сегмент для бинарных файлов. По умолчанию всегда создается по крайней мере один сегмент. Эту можно выключть когда расставить сегменты вы хотите по своему усмотрению (например, при анализе само-загружамеых модулей). Но создадать хотя бы один сегмент необходимо в любом случае. Внутренняя архитекрура IDA такова, что большинство команд работает только с сегментамии.
    Попытка дизассемблировать фргамент, не принадлежащий ни к одному из сегментов вызовет протест со стороны IDA:
    This command can't be applied to the addresses without a segment.
    Create a segment first.
    Однако, другие команды, такие например, чтение\запись памяти будут успешно работать и могут быть использованы, например, в скрипте расшифровки файла. В этом случае, разумеется в создании сегмента никакой необходимости нет.
    [ ] Load resources
    Указывает на необходимость загрузки ресурсов. Актуально только для PE и NE файлов.
    По умолчанию выключено, однако довольно часто в ресурсах расположены текстовые строки или даже некоторые данные, и в этих случиях ресурсы необходимо загрузить. В остальных же случаях это только лишный расход времени и памяти.
    [X] Rename DLL entries
    IDA умеет распознавать большинтство библиотечных функций (подробнее об этой уникальной возможности в главе посвященной технолгии FLIRT). При этом она может заменять ипортируемые по ординалу функции их непосредственными именами. Если же по каким-то причинам для вас это не примемлимо, то данную опцию необходимо отключить. При этом символьные имена IDA добавит в повторямые комментарии.
    Сравните:
    ; Imports from MFC42.DLL
    ?DoMessageBox@CWinApp@@UAEHPBDII@Z dd ?
    ?SaveAllModified@CWinApp@@UAEHXZ dd ?
    ?InitApplication@CWinApp@@UAEHXZ dd ? и
    ; Imports from MFC42.DLL
    MFC42_2512 dd ? ; DATA XREF: j_MFC42_2512 r
    ;
    ?DoMessageBox@CWinApp@@UAEHPBDII@Z:
    MFC42_5731 dd ? ; DATA XREF: j_MFC42_5731 r
    ;
    ?SaveAllModified@CWinApp@@UAEHXZ:
    MFC42_3922 dd ? ; DATA XREF: j_MFC42_3922 r
    ;
    ?InitApplication@CWinApp@@UAEHXZ:
    MFC42_1089 dd ? ; DATA XREF: j_MFC42_1089 r
    Разумеется, гораздо удобнее когда IDA ординалы заменяет осмысленными именами и найдется немного ситуаций, в которых эту опцию приходится отключать.

    424
    [ ] Manual load
    "Ручная" загрузка некоторых типов файлов. Главным образом полезна для NE\LX\LE форматов. При этом пользователь получает возможность для каждого из объектов файла задать селектор и базовый адрес загрузки. Появится диалог следующего вида:
    'Start Address' указывает по какому адресу будет расположен загружаемый объект. Это значение вычисляется дизассемблером автоматически и обычно нет причин менять его.
    Подробнее об этом будет рассказано в главе, посвященной анализу vxd файлов.
    Селектор, разумеется не имеет никакого отношения к исследуемому файлу, а непосредственно к дизассемблеру, а точнее организации внутренней (вирутальной) памяти IDA. Сейчас мы не будем задерживать на этом внимание, отметим только, что последний необходим для доступа к сегментам, написанных вами скриптов, а в остальных случаях его значение будет "прозрачно" для пользователя.
    Базовый адрес связан с виртуальным адресом следующей формулой:
    VirtualAddress = LinearAddress - (SegmentBase << 4)
    Т.е. одному и тому же виртуальному адресу могут соответствовать различные пары
    SegmentBase:LinearAddress. Подробности в главе, посвященной организации вирутальной памяти IDA.
    'Stop loading file' разумеется означает прекращение загрузки остальных объектов
    (сегментов) файла. Может быть использовано для экономии времени - если остльные объекты\секции вас не интересуют, то к чему тратить время\ресурсы на их загрузку?

    425
    +
    PE файлы имеют более простую огранизацию, в первом приближении предсталяя собой просто образ памяти процесса. Ручная загрузка сводитстся только к произвольному выбору загружаемых секций. Ни базовый адрес, ни адрес загрузки изменить невозможно.
    [X] Make imports section
    По умолчанию IDA преобразует секцию импорта .idata PE файлов в набор директив 'extern' и усекает ее. Обычно это работает нормально, но никто не гарантирует, что в секции импорта не окажется размещенными некоторые данные. Так, например, поступают некоторые вирусы, размещая свое тело в таблице адресов. Разумеется, при этом IDA их "не увидит", В таких случаях 'Make imports section' следует отключить.
    На этом обзор описания загрузки файлов будем считать законченным.
    Интерактивной работе с IDA посвящен второй том этой серии.
    1   ...   31   32   33   34   35   36   37   38   39


    написать администратору сайта