| eXeL@B —› Основной форум —› [IDA] как найти все базовые блоки? |
| Посл.ответ | Сообщение |
|
|
Создано: 16 декабря 2010 12:31 · Поправил: GoldFinch · Личное сообщение · #1 Надо наиболее надежным способом найти все базовые блоки (basic blocks). (Базовый блок соответствует одному прямоугольнику графа функции) Подойдут решения использующие IDC или IDAPython или плагин к IDA. Версия IDA - 5.5 Есть пример такого кода в исходниках , но мне кажется что там используется неправильный подход - началом базового блока считается инструкция после конца базового блока, а на практике после конца базового блока может быть мусор, или данные которые анализатор распознал как код. Я набросал IDC скрипт, который считает началом базового блока начало функции или инструкцию на которую есть ссылки, но не уверен что лучшее решение. Code:
| Сообщение посчитали полезным: svladim |
|
|
Создано: 16 декабря 2010 12:54 · Личное сообщение · #2 IDA это делает очень криво, могу дать пару примеров, когда ида не находит все базовые блоки. Решение тут только одно - писать свой софт. Лучше в виде плагина для той же IDA. Наработки у меня есть (ага, как всегда), но времени нет. | Сообщение посчитали полезным: Hexxx |
|
|
Создано: 16 декабря 2010 14:06 · Личное сообщение · #3 |
|
|
Создано: 16 декабря 2010 14:58 · Поправил: ciam · Личное сообщение · #4 лучший вариант - это самому строить CFG граф, т.к. потом будете иметь возможность его упрощать (что важно при анализе современных протекторов/малваре). у меня довольно неплохо работал такой алгоритм: - базовые блоки добавляются при нахождении ветвления (ну естественно )- если ветвление идёт в уже существующий блок, то этот блок делится на 2 блока - чуть сложнее с определением switch tables. нужно анализировать код - иногда без деобфускации кода, правильный граф просто нельзя построить - последний этап - можно убрать незначимые узлы ![]() |
|
|
Создано: 17 декабря 2010 02:40 · Личное сообщение · #5 |
|
|
Создано: 19 декабря 2010 18:48 · Поправил: Clerk · Личное сообщение · #6 |
| eXeL@B —› Основной форум —› [IDA] как найти все базовые блоки? |






)

Для печати