Улучшенный плагин Generator Generator Mida Pro.
Скопируйте IDA_SigMaker32.dLL и IDA_SigMaker64.dLL в свой каталог plugins IDA.
Горячая ключ IDA по умолчанию-«Ctrl-ALT-S», но может быть установлен на другую, используя ключ ваш ida Plugins.cfg ». Поскольку «ctrl-alt-s» теперь комбинирует конфликты с по умолчанию IDA, чтобы избежать получения предупреждающих сообщений, отредактируйте свой «idagui.cfg» и сделайте запись «StackTrace» как: "StackTrace" = 0 // "Ctrl-Alt-S" // open stack trace window («0» отключает ключ).
Требуется версия IDA Pro 7.6'ish.
Вызовите плагин через Hotkey или через меню IDA Edit/Plugin.

Есть три операции по производству подписи:
Функция : используется для создания уникальной точки ввода функции, минимальной подписи функции без смещения или подписи всего тела в зависимости от конфигурации параметров (см. Ниже).
Сначала выберите любой адрес внутри целевой функции. Если выбранная функция не является уникальной (для точки входа или минимальной опции), тогда будет предпринята попытка подписи для уникального перекрестного сканирования функции.
Типичные варианты использования: подписи для поиска функций во время выполнения в целевой памяти, для поиска функций в IDA после исполняемых обновлений или для поиска известных библиотек с помощью подписи и т. Д.
Пример подписи вывод: 
Результаты подписи доставляются в буфер обмена Windows для легкого вставки CTRL+V в исходный код и т. Д.

