FunCap for X64dbg

Тема в разделе "WASM.SOURCES & 2LZ", создана пользователем galenkane, 25 мар 2025 в 03:32.

  1. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    345
    Что такое FunCap?
    FunCap - это полезный плагин для отладчика x64dbg, который помогает отслеживать вызовы функций и обнаруживать строки в отлаживаемой программе. Плагин создан специально для упрощения процесса анализа программ и особенно полезен для новичков в реверс-инжиниринге.

    upload_2025-3-25_2-35-32.png

    ## Основные возможности
    - Автоматический захват вызовов функций: плагин отслеживает и записывает все вызовы функций, их аргументы и возвращаемые значения
    - Обнаружение строк: автоматически находит и сохраняет строки в памяти программы
    - Удобное логирование: вся информация сохраняется в лог-файл для последующего анализа
    - Автоматический режим: возможность запустить программу и автоматически собрать все данные до завершения
    - Черный список модулей: игнорирование системных библиотек для уменьшения шума в результатах
    - Подсветка в интерфейсе: выделение важных вызовов функций и обнаруженных строк
    ## Для чего это нужно?
    - Понимание работы программы: увидите, какие функции вызываются и в каком порядке
    - Поиск интересной информации: автоматическое обнаружение строк помогает найти важные данные (пароли, URL, сообщения)
    - Обучение: отличный инструмент для тех, кто только начинает изучать реверс-инжиниринг
    - Экономия времени: автоматизирует рутинные задачи анализа
    ## Как пользоваться
    1. Загрузите программу в x64dbg
    2. В меню найдите раздел "Funcap"
    3. Выберите "▶ Start Capture", чтобы начать захват данных
    4. Нажмите "⏵ Run Automatic To End And Save" для автоматического анализа
    5. После завершения работы программы, проверьте файлы funcap_log.txt и funcap_strings.txt

    upload_2025-3-25_2-36-12.png
    upload_2025-3-25_2-36-37.png

    P.S. Если видели funcap под иду то это переписанная под x64dbg версия, компилится просто. Пока что интереса допиливать до рабочего состояния (ну прям точно рабочего) нет. Фактически результат выдает. Можете протестировать на чем-то больше обычного теста. Архив с исходниками на С++. Рекомендую использовать версию без поддержки mem бряков, она более стабильная в автомоде.
     

    Вложения:

    Последнее редактирование: 25 мар 2025 в 03:50
  2. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    551
    Юниkод?

    char pluginPath[MAX_PATH] = {0};
    char currentDir[MAX_PATH] = {0};
     
  3. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    185
    Интересен поиск строк, это часто возникающая проблема.

    Код (Text):
    1.     // Сначала попробуем ASCII строку
    2.     std::vector<unsigned char> data = readMemory(address, 1024); // Увеличиваем размер буфера
    3.     if (data.empty())
    4.         return "???";
    5.  
    6.     // Проверяем если это ASCII строка
    7.     std::string asciiStr;
    8.     bool validAscii = true;
    9.  
    10.     for (size_t i = 0; i < data.size(); i++)
    11.     {
    12.         if (data[i] == 0)
    13.             break; // Найден нуль-терминатор
    14.  
    15.         if ((data[i] >= 32 && data[i] <= 126) || data[i] == '\r' || data[i] == '\n' || data[i] == '\t') // Печатаемые ASCII + некоторые управляющие символы
    16.             asciiStr += static_cast<char>(data[i]);
    17.         else
    18.         {
    19.             validAscii = false;
    20.             break;
    21.         }
    22.     }
    23.  
    24.     if (validAscii && asciiStr.length() >= 3)
    25.     {
    26.         if (asciiStr.length() > STRING_LENGTH)
    27.             asciiStr = asciiStr.substr(0, STRING_LENGTH - 3) + "...";
    28.         return "\"" + asciiStr + "\"";
    29.     }
    Какая то простая эвристика, системная RtlIsTextUnicode() с логикой более сложной, потом посмотрю что в старших версиях.

    Не верный детект строк пропускал необходимые события, когда приложения крутились dbi, инфа терялась.
    --- Сообщение объединено, 25 мар 2025 в 15:24 ---
    DbgGetStringAt -> DBG_GET_STRING_AT -> disasmgetstringatwrapper -> isunicodestring

    - сомнительный функционал..
     
  4. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    345
    alex_dz Ahimov проект не рассчитан на серьезное обозрение, можно как домашку не любимому преподу сдавать. Требовательные персоны уже поправят ошибки:)
     
    M0rg0t и Ahimov нравится это.
  5. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    551
    пилите гитхабло репу
     
  6. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    345
    та не, пока в этом смысла не вижу, пусть тут лежит