Добрый вечер господа =) Я являюсь С++ разработчиком и до сегодняшнего дня дизассемблированием вообще не занимался, но как говорится волка ноги кормят - поэтому пришлось. В процессе чтения форумов выяснил, что 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 файл откуда я могу узнать описание классов в случае необходимости. Возможно ли автоматически подгрузить эти файлы дабы структуры сами сформировались ? Будет большим плюсом развёрнутый ответ. Всем заранее выражаю благодарность.
Hex-Rays декомпилирует в C-код со всеми вытекающими. Ни о каких классах речи нет. Максимум чего можно добиться - создать структуру, содержащую переменные-члены класса + указатель на таблицу виртуальных функций. 3. Нет и в общем случае это невозможно. 4. Где-то в меню есть parse *.h file.
KeSqueer Если тебе не сложно а можешь чуть побробней написать как это сделать , т.е. создать структуру, содержащую переменные-члены класса + указатель на таблицу виртуальных функций ? Суть в том что я не понимаю как описать такую структуру, а также как её применить в коде. т.е. если я создаю пустую структуру то при попытке заменить тип какой-либо переменной в коде на созданную -вылетает ошибка "Syntax error: имя_структуры"
GoldFinch Я читал этот форум, надо зарегистрироваться. Но он больше ориентирован на спецов. Там на глупые вопросы новичков судя по моим наблюдениям не отвечают, а если и отвечают, то я ничего не понимаю, нужна хоть какая-то база по работе с IDA, но где её взять когда никто не хочет на простом примере продемонстрировать. В общем заколдованный круг. Было бы просто волшебно если бы кто-нибудь описал самый простой пример описания структуры с парой методов и переменных.
на будущее - жмите 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 *)
В IDA есть пункт File->Parse C header, но она разбирает только заголовки чистого C, классы не поймёт. Есть книги Криса Касперски "Дизассемблер IDA. Образ мышления" и "IDA. Искусство дизассемблирования". Там развёрнутые ответы на все вопросы Ещё юзайте хелп, он довольно неплох. Также изучите IDA Script, очень полезная вещь.
Так уж и то же самое? Про виртуальные функции да, каюсь, картинку не посмотрел. Уже удалил, а в остальном... Вы, товарищ Товарищ, посоветовали функцию Parse *.h files, там, где она не работает, на что я и обратил внимание. Так же, почему-то, никто не привёл список литературы к прочтению. Книги гуру Касперского - must have для каждого начинающего реверсера!