Plugin for structurs offsets recognizing
| |
Мир нужно изменять, иначе он неконтролируемым образом начнет изменять нас самих.
Станислав Лем
|
Требования
Поскольку данное произведение являет собою plugin для IDA Pro, неплохо бы иметь
данный инструмент (причем версии 3.85 и выше, поскольку более младшие версии не
поддерживают plugins). Кроме того явно не повредит знание ассемблера процессоров
семейства Intel x86.
Если же Вы захотите улучшить (или углубить) мое творение (или просто пересобрать
его под другую версию IDA Pro - я предоставляю бинарную версию только для IDA 4.15),
Вам потребуется SDK для Вашей версии IDA Pro, и поддерживаемый Вашей версией IDA
компиллятор C++ (Borland C++ 5.01 для 3.85, Borland C++ Builder 4.0 для 4.05,
free BCC v5.5 для 4.15 - не иначе, как Ильфак обожает разнообразие).
Как работает
В IDA 4.x появилась замечательная возможность - манипуляция структурами. Однако
как всегда в реализации Ильфака весь этот механизм слегка недописан - а именно,
Вы можете объявить структурой некоторую область памяти, но Вы не можете сказать
IDA, что некий DWORD в коде является указателем на структуру ! Вы должны
вручную выставить тип операндов инструкций, манипулирующих указателем на структуру,
в Struct offset и нет (как минимум он мне неизвестен) решительно никакого механизма,
устраняющего эту ручную работу. Предлагаемый Вашему вниманию plugin пытается
решить данную задачу (как минимум этот небольшой plugin показался мне очень
полезным при ковыряниях во внутренностях самой IDA Pro - ведь в ней используются
множество структур, описанных в SDK)
Прежде чем использовать данный plugin, Вы должны для начала заранее определить все Ваши
структуры в IDA Pro. Далее, Вы должны создать файл, в котором указать данному
pluginу соответствие между адресом указателем и типом структуры, на которую он указывает.
Файл этот имеет имя дизассемблированного файла с расширением .off и должен
находиться либо в той же директории, что и дизассемблированный файл, либо в каталоге
IDA Pro. Этот файл имеет следующий формат:
# комментарий
name struct_name
причем name может быть указано и как шестнадцатеричное число (например 0x404EB2).
Соответственно struct_name - название структуры.
Plugin имеет несколько параметров вызова:
0 (по умолчанию) - обработать только текущую функцию
1 - обработать все функции (это может занять некоторое время - даже несколько больше, чем Вы предполагаете :-)
Для того чтобы иметь возможность использовать аргументы pluginа, добавьте строчку
в файл plugins/plugins.cfg вида:
String_in_plugin_menu offsets 0 1
здесь 1 - аргумент вызова pluginа. Вот и все, собственно...
Как собрать самому
Для этого потребуется IDA SDK, соответствующий компилятор C++, и моя библиотека,
лечащая кое-какие косяки самой IDA Pro (лежит в этом же разделе). Для сборки
Вам необходимо будет поправить мой make.bat для указания новых путей к
Вашему компилятору и IDA SDK, а также поправить наcтройки путей в файле
из IDA SDK w32bor.cfg. И Вы будете иметь уникальную возможность насладиться
множеством экранов с ошибками...
Жалобы и предложения
можно отправлять автору по адресу
redplait@usa.net. На глупые вопросы типа
"А где же мне всё-таки достать IDA Pro" или "А что это такое"
я не отвечаю. Если же Вы нашли bug, имеете конструктивные идеи или уверены в
моей неправоте - всегда открыт к общению. Также большая просьба - не присылайте
мне десятимегабайтных (притом несжатых) файлов в качестве доказательства чего бы
то ни было.
Кроме того, автор не несёт ответственности за последствия работы его программ...
Ну и если Вам нужно написать загрузчик, plugin или процессорный модуль для IDA Pro
- можете смело обращаться к автору сего...
#include <std_disclaim.h>