IDA про импорт

я копался в ida Pro в течение последних нескольких недель, чтобы получить немного предыстории.

Что-то, что беспокоило меня в течение долгого времени, — это, по-видимому, отсутствие поддержки извлечения импортированных функций.

Все, что мне нужно, это скрипт, который может скопировать все окно импорта и вставить его в текстовый файл, но у меня серьезные проблемы с поиском в API чего-либо, что может помочь мне в этом. Это должно быть очень просто, но я нахожу это невозможным. Мне удалось найти вещи, чтобы вытащить библиотеку из этого окна, но ничего, чтобы вытащить все.

любая помощь или направление будут высоко оценены.


person Will Markey    schedule 30.01.2013    source источник
comment
Что-то с использованием openImports(), тогда копирование было бы фантастическим. Но я понятия не имею, как сделать бит copyall.   -  person Will Markey    schedule 30.01.2013
comment
+1 только за то, что кто-то задает вопрос IDA.   -  person 0xC0000022L    schedule 30.01.2013


Ответы (2)


Я согласен с утверждением, что вы должны использовать Ctrl+Ins или dumpbin.

Однако то, о чем вы спрашиваете, уже было решено проектом IDAPython, и я предлагаю вам взглянуть на их примеры (здесь и здесь) , особенно этого.

Соответствующие функции idaapi:

  • idaapi.get_import_module_qty
  • idaapi.enum_import_names
person 0xC0000022L    schedule 30.01.2013
comment
Успешно справился. Спасибо еще раз. Не мог поверить, что не мог найти это раньше - person Will Markey; 31.01.2013

Решение с графическим интерфейсом:

Вы можете скопировать все содержимое окна импорта, поместив фокус на это окно и нажав Ctrl+Ins.

Решение IDAPython:

Это может потребоваться настроить по вашему вкусу, но мы надеемся, что это должно помочь вам начать:

text = ""
seg = SegByName(".idata")
for i in xrange(seg, SegEnd(seg), 4):
    text += "%08x %s\r\n" % (i, Name(i))
open(r"c:\imports.txt", "wb").write(text)
person user1354557    schedule 30.01.2013
comment
Сбой, если импорт не в .idata ... и, поскольку это соглашение, а не правило, вы должны это исправить :) - person 0xC0000022L; 30.01.2013
comment
Я хочу иметь возможность использовать сценарий для этого, чтобы я мог делать это с несколькими файлами, есть ли простой способ его написать? - person Will Markey; 30.01.2013
comment
@WillMarkey: Моим первоначальным решением был очень простой скрипт IDAPython для печати имени и адресов, но я удалил его в пользу Ctrl+Ins, потому что не был уверен, нужен ли вам конкретно скрипт или нет. Я верну его обратно, но если все, что вы хотите сделать, это сделать дамп импорта с помощью пакетной обработки, вы можете предпочесть такой инструмент, как dumpbin. (например, dumpbin /imports myfile.exe) - person user1354557; 30.01.2013
comment
Здесь не нравится преобразовывать python int в C long - person Will Markey; 31.01.2013
comment
Ну, если вы не имеете дело с 32-битными адресами, вам нужно немного изменить строку формата, чтобы получить правильный вывод. Приведенный выше фрагмент кода является лишь примером того, как соответствующие API-интерфейсы IDC можно использовать для ваших целей. Однако использование idaapi для получения импорта более надежно, поэтому вместо этого вам следует использовать API, упомянутые в решении @ 0xC0000022L. - person user1354557; 31.01.2013