Задачка по IDA и Python
Вдохновение появилось после просмотра видео @Xipho по Ultimap
Когда в Ultimap появляются Nx адресов с одним счетчиком, то хочется увидеть эти связи на графиках IDA.
Появилась идея загуглить как в IDA через IDC скрипт отрисовать ветвь кода или ветви кода, на которых эти самые адреса связаны между собой, а все вложенные другие скрывать.
Пока из подсказок я нашел это и это
Допустим для тренировки даны два адреса из одной ветви кода (это я точно знаю, т.к. получен не из ultimap, а из tracelog)
Адрес1 - Tutorial-i386.exe+2578F - 29 83 AC040000 - sub [ebx+000004AC],eax" или адрес 0x00402B77
Адрес2 - Tutorial-i386.exe+16DBED - 89 45 FC - mov [ebp-04],eax или адрес 0x0056DBED
И вот думаю, как скрипт ниже переделать, чтобы сначала вывести текстовый маршрут, а потом и хотя бы одну ветвь кода. Т.е. поднимаясь вверх по иерархии вызовов нужно остановиться до Адреса2.
#include <idc.idc>
static main()
{
auto ea, func, ref;
// получаем текущий адрес курсора
ea = 0x00402B77;
// в цикле от начала (SegStart) до конца (SegEND) текущего сегмента
for (func = SegStart(ea); func != BADADDR && func < SegEnd(ea); func = NextFunction(func))
{
// если текущий адрес является адресом функции
if (GetFunctionFlags(func) != -1)
{
Message("Function %s at 0x%x\n", GetFunctionName(func), func);
// находим все ссылки на данную функцию и выводим
for (ref = RfirstB(func); ref != BADADDR; ref = RnextB(func, ref))
{
Message(" called from %s(0x%x)\n", GetFunctionName(ref), ref);
}
}
}
}
Пока просто вывод от стартовой функции без условий
Как будет время попробую доделать...
p.s. Ну ничего так idc скрипты. Много всего, но смысл тот же, что и в CE Lua у некоторых функций. Еще не разобрался как Python подключить к IDA, пока на idc скриптах.
Будет интересно еще посмотреть эту же задачу на Hydra и Radare, ну и в CE (в новой версии появилось окно диаграмм)
- 1
- 1
3 Комментария
Рекомендуемые комментарии
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти