Возможно ли? Плагин к IDA, вытаскивающий пар-ры библиотечных функций.

Тема в разделе "WASM.RESEARCH", создана пользователем northdemon, 9 мар 2007.

  1. northdemon

    northdemon New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    4
    Адрес:
    SPb
    Приветствую всех!
    Возможно ли в IDA _автоматизировать_ процесс вытаскивание параметров, передаваемых библиотечной функции при её вызове?

    Например, простейший случай:
    Код (Text):
    1. ...
    2. PUSH 0
    3. PUSH 1
    4. PUSH OFFSET OPC
    5. PUSH OFFSET RETE
    6. PUSH EAX
    7. CALL WtiteProcessMemory@20
    8. ...
    Мысли на эту тему:
    - всё выполняем в debug mode.
    - возможные проблемы с механизмом передачи параметров (через стек, через сегмент данных итд)
    - соглашение для передачи параметров в библиотечные ф-ии фиксированные.

    Возможно, кто-нибудь уже встречался с автоматизацией такого механизма...
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    слишком расплывчато, не ясно что нужно
     
  3. northdemon

    northdemon New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    4
    Адрес:
    SPb
    Согласен, уточняю. Необходимо вытащить значения переданных параметров, например, для
    WriteProcessMemory очень хочется узнать с помощью автоматизированного средства (плагина к IDA) значения 2-ого и 3-его параметров.
     
  4. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    А использовать WinAPI шпион нельзя?! Или нужно чтобы именно IDA показывала параметры?
     
  5. northdemon

    northdemon New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    4
    Адрес:
    SPb
    Нет, к сожалению, нельзя.
    Исключительно IDA, т.е., если можно так выразиться, задача состоит в реализации winapi шпиона.
    Как установить бряк на функцию понятно, вся загвоздка теперь с параметрами :dntknw:
     
  6. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Если я правильно понял, тебе нужно во время выполнения программы, при каждом вызове определенной функции, брать из стека n байт и показывать их в виде двойных слов?! Если так, то я не представляю как это сделать во время работы программы. :dntknw:
    Мне кажется, что без пошагового выполнения это невозможно.
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Теперь ясно. На сайте лежит статья RedPlait'а о написании плагина для IDA и его отладчика,
    + исходники плагина(Встраивание Perl в IDA Pro 4.70 (Second Edition)), с его помощью, написав
    скрипт, такое можно реализовать
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Чтобы зафиналить тему, набросал скрипт(можно модифицировать под нужное
    количество параметров)
    Код (Text):
    1. #!/usr/bin/perl
    2.  
    3. use IDA;
    4. use IDADbg;
    5.  
    6. sub cbBpt
    7. {
    8.     my( $t_id, $addr ) = @_;
    9.     printf("\nt_id %X addr %X\n", $t_id, $addr);
    10.     my $context;
    11.     if ( ThreadContext($t_id, CONTEXT_ALL, $context) )
    12.     {
    13.         my $esp;
    14.         $esp = $context->{'Esp'};
    15.         printf("esp=>0x%08X, [esp]=>0x%08X, [esp+4]=>0x%08X, [esp+8]=>0x%08X\n",
    16.                $esp, read_mem_dword($esp), read_mem_dword($esp + 4), read_mem_dword($esp + 8));
    17.     }
    18. }
     
  9. northdemon

    northdemon New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    4
    Адрес:
    SPb
    Спасибо. Очень благодарен за ответ.