xAnalyzer — это плагин для отладчика x86/x64 x64dbg от @mrexodia. Этот плагин основан на плагине APIInfo от @mrfearless, хотя в него были внесены некоторые улучшения и дополнения. xAnalyzer способен выполнять различные типы анализа статического кода отлаживаемого приложения, чтобы предоставить пользователю дополнительную информацию. Этот плагин будет выполнять обширное обнаружение вызовов функций API, чтобы добавлять определения функций, аргументы и типы данных, а также любую другую дополнительную информацию, что-то близкое к тому, что вы получаете с механизмом анализа OllyDbg, чтобы сделать его еще более понятным для пользователей. пользователя непосредственно перед запуском задачи отладки.
Некоторые из основных функций и улучшений включают в себя:
Расширенный анализ вызовов функций (более 13 000 определений API из почти 200 DLL)
Определенные и общие функции, аргументы, типы данных и дополнительная отладочная информация.
Автоматическое обнаружение петель.
Файлы определений, поддерживаемые пользователем
До xAnalyzer
После xAnalyzer
Загрузите ЗДЕСЬ последнюю версию бинарных файлов.
Загрузите последнюю версию x64dbg.
Извлеките apis_def.zip.
Скопируйте xAnalyzer.dp32/xAnalyzer.dp64 и папку apis_def в соответствующие каталоги плагинов в x64dbg.
Найдите в меню « Плагины » в главном окне x64dbg или во вторичном меню окна Disasm запись « xAnalyzer ».
У xAnalyzer есть несколько опций на выбор, чтобы еще больше персонализировать работу с ним и использовать его только тогда, когда вам это нужно, и так, как вы этого хотите. Параметры плагина следующие:
Автоматический анализ : если эта опция включена, плагин будет запускать полный автоматический анализ исполняемого кода каждый раз, когда он достигает точки входа при загрузке отладчика. Используя эту опцию, вы получаете более точное поведение начального анализа OllyDbg на x64dbg.
Расширенный анализ : этот параметр заставит xAnalyzer выполнить расширенный анализ всего раздела кода отлаживаемого исполняемого файла. ПРЕДУПРЕЖДЕНИЕ!!! При включении этой опции процесс анализа может занять гораздо больше времени и ресурсов, а также x64dbg может использовать большой объем оперативной памяти в зависимости от размера раздела и количества дополнительных данных, добавленных в отлаживаемый исполняемый файл статической дизассемблирования.
Анализировать неопределенные функции : при выборе этой опции xAnalyzer будет использовать общий анализ и типы аргументов для всех тех вызовов/функций API, которые не определены в файлах определения API, а также такие вызовы, как:
CALL {REGISTER}
CALL {REGISTER + DISPLACEMENT}
CALL {DYNAMIC_POINTER}
В xAnalyzer есть несколько команд и опций меню, которые можно выбрать при работе с исполняемым файлом:
Сделав выбор нескольких инструкций в окнах дизассемблирования x64dbg и выбрав это меню, будет произведен быстрый анализ выбранных строк. Вы также можете использовать команду xanal choice для запуска этой опции или даже установить для нее свои собственные горячие клавиши в графическом интерфейсе x64dbg.
Если вы выполняете какую-то функцию, вы можете использовать этот пункт меню для анализа всей этой функции и только этой функции. Взяв одну выбранную инструкцию в качестве эталона, xAnalyzer обработает оттуда все строки внутри блока кода. Вы также можете использовать команду xanal для запуска этого типа анализа или даже установить для него свои собственные горячие клавиши в графическом интерфейсе x64dbg.
Эта команда запустит полный анализ всего модуля. Эта функция учитывает параметр «Расширенный анализ» для глубины используемого анализа. Вы также можете использовать командный модуль xanal для его выполнения или даже установить для него свои собственные горячие клавиши в графическом интерфейсе x64dbg.
В этих случаях все эти меню будут действовать противоположно тому, что делали предыдущие команды. В случае, если вы хотите избавиться от лишней информации при анализе в некоторых частях кода или во всем исполняемом файле, если хотите. Вы также можете использовать команды: xanalremove выделение/функция/модуль
xAnalyzer имеет расширяемую систему файлов определений API, эти файлы присутствуют в папках «api_def» и «api_def/headers» , которые должны содержать все файлы со структурой .ini и нормой:
« имя файла »: это имя модуля, в котором находится функция API.
« имя_файла.h »: это заголовок, содержащий информацию, связанную с данными типа (флагами и перечислениями).
Расширение « .api »: указывает, что это файл определения, никакое другое расширение не распознается (kernel32.api,shell32.api и т. д.).
Все эти ini-файлы содержат важную информацию для плагина, такую как прототипы функций, типы аргументов и т. д. Вся эта информация используется xAnalyzer для установки дополнительной информации в статическом коде. Одна запись в любом из этих файлов будет выглядеть так:
Файл user32.api
[MessageBox]
1=HANDLE hWnd
2=LPCTSTR lpText
3=LPCTSTR lpCaption
4=[MessageBoxType] uType
ParamCount=4
Header=shell.h.api;
@=MessageBox
Файл оболочки.h.api
[MessageBoxType]
TypeDisplay=UINT
Base=UINT
Type=Flag
Const1=MB_ABORTRETRYIGNORE
Value1=0x00000002
Const2=MB_CANCELTRYCONTINUE
Value2=0x00000006
Const3=MB_HELP
Value3=0x00004000
Const4=MB_OK
Value4=0x00000000
Const5=MB_OKCANCEL
...
Любой аргумент в скобках означает, что это определенный тип данных (перечисление или двоичные флаги) и что он будет определен в соответствующем заголовочном файле .h, указанном в ключе « Заголовок ».
Что касается заголовочного файла, то схема практически такая же, только там пара ключей, типа « TypeDisplay ». Здесь указывается правильный тип данных для отображения в комментарии dbg, затем идет « Base », и он будет указывать на базовый тип данных, используемый основной записью. В случае наличия связанного типа данных он может быть заключен в скобки, как хорошо. Ключ « Тип » — это тип структуры данных, и это может быть «Флаг» или «Перечисление». Наконец, появляются все имена и значения переменных.
Если вы обнаружите, что определенное определение вызова API не обнаруживается или определяется неправильно с помощью xAnalyzer, это может означать, что оно отсутствует в файлах определений или определено неправильно, поэтому в этом случае можно внести дополнение или модификацию, включив в него любая недостающая функция или аргументы, если соблюдается одна и та же структура, могут быть на 100% настраиваемы.
Первый неопределенный вызов с общими аргументами в функции не будет обработан, если ему не предшествует переход, поскольку невозможно определить, сколько аргументов использовать, без незаконного использования инструкций пролога функции. В начале функции или неопределенной функции, предваряемой переходом, будут обрабатываться только документированные вызовы.
Некоторые «необычные» функции имеют аргументы среди переходов, поэтому согласно фактическому замыслу плагина (без переходов между аргументами функций) эти вызовы не будут обрабатываться, поскольку каждый раз, когда обнаруживается переход, инструкции в стеке очищаются.
Вложенные вызовы будут работать корректно только в том случае, если:
1-) Внутренний вызов определен
2-) Если внутренний неопределенный вызов принимает не больше аргументов стека, чем аргументы, необходимые для внешнего вызова
Он обнаруживает циклы только внутри функций (границы функций Prologs/RET). Если функция содержит RET в середине своего кода, это будет обнаружено как конец функции, и стек циклов будет очищен.
Анализ может завершиться неудачно, если в имени отлаживаемого исполняемого файла имеется несколько точек.
Некорректное обнаружение цикла для раздела с безусловным переходом внутри него (см. №7).
Вложенные строки аргументов (xAnalyzer поддерживает вложенные аргументы, но x64dbg на данный момент не поддерживает)
Добавить энтропийный анализ
Сканирование анализа потока вместо линейного (эмуляция трассировки)
Обнаружение переключения регистра
хАнализатор 2.5.4
- Обновлен проект до VS2017.
— Исправлены проблемы при обработке инструкций аргумента, включающих указатель стека (версия x64).
- Исправлен неверный порядок аргументов, включающий указатель стека (версия x64).
- Исправлена ошибка распознавания аргументов неопределенных функций, из-за которой регистры дублировались в качестве разных аргументов (версия x64).
- Изменено распознавание неопределенных аргументов вызова, по умолчанию прогнозируется только до 4 неопределенных аргументов (версия x86).
- Некоторый рефакторинг кода.
хАнализатор 2.5.3
- Исправлено обнаружение имен функций в новых версиях x64dbg.
хАнализатор 2.5.2
-Используется текущая выбранная линия разборки для анализа модуля вместо cip.
-Изменены некоторые записи в плагинах.
-Некоторый рефакторинг кода.
-Изменена команда «xanal/xanalremove exe» на «xanal/xanalremove Module».
хАнализатор 2.5.1
-Исправлен сбой при вариациях инструкций перемещения.
хАнализатор 2.5.0
-Удалены инструкции [EBP+/-] как возможные аргументы вызывающего функции.
-Удален префикс «0x» из всех значений аргументов функции, поскольку подразумевается шестнадцатеричное число.
-Исправлены аргументы, в которых переменные указателя отображались не как указатели, а как базовый тип данных.
-Добавлено распознавание использования указателя стека (ESP) в качестве возможного аргумента для вызовов функций (x86).
-Добавлено использование точного имени типа данных в аргументах вместо имени общего/базового типа данных.
-Добавлена функция интеллектуального отслеживания (умное прогнозирование и распознавание косвенных вызовов функций, таких как: CALL {REGISTER}, CALL {POINTER})
-Добавлены имена указателей на функции в качестве параметров (в случае обнаружения будет использоваться все имя функции, а не только адрес)
хАнализатор 2.4.3
- Добавлено распознавание инструкций MOV на x86.
- Добавлено распознавание функций с суффиксом «Заглушка».
- Исправлена ошибка "автоанализа" (добавлены дополнительные условия проверки EP)
- Параметры «Очистить автоматические комментарии/автоматические метки» теперь отмечены по умолчанию.
хАнализатор 2.4.2
- Исправлен BoF, когда комментарий с флагами аргументов превышал MAX_COMMENT_SIZE.
- Исправлена ошибка поиска имени функции, когда определение находится во втором файле .api.
хАнализатор 2.4.1
- Добавлена новая схема горячих клавиш.
- Добавлены новые параметры для управления тем, какие данные предыдущего анализа следует удалить. (Это дает возможность беспрепятственно работать с плагинами загрузчика карт, такими как SwissArmyKnife и т. д.).
- Добавлены новые команды (старые устарели)
выбор ксанала: выполняет анализ выбора.
функция ксанала: выполняет функциональный анализ
xanal exe: выполняет полный анализ исполняемого файла.
xanalremove выбор: удаляет предыдущий анализ выбора.
xanalremove function: удаляет предыдущий анализ функции.
xanalremove exe: удаляет весь предыдущий анализ исполняемого файла.
xanal help: выводит в окно журнала текст справки.
- Исправлен автоматический анализ, который не запускался при запуске (Закрытие #18).
- Исправлены различные файлы определений API (закрытие № 17).
хАнализатор 2.4
- Новые и улучшенные файлы определений API со слегка измененной схемой (13 000 API из почти 200 DLL).
- Система распознавания символов для каждого используемого аргумента определения API (более 1000 типов данных перечислений и более 800 флагов).
- Распознавание типов данных параметров (BOOL, NUMERIC, NON-NUMERIC)
- Обнаружение заглушек VB "DllFunctionCall".
— Строки, передаваемые в качестве аргументов, теперь стали чище (в комментариях отладчика теперь удалена адресная часть).
- В окно журнала добавлена сводка выполнения.
- Функция горячих клавиш удалена (будет включена в будущие версии) из-за некоторого конфликта с x64dbg.
- Исправлены различные ошибки
хАнализатор 2.3.1
- Исправлена ошибка при запуске меню «Анализ выбора» с выделенной одной строкой, приводившая к внезапному исключению dbg (спасибо @blaquee)
- Перед загрузкой плагина проверьте, существуют ли внутри нее папка файлов определений «apis_def» и файлы определений.
- Изменены горячие клавиши на Ctrl+Shift+X для выбора и Ctrl+X для функций.
хАнализатор 2.3
- Добавлена опция "Анализ неопределённых функций". (по умолчанию отключено, все, чего нет в файлах определений, не анализируется)
- Добавлена опция "Автоматический анализ" (по умолчанию отключена, выполнять анализ при запуске на EP отлаживаемого исполняемого файла)
- Добавлена функция «Анализ выбора» (выполняет анализ выбранных инструкций, поддерживает несколько выбранных вызовов)
- Добавлена функция «Анализ функции» (выполняет автоматическое обнаружение и анализ текущей функции по выбранному адресу)
- Добавлена функция «Удалить анализ» из «Выбор/Функция/Исполняемый файл».
- Добавлены ярлыки команд.
- Добавлены новые иконки
- Добавлено сохранение конфигурации в файл .ini.
- Добавлена капитализация шестнадцатеричных значений аргументов.
- Реструктурированная функция «Анализ исполняемого файла» (выполняет полный анализ текущего исполняемого файла).
- Реструктурированное меню
- В новом диалоговом окне «О программе» теперь отображается номер версии для отслеживания обновлений.
- Некоторые небольшие исправления ошибок
- Исправлены и объединены некоторые файлы определений API.
- Улучшения скорости и стабильности.
хАнализатор 2.2
- Добавлен индикатор прогресса анализа.
- Добавлен новый режим глубины анализа.
-Теперь автоматический анализ выполняется только в том случае, если нет резервной базы данных.
- Исправлены ошибки
хАнализатор 2.1
- Общие аргументы для неопределенных функций и внутренних подпрограмм.
- Умные комментарии и аргументы функций (обрабатываются только функции с аргументами в стеке). Это позволяет xAnalyzer более четко видеть код, просто обрабатывая и комментируя эти функции с фактическими аргументами.
- Обнаружение косвенных вызовов функций по схеме CALL -> DYNAMIC_MEMORY -> API
- Обнаружение косвенных вызовов функций по схеме CALL -> REGISTER/REGISTER + DISPLACEMENT -> API
- Обнаружение косвенных вызовов функций по схеме CALL -> JMP -> JMP -> API
- Автоматическое обнаружение петель
- Исправлены мелкие ошибки
- Перестановки кода
хАнализатор 2.0
- Поддержка х64 бит.
- Поддержка изменения порядка аргументов вызова API в битах x64.
- Поддержка дополнительной информации о файлах PDB в вызовах API.
- Поддержка прямых/косвенных вызовов API
- Поддержка вызовов статических API-функций в код основного модуля.
- Исправлено несколько неправильных порядков аргументов вызовов API в файлах определений. Теперь можно обнаружить и правильно прокомментировать больше вызовов.
- Некоторые улучшения и более качественный написанный код.
- Исправлены различные ошибки
хАнализатор 1.2
- Обновлены файлы определений API.
- Добавлена поддержка исполняемых файлов vc6+.
хАнализатор 1.1
- Исправлена проблема, из-за которой информация API не отображалась в исполняемых файлах VC++ из-за неправильной очистки структур BASIC_INSTRUCTION_INFO до/после их использования в цикле.
- Добавлены/обновлены файлы определений API.
- Исправлены ошибки
хАнализатор 1.0
- Первоначальный выпуск
Приветствуется любой вклад, не только в виде пиара, но и в виде отчетов об ошибках, документации и т. д.
Пожалуйста, имейте в виду следующее:
Спасибо за использование плагина xAnalyzer... и всем удачного обращения!