
Платание кода сборки для изменения поведения существующей программы не редкость в анализе вредоносных программ, обратной инженерии программного обеспечения и более широких областях исследований безопасности. Этот проект расширяет популярный Disasssembler IDA Pro для создания более надежного интерактивного бинарного рабочего процесса для исправления, предназначенного для быстрой итерации.
Этот проект в настоящее время оснащен незначительной вилкой вездесущего двигателя Keystone, поддерживающего исправление x86/x64 и arm/arm64 с планами по включению оставшихся архитектур Keystone в будущем.
Особая благодарность Hex-Rays за поддержку разработки этого плагина.
Этот плагин требует IDA 7.6 и Python 3. Он поддерживает Windows, Linux и MacOS.
Обратите внимание, старые версии IDA (8.2 и ниже) не совместимы с Python 3.11 и выше.
Запустите следующую строку в консоли IDA, чтобы автоматически установить плагин:
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())В качестве альтернативы, плагин может быть установлен вручную, загрузив распределяемый пакет плагина для вашей соответствующей платформы со страницы релизов и рассеяв его в папку плагинов.
Настоятельно рекомендуется установить этот плагин в каталог плагинов IDA:
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))Плагин для исправления будет автоматически загружаться для поддерживаемых архитектур (x86/x64/arm/arm64) и внедрить соответствующие действия по исправлению в контекстное меню правой щелчки в разборке IDA.

Полный список контекстуальных действий исправления описан в следующих разделах.
Основной диалог исправления может быть запущен через действие сборки в контекстном меню правого щелчка. Он имитирует базовый вид разборки IDA, который можно использовать для редактирования одной или нескольких инструкций в быстрой последовательности.

Сборка сборки представляет собой редактируемое поле, которое можно использовать для изменения инструкций в режиме реального времени. Нажатие Enter будет совершать (исправить) введенную инструкцию в базу данных.
Ваше текущее местоположение (он же ваш курсор) всегда будет выделено зеленым. Инструкции, которые будут заглушены в результате вашего патча / редактирования, будут выделены красным цветом перед совершением патча.

Наконец, клавиши стрелок UP и DOWN можно использовать, в то время как все еще сосредоточены на текстовом поле редактируемого сборки, чтобы быстро перемещать курсор вверх и вниз по разборке, без использования мыши.
Наиболее распространенное действие исправления - это не использовать одну или несколько инструкций. По этой причине действие NOP всегда будет видно в меню правого щелчка для быстрого доступа.

Индивидуальные инструкции могут быть невыполнены, а также выбранный диапазон инструкций.
Принуждение условного прыжка всегда выполнять «хороший» путь - это еще одно распространенное действие исправления. Плагин будет показывать это действие только при щелчке правой кнопкой мыши к условной инструкции.

Если вы никогда не хотите, чтобы был взят условный прыжок, вы можете просто не это не по его мнению!
Патчи могут быть сохранены (применены) на выбранную исполняемого файла через подменю для исправления в любое время. Быстрое действие делает еще быстрее сохранять последующие патчи, используя те же настройки.

Плагин также приложит активное усилие, чтобы сохранить резервное копирование ( .bak ) исходного исполняемого файла, которое он использует, чтобы «чисто» применять текущий набор патчей базы данных во время каждого сохранения.
Наконец, если вы когда -либо недовольны патчем, вы можете просто щелкнуть правой кнопкой мыши (желтые) блоки инструкций, чтобы вернуть их к первоначальному значению.

Несмотря на то, что «легко» вернуть байтов обратно к их первоначальному значению, может быть «трудно восстановить анализ в его предыдущее состояние». Уорение патча может иногда потребовать дополнительных человеческих исправлений.
Время и разрешение на мотивацию, будущая работа может включать в себя:
xor eax, eax; ret; ) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
Я приветствую внешние взносы, проблемы и запросы функций. Пожалуйста, сделайте любые запросы на привлечение в develop отрасли этого репозитория, если вы хотите, чтобы они были рассмотрены для будущего выпуска.