IDA hex-ray дизассемблирование С++

Тема в разделе "WASM.BEGINNERS", создана пользователем zer0cool, 14 мар 2011.

  1. zer0cool

    zer0cool New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2011
    Сообщения:
    4
    Добрый вечер господа =)

    Я являюсь С++ разработчиком и до сегодняшнего дня дизассемблированием вообще не занимался, но как говорится волка ноги кормят - поэтому пришлось.

    В процессе чтения форумов выяснил, что IDA и hex-ray на данный момент лидируют в этой области. Нашёл, поставил, осваиваю. Мне необходимо разобрать одну библиотеку (с кучей классов) Поэтому возникли ряд вопросов:

    1. Как добиться чтобы IDA понимала и разбирала корректно имена классов ? Например подобное описание (*(void (__thiscall **)(int))(*(_DWORD *)v16 + 8))(v16); выводила в виде this->Method() ? И вообще возможно ли это ? У каждого объекта может быть до 7 базовых классов - возможно ли понять иерархию ? По чтению других форумов я выяснил, что для понимания IDA классов (для неё Structure ? ) необходимо их добавлять в описание Structure ? Если так, то как добавлять класс в котором идёт вперемешку методы и некоторые переменные ?

    2. Есть ли разница в том, какую библиотеку подсовывать IDA - debud or release ? Судя по результатам hex-ray есть, но чтение затрудняет увеличившееся количество методов (в debug) типа sub_42340898374. Что более приоритетное ?

    3. Есть ли возможность заставить IDA понимать stl ?

    4. От самой библиотеки у меня есть .h файл откуда я могу узнать описание классов в случае необходимости. Возможно ли автоматически подгрузить эти файлы дабы структуры сами сформировались ?


    Будет большим плюсом развёрнутый ответ. Всем заранее выражаю благодарность.
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Hex-Rays декомпилирует в C-код со всеми вытекающими. Ни о каких классах речи нет. Максимум чего можно добиться - создать структуру, содержащую переменные-члены класса + указатель на таблицу виртуальных функций.
    3. Нет и в общем случае это невозможно.
    4. Где-то в меню есть parse *.h file.
     
  3. zer0cool

    zer0cool New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2011
    Сообщения:
    4
    KeSqueer
    Если тебе не сложно а можешь чуть побробней написать как это сделать , т.е. создать структуру, содержащую переменные-члены класса + указатель на таблицу виртуальных функций ?

    Суть в том что я не понимаю как описать такую структуру, а также как её применить в коде. т.е. если я создаю пустую структуру то при попытке заменить тип какой-либо переменной в коде на созданную -вылетает ошибка "Syntax error: имя_структуры"
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    http://cracklab.ru/f/index.php?action=vthread&forum=3&topic=17843
     
  5. zer0cool

    zer0cool New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2011
    Сообщения:
    4
    GoldFinch
    Я читал этот форум, надо зарегистрироваться. Но он больше ориентирован на спецов. Там на глупые вопросы новичков судя по моим наблюдениям не отвечают, а если и отвечают, то я ничего не понимаю, нужна хоть какая-то база по работе с IDA, но где её взять когда никто не хочет на простом примере продемонстрировать. В общем заколдованный круг. Было бы просто волшебно если бы кто-нибудь описал самый простой пример описания структуры с парой методов и переменных.
     
  6. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    на будущее - жмите F1 там всё написано %)

    вот вам пример http://savepic.ru/2465192.png
    тип CObjBase::vftable
    CObjBase__vftable_t *

    тип CObjBase__vftable_t::getVisualRange
    int (__thiscall *)(CObjBase *)

    типы задаются кнопкой [Y]

    в коде это выглядит как
    visualRange = pObj->vftable->getVisualRange(pObj);
    (тип pObj - CObjBase *)
     
  7. zer0cool

    zer0cool New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2011
    Сообщения:
    4
    GoldFinch
    Спасибо
     
  8. LShadow77

    LShadow77 New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    36
    В IDA есть пункт File->Parse C header, но она разбирает только заголовки чистого C, классы не поймёт.

    Есть книги Криса Касперски "Дизассемблер IDA. Образ мышления" и "IDA. Искусство дизассемблирования". Там развёрнутые ответы на все вопросы :)
    Ещё юзайте хелп, он довольно неплох.
    Также изучите IDA Script, очень полезная вещь.
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    LShadow77
    Вы читали ответы товарищей? Всё то же самое уже написали.
     
  10. LShadow77

    LShadow77 New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    36
    Так уж и то же самое? Про виртуальные функции да, каюсь, картинку не посмотрел. Уже удалил, а в остальном... Вы, товарищ Товарищ, посоветовали функцию Parse *.h files, там, где она не работает, на что я и обратил внимание. Так же, почему-то, никто не привёл список литературы к прочтению. Книги гуру Касперского - must have для каждого начинающего реверсера!