Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
oregami — Плагины и скрипты IDA для анализа фрейма использования регистров | Kitploit
Инструменты/GitHubGitHub/shemesh999/oregami
Статический анализОбратная инженерияОтладчикиАнализ Бинарных Файлов
GitHubshemesh999/oregami

oregami

Плагины и скрипты IDA для анализа фрейма использования регистров

Репозиторий
18222156 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Oregami

"""
Для чего нужен этот регистр?
Хм.. Я просто переименую его в veryuniquename, сделаю текстовый поиск и найду все ссылки!
Окей.. Жду завершения поиска.. ещё немного.. Готово!
Теперь нужно понять, какой из результатов поиска относится к текущему контексту использования регистра.
Не должно быть слишком сложно, правда?
"""

Если это случалось с вами (возможно, не раз), то вас ждёт сюрприз!
Просто нажмите Shift-X, и ваши проблемы исчезнут!

Вы также можете переименовать регистр в контексте использования. Просто Shift-N и следуйте инструкциям!
Кроме того, вместо того чтобы менять типы всех использований на определённый тип — просто нажмите Shift-T один раз.

И последнее, но не менее важное: если вы хотите установить смещение (как при Ctrl-R) для всех использований этого регистра, нажмите Shift-R.

Примечание: иногда уже установлен другой плагин, использующий Shift-T. Удалите его — вы всё равно никогда им не пользовались :-).

Установка

Предварительные требования

Этот плагин использует sark для удобного взаимодействия со скриптами IDA и cachetools для кэширования сканирования фрейма, что значительно ускоряет работу.

Совместимость с версиями IDA

Oregami поддерживает как IDA 7.x/8.x, так и IDA 9.0+.
Если вы используете IDA 9, убедитесь, что у вас установлена актуальная версия sark, поддерживающая IDA 9.

Примечание: IDA 9 представила свою собственную функциональность Shift-X. Если вам нужно использовать встроенный Shift-X IDA вместо Oregami, измените сочетание клавиш Oregami в файле плагина.

Настройка Python / sark

[Для python3]
pip3 install sark

[Для python2]
Если вы используете версию IDA на Python 2, выполните: pip2 install -U git+https://github.com/tmr232/[email protected]#egg=Sark

Обратите внимание, что python2 активно не поддерживается (поскольку IDA в основном перешла на python3, как и я), поэтому это может не работать.

Клонирование репозитория

git clone https://github.com/shemesh999/oregami

Установка плагина

Кодовая база sark предлагает множество плагинов. Один из них: https://github.com/tmr232/Sark/blob/master/plugins/plugin_loader.py

Мы рекомендуем скопировать его в ваш каталог плагинов, а затем один раз запустить IDA с правами администратора (чтобы он мог создать файлы plugins.list).
После этого вы можете добавлять новые плагины, указывая путь к ним в одном из созданных файлов plugins.list (например, один создаётся в папке cfg IDA).

Теперь добавьте в один из файлов plugins.list:
FULLPATH\oregami\oregami_plugin.py
FULLPATH\oregami\regname_plugin.py
FULLPATH\oregami\typeregter_plugin.py
FULLPATH\oregami\offreg_plugin.py

Перезапустите IDA — плагины должны работать.

Или:
Скопируйте все файлы (включая внутреннюю папку oregami, кроме setup.py) в каталог плагинов IDA.

Использование в качестве скрипта

Помимо использования в качестве плагинов, Oregami можно применять для написания собственных скриптов!

Для этого сначала установите через прилагаемый файл setup.py. То есть выполните:
'python setup.py develop', и после этого вы сможете использовать внутренние классы и функции.
Обратите внимание, что мы рекомендуем использовать 'develop', а не 'install', чтобы при загрузке новой версии Oregami она работала сразу.

Например:
-- script.py --

def find_func_usage(func_ea, reg='r0'):
    """
    Найти и вывести все использования регистра, включая информацию о конкретных операндах,
    в которых он находится, и о том, какая операция выполняется с операндом.
    """
    import oregami
    rf = oregami.RegFrame(func_ea, reg)
    for insn in rf.get_instructions():
        print('Addr:{:x}'.format(insn.ea))
        for opnd in insn.operands:
            if opnd.uf_is_external:
                continue
            print('--opnd_idx:{} - {}'.format(opnd.n, oregami.UsageBits(opnd.op_flags)))

Сканирование фрейма использования

Предположим следующую последовательность кодов операций:

ROM:01000010                    e_lis     r10, 0x4004 # 0x40040000              # Загрузка непосредственного значения со сдвигом
ROM:01000014                    e_add16i  r10, r10, 0x1337 # 0x40041337         # Сложение непосредственного значения
ROM:01000020                    se_mr     r30, r31                              # Пересылка регистра
ROM:01000022                    cmplw     r11, r10                              # Логическое сравнение слов
ROM:01000026                    se_bge    loc_1000036                           # Ветвление, если больше или равно
ROM:01000028
ROM:01000028    loc_1000028:                                                    # CODE XREF: sub_0100000+144↓j
ROM:01000028                    e_stmw    r30, 0(r11)                           # Запись нескольких слов
ROM:0100002C                    e_add16i  r11, r11, 8                           # Сложение непосредственного значения
ROM:01000030                    cmplw     r11, r10                              # Логическое сравнение слов
ROM:01000034                    se_blt    loc_1000028                           # Ветвление, если меньше
ROM:01000036
ROM:01000036    loc_1000036:                                                    # CODE XREF: sub_0100000+136↑j
ROM:01000036                    e_add16i r10, r10, 8                            # Сложение непосредственного значения
ROM:0100003A                    e_li      r11, 0                                # Загрузка непосредственного значения

Если мы просканируем фрейм использования регистра r10, начиная с адреса 01000022, то найдём три типа использований, включённых во фрейм.

1. Init (Инициализация)

Сюда войдут инструкции, которые устанавливают значение регистра.
Мы можем включить только последнюю инструкцию, изменившую значение регистра (адрес 01000014 в примере), или последовательность операций, используемых для установки начального значения регистра (адреса 01000010 и 01000014 в примере).
Последовательность операций, используемых при инициализации регистра, может называться "этапом инициализации".
Вы можете выбрать, поддерживать этап инициализации или нет, в зависимости от параметра init_stage_bool при инициализации RegFrame.

2. Pure (Чистое использование)

Сюда войдут инструкции, которые используют значение регистра и никак его не изменяют. В примере это строки 01000022 и 01000030.

3. Break (Прерывание)

Сюда войдут инструкции, которые используют значение регистра, но затем изменяют его значение. Эти инструкции могут рассматриваться как включённые в два различных фрейма использования — тот, который ведёт к ним, и тот, который исходит от них.
В примере это строка 01000036.

4. Out Break (Внешнее прерывание)

При сканировании фрейма использования регистра достижение операции инициализации или операции прерывания приводит к остановке сканирования в определённом направлении.
Но мы также можем остановить сканирование из-за инструкций, находящихся вне фрейма использования.
Например, сканирование фрейма использования регистра r11, начиная с адреса 01000030, остановится на строке 0100003A.

Скачать инструмент