Формат вывода: IDA : Формат шестигранного поиска по умолчанию, который поддерживают IDA и некоторые другие инструменты, используя растянутые шестигранные байты и "??" подстановочные знаки. Пример: C1 6C E8 ?? ?? ?? ?? 8B 50 08 Стиль кода : экономясь с шестнадцатеричной строкой и отдельная строка маски, где «X» являются байтами хранителя и "?" это подстановочные байты. Пример: "xC1x6CxE8xCCxCCxCCxCCx8Bx50x08", "xxx????xxx" встроенный байт : минималистский массив стилей C байтов с подстановочными байтами. Пример: {0xC1,0x6C,0xE8,0xAE,0xAE,0xAE,0xAE,0x8B,0x50,0x08}; Используйте поле «Редактирование маски», чтобы изменить по умолчанию встроенный байт байт. Байт маски по умолчанию составляет 0xAE , один из наименее используемых байтов кода (см. «Идеальный байт маски» ниже).
Критерии для генерации подписи «функция». Точка входа : попытается генерировать сигнатуру точки входа минимального размера байта, когда это возможно. Минимальный размер байта : попытается генерировать минимальное, с наименьшим количеством подстановочных знаков, байт размером с байт (пять больше) граничи с границей инструкции, выровненной внутри выбранного функционального тела. Full Function Body : попытается генерировать уникальную подпись корпуса полной функции.
Для любого из этих трех вариантов, если функция не является уникальной, будет предпринята попытка найти наименьшую уникальную подпись по перекрестной ссылке. Если вы хотите сделать полную или частичную подпись функции для функции, не являющейся UNIQUE, используйте вместо этого опцию «От диапазона адресов».
Уровень сообщений : установите на «VERBOSE» для вывода сообщения генерации внутренней подписи в окно журнала IDA.
MAX FUNCTION SCAN SUFS : Ограничьте, сколько функций перекрестных ссылок на поиск, когда не может быть найдена сигнатура действия прямого «функции». Обычно это должно быть «0» для неограниченного поиска, но для проблем с проблемами, когда существует так много ссылок, что это вызывает замедление, это может быть установлено на какой -то разумный лимит, например, 16 или 100, чтобы увеличить скорость сканирования.
Для относительно редкого случая функций, в которых их кусочки распространяются по нескольким диапазонам адреса, инструмент попытается использовать только первый кусок. Если желать сделать подпись в одной из разрозненных кусков, попробуйте использовать метод «at адреса». Если все остальное не удается, попробуйте SIG «от диапазона адреса» (который может потребовать некоторого ручного поиска уникальности).
MAX FUNCTION POINT POINTIOR BAYTES : при использовании параметра «Функция» и критерии «точка входа» настроены, опционеру ограничивают максимальный размер подписи точки входа. По умолчанию - «0», для неограниченного (что может быть до всего выбранного размера байта тела функции). Если этот предел будет превышен, вместо этого будет искать подпись по перекрестной ссылке.
Установите практическое ограничение, например, «16» или «32», для предпочтительных, как правило, меньших сигнатур Xref против потенциально очень больших подписей точки входа.
Sigmakerex («Ex») в целом генерирует меньшие и более плотные функциональные сигнатуры с использованием лучшего анализа инструкций. Пример: Sigmaker («SM») подстановка байтов операндов sub esp, 90h 81 EC 90 00 00 00 как "81 EC ?? ?? ?? ??
EX лучше сосредоточен на нормативных случаях использования подписи тела. Для SM есть только один управляемый вариант. Он попытается сделать уникальную подпись везде, где вы выберете в функции. Если он не сможет найти там, он будет искать только уникальный перекрестный ссылок. Для бывшего, поскольку идентифицированный типичный вариант использования заключается в поиске точек ввода функций, наименьшая подпись точки входа будет генерироваться при настроении опции критериев «точки входа». В случае выбора опции «минимальный размер байта» он будет искать наименьшее и наименьшее количество подстановочных знаков уникальной подписи (из минимальных пять байтов) во всем корпусе функции.
SM имеет большее управление критериями выходных сигналов над байтом против подстановочного значения и т. Д. В диалоговом окне «Параметры». EX предполагает, что вам нужны лучшие из обоих (наименьших подстановочных значений и наименьшего размера байта).
EX опускает функцию «преобразования» и индивидуальную функцию «поиска», которая имеет SM из -за предпочтения более простого и менее загроможденного пользовательского интерфейса.
Для поиска, поскольку EX всегда выделяет вывод формата IDA в дополнение к выбранным сигнатурам формата выходного формата, используйте опцию Birary Search IDA «Hex» со строкой IDA SIG.
EX, как правило, быстрее, даже при выполнении более обширных поисков из -за техники клонирования IDB в ОЗУ и использования оптимизированного AVX2, оптимизированного сканера с шаблонами по сравнению с медленной функцией IDA для сканирования.
В своих собственных проектах по динамически динамическому поиску шаблонов я предпочитаю формат «встроенного байта» (из -за отсутствия лучшего имени). Это самый простой, самый компактный, и это не требует преобразования времени выполнения из шестнадцатеричной строки ASCII. Я использовал этот формат для многих проектов, и мне еще предстоит столкнуться с какими -либо подписными столкновениями или избыточными проблемами совпадения.
Чтобы минимизировать потенциальные проблемы избыточности, разумно использовать одно из наименее используемых значений байтов кода для байта подстановочного знака/маски. Чтобы найти идеальных кандидатов, я собрал частоту байта кода из трех каждых крупных 32 -битных и 64 -битных кодных сегментов, а затем с таблицей и отсортировал результаты. Сценарий «ida_get_byte_frequency.py» используется в сборе байтового частотного словаря и сохраняет его в JSON DB. Скрипт "byte_frequency_tabulate.py" табулирует и сортирует в восходящем порядке. Набор этих сохраненных JSON DBS. Очевидно, что частота байта для 32 -битной не совпадает, как 64 -битная, и табулирована независимо. См. "32bit.txt" и "64bit.txt". В визуальной корреляции двух, 0xa2 на самом деле является наименее распространенным знаменателем, а затем затем 0xae. 0xae был выбран более 0xa2 в качестве байта маски по умолчанию, так как его субъективно легче выбрать в шестигранном визуальном виде.
Созданный с использованием Visual Studio 2019 на Windows 10, с единственной зависимостью - официальный SDK IDA Pro C/C ++. Настройка В файле проекта он ищет переменную среды _IDADIR из которой она ожидает найти папку «idasdk/include» и папку «idasdk/lib», где находится IDA SDK. Не используя IDADIR , так как Ида ищет себя и может вызвать конфликт, если вы попытаетесь использовать более одной установленной версии IDA.
Python 3.7'ish или лучше запустить сценарий "byte_frequency_tabulate.py".
Благодаря создателю оригинального инструмента Sigmaker обратно от дни GamedeCeption.net до текущих авторов итерации C/C ++ и Python: P4TR! CK, Bobbysing, Xero | Hawk, Ajkhoury и Zoomgod et al. Спасибо Wojciech Mula за его ресурсы программирования SIMD.
Выпущен под MIT © 2022