Что такое FunCap? FunCap - это полезный плагин для отладчика x64dbg, который помогает отслеживать вызовы функций и обнаруживать строки в отлаживаемой программе. Плагин создан специально для упрощения процесса анализа программ и особенно полезен для новичков в реверс-инжиниринге. ## Основные возможности - Автоматический захват вызовов функций: плагин отслеживает и записывает все вызовы функций, их аргументы и возвращаемые значения - Обнаружение строк: автоматически находит и сохраняет строки в памяти программы - Удобное логирование: вся информация сохраняется в лог-файл для последующего анализа - Автоматический режим: возможность запустить программу и автоматически собрать все данные до завершения - Черный список модулей: игнорирование системных библиотек для уменьшения шума в результатах - Подсветка в интерфейсе: выделение важных вызовов функций и обнаруженных строк ## Для чего это нужно? - Понимание работы программы: увидите, какие функции вызываются и в каком порядке - Поиск интересной информации: автоматическое обнаружение строк помогает найти важные данные (пароли, URL, сообщения) - Обучение: отличный инструмент для тех, кто только начинает изучать реверс-инжиниринг - Экономия времени: автоматизирует рутинные задачи анализа ## Как пользоваться 1. Загрузите программу в x64dbg 2. В меню найдите раздел "Funcap" 3. Выберите "▶ Start Capture", чтобы начать захват данных 4. Нажмите "⏵ Run Automatic To End And Save" для автоматического анализа 5. После завершения работы программы, проверьте файлы funcap_log.txt и funcap_strings.txt P.S. Если видели funcap под иду то это переписанная под x64dbg версия, компилится просто. Пока что интереса допиливать до рабочего состояния (ну прям точно рабочего) нет. Фактически результат выдает. Можете протестировать на чем-то больше обычного теста. Архив с исходниками на С++. Рекомендую использовать версию без поддержки mem бряков, она более стабильная в автомоде.
Интересен поиск строк, это часто возникающая проблема. Код (Text): // Сначала попробуем ASCII строку std::vector<unsigned char> data = readMemory(address, 1024); // Увеличиваем размер буфера if (data.empty()) return "???"; // Проверяем если это ASCII строка std::string asciiStr; bool validAscii = true; for (size_t i = 0; i < data.size(); i++) { if (data[i] == 0) break; // Найден нуль-терминатор if ((data[i] >= 32 && data[i] <= 126) || data[i] == '\r' || data[i] == '\n' || data[i] == '\t') // Печатаемые ASCII + некоторые управляющие символы asciiStr += static_cast<char>(data[i]); else { validAscii = false; break; } } if (validAscii && asciiStr.length() >= 3) { if (asciiStr.length() > STRING_LENGTH) asciiStr = asciiStr.substr(0, STRING_LENGTH - 3) + "..."; return "\"" + asciiStr + "\""; } Какая то простая эвристика, системная RtlIsTextUnicode() с логикой более сложной, потом посмотрю что в старших версиях. Не верный детект строк пропускал необходимые события, когда приложения крутились dbi, инфа терялась. --- Сообщение объединено, 25 мар 2025 в 15:24 --- DbgGetStringAt -> DBG_GET_STRING_AT -> disasmgetstringatwrapper -> isunicodestring - сомнительный функционал..
alex_dz Ahimov проект не рассчитан на серьезное обозрение, можно как домашку не любимому преподу сдавать. Требовательные персоны уже поправят ошибки