Описание функций встроенного языка
Скачать 2.86 Mb.
|
ПРИЛОЖЕНИЯ КРАТКО О ЗАГРУЗКЕ ФАЙЛОВ ОПЦИИ КОМАНДНОЙ СТРОКИ Любопытной особенностью 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 посвящен второй том этой серии. |