Собственные типы в IDA

Тема в разделе "WASM.RESEARCH", создана пользователем destrator, 4 май 2010.

  1. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    IDA позволяет вручную определять тип данных для параметров и переменных, определенных во внешних библиотеках типов:
    [​IMG]
    Пара вопросов:
    1) Откуда он берет эти библиотеки (интересует место хранения и формат).
    2) Существует ли возможность создавать библиотеки самостоятельно. Было бы просто замечательно, если, скажем, один раз определить описание vtable, а затем на базе этой инфы IDA самостоятельно переводил смещения в соответствующие ссылки на члены или методы.

    Заранее спасибо.
     
  2. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    Совсем забыл: Возможно ли как-нибудь для структур определить типы C вместо асмовских байта слова и двойного слова, например float, double, чтобы затем при переводе в С-псевдокод они интерпретировались правильно.
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    На второй вопрос ответ - кнопка Y.
     
  4. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    Вон оно как :) Большое спасибо. А может быть для для описателя vtable есть какая нибудь кнопка?
     
  5. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    Что-то не подумалю Можно ведь в качестве типа и функцию указать. Вроде разобрался.
     
  6. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    >> 1) Откуда он берет эти библиотеки (интересует место хранения и формат).
    хранится в библиотеке типов в файлах .til с насколько я знаю недокументированным форматом. При сохранении базы пакуется в файл .idb. Чтобы сохранить нужно вручную перенести файл .til из папки с базой и потом подгружать её через окно Type libraries (файл должен быть в папке til). В нем хранятся определения функций, структур и перечислений.

    >>2) Существует ли возможность создавать библиотеки самостоятельно.
    конечно, существуют два пути
    - Сохранить til файл проекта и потом подгружать его
    - Экспортировать typeinfo в idc файл через меню File->Produce File->Dump typeinfo to IDC

    также существует утилита tilib которая позволяет создавать отдельные til файлы через парсинг си-хидеров. Те перекрывает функциональность иды, но создает отдельный файл ))

    также есть возможность автоматом подгружать определенные файлы til/ids при нахождении определенных сигнатур флирта (.sig)
     
  7. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    izl3sa
    Спасибо за подробный ответ. Парсинг С-хидеров - это вообще замечательно, а то меня уже несколько утомляет ввод структур и типов вручную :)
    Назрел еще один вопрос:
    Например, при декомпиляции получаем псевдокод (последовательность floats)
    Код (Text):
    1.   float v14; // [sp-54h] [bp-5Ch]@2
    2.   float v15; // [sp-50h] [bp-58h]@2
    3.   float v16; // [sp-4Ch] [bp-54h]@2
    4.   float v17; // [sp-48h] [bp-50h]@2
    5.   float v18; // [sp-44h] [bp-4Ch]@2
    6.   float v19; // [sp-40h] [bp-48h]@2
    7.   float v20; // [sp-3Ch] [bp-44h]@2
    8.   float v21; // [sp-38h] [bp-40h]@2
    9.   float v22; // [sp-34h] [bp-3Ch]@2
    10.   float v23; // [sp-30h] [bp-38h]@2
    11.   float v24; // [sp-2Ch] [bp-34h]@2
    12.   float v25; // [sp-28h] [bp-30h]@2
    13.   float v26; // [sp-24h] [bp-2Ch]@2
    14.   float v27; // [sp-20h] [bp-28h]@2
    15.   float v28; // [sp-1Ch] [bp-24h]@2
    16.   float v29; // [sp-18h] [bp-20h]@2
    но мне точно известно, что этот ряд ни что иное, как struct D3DXMATRIX (sizeof(D3DXMATRIX) == sizeof(float)*16). Позволяет ли IDE в окне псевдокода объединить эту последовательность из 16 floats в struct D3DXMATRIX? Это бы несколько улучшило читабельность псевдокода.
     
  8. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    хоспаде ) хэкс-рэйс меня никогда не радовал )) и я им не пользуюсь (и не советую). Но полагаю, что о типах он берет инфу из til. Поэтому необходимо просто
    1) Добавить структуру D3DXMATRIX в окне структур
    2) В окне стэка нужной функции применить эту структуру к локальным переменным с нужного адреса - Alt-Q ну и обозвать как-нибудь подобающе.
    3) Есчо раз жмакнуть на f5 ) и посмотреть на вывод.
     
  9. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    сейчас посмотрел на 5.5, где поставлен хекс-рэйс. Он не берет инфу из тила к сожалению, но если по типу переменной шелкнуть правой кнопкой мыши, то там интересные пункты будут - Set lvar type (Y), им и можно задавать типы переменных и структур, но автоматом перекрываемые переменные не становятся членами структуры почемуто. Тк не использую хекс-рейс, то мне не хочется разбиратся каким образом его можно заставить нормально работать, есчо раз советую смотреть в асм коде все, оно наглядней, как показывает практика, а сворачиваемость нод в graph view позволяет убрать некоторую избыточность листинга.

    >>Парсинг С-хидеров - это вообще замечательно, а то меня уже несколько утомляет ввод структур и типов вручную :)
    Ctrl-F9 или File->Load File-> Parse C header
    Но там существует ряд ограничений + необходимо настроить пути поиска, чтобы пользоваться инклудами. Часто приходится править трудные для иды места руками, благо она показывает где именно спотыкается.
     
  10. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    Если нужно что-то быстро найти и поправить, то да: асм удобнее. А вот при декомпиляции с последующим переписыванием на C++ этот плагин незаменим :) Сокращает объем работы в разы. Если бы он еще из PDB инфу о наследовании вытаскивал и расставлял указатели в vtable - цены бы ему не было :)

    Это да :dntknw: Уже проверил

    Да, я обратил внимание. Он еще с макросами работать не умеет. Но, все равно удобнее, чем ручной ввод.

    А на счет структуры не так страшно. Потом руками поправлю.
     
  11. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    В тему. Может кто знает, как задавать такие типы как PVOID? Например, объявлена структура - SOME_STRUCT. Как задать тип PSOME_STRUCT?..
     
  12. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    7mm
    SOME_STRUCT*
    Видимо в С Вы 0.
     
  13. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    С си я знаком. Не поняли Вы. Я хочу писать PSOME_STRUCT, а не * SOME_STRUCT! ;)
     
  14. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    SOME_STRUCT * - конечно же..
     
  15. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    7mm
    это делается через парсер хидеров и typedef`ы.
     
  16. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    Решил не создавать новую тему, вопрос по макросам в псевдокоде, напр.:
    Код (Text):
    1. LOWORD(x) __SETO__(x,x)
    и т.п.
    По поводу LOWORD не сложно догадаться, а вот __SETO__ заводит в тупик. Есть ли какой-нибудь справочник (в официальном мануале не нашел)?
    Сильно не бейте :) Я с IDA работаю не так давно :)
     
  17. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    destrator

    в хидерах все есть (а также в гугле)

     
  18. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    Спасибо, нашел по ключевым словам: #define __SETO__(x, y). Только у меня файла defs.h почему-то не оказалось, как и прочих хидеров :dntknw: Но уже закачал :)
     
  19. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    destrator
    Не ту файла <IDADIR>/plugins/hexrays_sdk/include/hexrays.hpp чтоле?
     
  20. destrator

    destrator New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2010
    Сообщения:
    16
    нет. только тсс... у меня не совсем легальная копия :)