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

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

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

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

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

Категории

Все категории
Loading categories
Ponce — Победитель конкурса плагинов IDA 2016! Символическое исполнение всего в один клик! | Kitploit
Инструменты/GitHubGitHub/illera88/ponce
Обратная инженерияОтладчикиАнализ вредоносных программCTFАнализ Бинарных Файлов
GitHubillera88/ponce

Ponce

Победитель конкурса плагинов IDA 2016! Символическое исполнение всего в один клик!

Репозиторий
1.6k851 год назадПроверено Kitploit

Популярное

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

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

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

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

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

Build for Windows Build for OSX Build for Linux

Ponce

Ponce (произносится [ 'poN θe ] пон-тэй ) — это плагин для IDA Pro, который предоставляет пользователям возможность легко и интуитивно выполнять анализ заражения и символическое выполнение бинарных файлов. С помощью Ponce вы в один клик получаете всю мощь передовых методов символического выполнения. Полностью написан на C/C++.

Зачем?

Символическое выполнение — не новое понятие в сообществе по безопасности. Оно существует уже много лет, но только около 2015 года появились такие проекты с открытым исходным кодом, как Triton и Angr, призванные удовлетворить эту потребность. Несмотря на доступность этих проектов, конечным пользователям часто приходится самостоятельно реализовывать конкретные сценарии использования.

Мы решили эти потребности, создав Ponce — плагин для IDA, реализующий символическое выполнение и анализ заражения внутри самого популярного дизассемблера/отладчика для реверс-инженеров.

Установка

Ponce работает как с x86, так и с x64 бинарными файлами в любой версии IDA >= 7.0. Установка плагина сводится к копированию соответствующих файлов из последних сборок в папку plugins\ вашего каталога установки IDA.

Убедитесь, что вы используете бинарный файл Ponce, скомпилированный для вашей версии IDA, чтобы избежать несовместимости.

Поддержка ОС

Ponce работает на Windows, Linux и OSX нативно!

Варианты использования

  • Разработка эксплойтов: Ponce может помочь вам создать эксплойт гораздо более эффективно, так как разработчик эксплойта может легко увидеть, какие части памяти и какие регистры находятся под вашим контролем, а также возможные адреса, которые можно использовать в качестве ROP-гаджетов.
  • Анализ вредоносного ПО: Ещё одно применение Ponce связано с вредоносным кодом. Анализ команд, поддерживаемых конкретным семейством вредоносных программ, легко выполняется путём символизации известной команды и отрицания всех условий, в которых эта команда проверяется.
  • Реверс-инжиниринг протоколов: Одно из самых интересных применений Ponce — это возможность выявления необходимых магических чисел, заголовков или даже целых протоколов для контролируемого пользовательского ввода. Например, Ponce может помочь составить список всех принимаемых аргументов для бинарного файла командной строки или извлечь формат файла, требуемый для конкретного парсера файлов.
  • CTF: Ponce ускоряет процесс реверс-инжиниринга бинарных файлов во время соревнований CTF. Поскольку Ponce полностью интегрирован в IDA, вам не нужно беспокоиться о времени настройки. Он готов к использованию!

Плагин запустится автоматически и проведёт вас через первоначальную настройку при первом запуске. Конфигурация будет сохранена в файл конфигурации, так что вам больше не придётся беспокоиться об окне настроек.

Режимы использования

  • Движок заражения: Этот движок используется для определения на каждом шаге выполнения бинарного файла, какие части памяти и регистры контролируются пользовательским вводом.
  • Символический движок: Этот движок поддерживает символическое состояние регистров и части памяти на каждом шаге пути выполнения бинарного файла.

Примеры

Отрицание и инъекция условия

В следующей гифке показано использование автоматического заражения и то, как мы можем отрицать условие и инъецировать его в память во время отладки:

  • Мы выбираем символический движок и устанавливаем опцию символизации argv.
  • Мы определяем условие, которое должно быть выполнено для победы в crackMe.
  • Мы отрицаем и инъецируем решение каждый раз, когда проверяется байт нашего ввода относительно ключа.
  • В итоге мы получаем ключ elite, который был инъецирован в память, и, следовательно, достигаем кода Win.

Исходный код crackme можно найти здесь

crackmexor_negate_and_inject

Использование движка заражения для отслеживания управляемого пользователем ввода

В этом примере мы видим использование движка заражения с cmake. Мы:

  • Передаём файл в качестве аргумента cmake, чтобы он его разобрал.
  • Выбираем использование движка заражения.
  • Заражаем буфер, который считывается из файла с помощью fread().
  • Возобновляем выполнение под управлением отладчика, чтобы увидеть, куда перемещается заражённый ввод.
  • Ponce переименует заражённые функции. Это функции, на которые пользователь так или иначе влияет, а не просто выполненные функции.

cmake_tainting_fread

Использование Negate, Inject & Restore

В следующем примере мы используем движок снимков:

  • Передаём файл в качестве аргумента.
  • Выбираем использование символического движка.
  • Заражаем буфер, который считывается из файла с помощью fread().
  • Создаём снимок в функции, которая разбирает буфер, считанный из файла.
  • Когда условие оценивается, мы отрицаем его, инъецируем решение в память и восстанавливаем снимок с ним.
  • Решение будет "действительным", поэтому мы выполним существующие условия.

fread_test_negate_restore_inject Исходный код примера можно найти здесь

Использование

В этом разделе мы перечислим различные опции Ponce, а также сочетания клавиш:

  • Доступ к окнам конфигурации и заражения/символизации: Edit > Ponce > Show Config (Ctl+Shift+P и Ctl+Alt+T)

2016-09-15 11_39_08-configuracion

  • Включить/Отключить трассировку Ponce (Ctl+Shift+E)

2016-09-15 11_31_34-

  • Символизировать/заразить регистр (Ctl+Shift+R)

2016-09-15 11_32_32-

  • Символизировать/заразить память. Можно сделать из IDA View или Hex View (Ctl+Shift+M)

2016-09-15 11_32_52-ida - testproject idb testproject exe c__users_default default-pc_documents_vi2016-09-15 11_33_10-taint _ symbolize memory range

2016-09-15 12_09_11-inicio

  • Решить формулу (Ctl+Shift+S)

2016-09-15 11_35_11-

  • Negate & Inject (Ctl+Shift+N)

2016-09-15 11_34_44-

  • Negate, Inject & Restore Snapshot (Ctl+Shift+I)

2016-09-15 11_47_19-

  • Создать снимок выполнения (Ctl+Shift+C)

2016-09-15 11_37_40-

  • Восстановить снимок выполнения (Ctl+Shift+S)

2016-09-15 11_38_10-

  • Удалить снимок выполнения (Ctl+Shift+D)

2016-09-15 11_38_23-

  • Выполнить нативно (Ctl+Shift+F9)

2016-09-15 12_07_10-

Triton

Ponce использует фреймворк Triton для обеспечения семантики, анализа заражения и символического выполнения. Triton — это потрясающий проект с открытым исходным кодом, спонсируемый Quarkslab и поддерживаемый в основном Джонатаном Салваном с богатой библиотекой. Мы хотели бы поблагодарить и одобрить работу Джонатана над Triton. Вы лучший! :)

Сборка

Начиная с Ponce v0.3 мы перевели процесс сборки на использование CMake. Это позволило унифицировать способ настройки и сборки для Linux, Windows и OSX. Теперь мы поддерживаем отображение обратной связи в псевдокоде о символических или заражённых инструкциях. Для работы этой функции необходимо добавить hexrays.hpp в папку include вашего IDA SDK. hexrays.hpp находится в plugins/hexrays_sdk/ по пути установки IDA. Если вы не приобрели декомпилятор hex-rays, вы всё равно можете собрать Ponce, используя -DBUILD_HEXRAYS_SUPPORT=OFF. Мы используем Github Actions в качестве среды CI. Проверьте файлы действий, если хотите понять, как происходит процесс сборки.

Часто задаваемые вопросы

Почему название Ponce?

Хуан Понсе де Леон (1474 – июль 1521) был испанским исследователем и конкистадором. Он открыл Флориду в Соединённых Штатах. Плагин IDA поможет вам открывать, исследовать и, надеюсь, завоёвывать различные пути в бинарном файле.

Можно ли использовать Ponce для анализа бинарных файлов Windows, OS X и Linux?

Да, вы можете использовать Ponce нативно в IDA для Windows или удалённо подключиться к Linux или OS X и использовать его. В следующей версии Ponce мы добавим нативную поддержку для версий IDA на Linux и OS X.

Сколько инструкций в секунду может обрабатывать Ponce?

В наших тестах мы достигаем обработки 3000 инструкций в секунду. Мы планируем использовать трейсер PIN, который предлагает IDA, для увеличения скорости.

Что-то не работает!

Откройте issue, мы решим это как можно скорее ;)

Мне нравится ваш проект! Могу я сотрудничать?

Конечно! Пожалуйста, делайте pull request’ы и работайте над открытыми issue. Мы отплатим вам пивом за помощь ;)

Ограничения

Конколическое выполнение и Ponce имеют некоторые проблемы:

  • Символическая загрузка/запись в память: когда индекс, используемый для чтения значения памяти, является символическим, как в x = aray[symbolic_index], возникают проблемы, которые могут привести к потере отслеживания заражённого/символизированного управляемого пользователем ввода.

  • Triton не очень хорошо работает с инструкциями с плавающей точкой.

  • Конколическое выполнение анализирует только выполненные инструкции. Это означает, что символическое отслеживание теряется в таких случаях, как следующий:

    root@kitploit:~
    int check(char myinput)  // Input is symbolic/tainted
    {
    int flag = 0;
    if (myinput == 'A')  //This condition is symbolic/tainted
      flag = 1
    else
      flag =- 1;
    return flag; // flag is not symbolic/tainted!
    }
    

Авторы

  • Alberto Garcia Illera (@algillera) [email protected]
  • Francisco Oca (@francisco_oca) [email protected]
Скачать инструмент