Интерфейс Python для динамического бинарного интерфейса инструментов PIN
Я работаю в анализе бинарных файлов, используя Python. Я использую отладчики для динамического анализа (т.е. запуска приложения и использования точек останова для выполнения во время выполнения). Тем не менее, результаты могут быть улучшены, если я могу использовать некоторые бинарные инструменты, такие как PIN-код. PIN-код разработан на C++ и предоставляется как закрытый источник (только dll). Мы пишем что-то, называемое PinTools, описывающее, где и что мы хотим перехватить. Я хочу перенести функциональность PIN-кода в Python, чтобы я продолжал использовать Python. Я в курсе "ctypes" и boost-python.
Моя проблема: чтобы использовать PIN-код, мы пишем pintool и запускаем наш бибнарный исполняемый файл с помощью Pin и pintool (это похоже на запуск приложения с JIT). Теперь я понятия не имею, могу ли я использовать ctypes и т. Д. Для импорта функций PIN и использовать этот код Python для динамического анализа двоичного файла. Можете ли вы предоставить некоторые предложения или рекомендации по выполнению этой задачи.
Итак, в nut-n-shell я хочу создать Python-интерфейс (оболочку) для структуры PIN.
2 ответа
Проверьте проект ProcessTap. Похоже, чтобы реализовать именно то, что вы ищете: http://code.google.com/p/processtap/
Я думал об этом недавно, хотя я не рассматривал это, но я подхожу к этой проблеме следующим образом: напишите пинтоул, который при инициализации запускает встроенный интерпретатор python и импортирует модуль python. Я бы посмотрел на использование SWIG для генерации привязок для всех вызовов PIN API, которые вы хотите использовать. Затем pintool будет вызывать жестко запрограммированную функцию в импортированном модуле Python, которая будет вызывать API, чтобы зарегистрировать больше функций и делать все, что вы захотите.
Я не уверен, как будут работать обратные вызовы, я не знаю достаточно о SWIG. Кроме того, это может не сработать, если программа, которую вы пытаетесь использовать, сама использует Python. Но так я бы попытался решить эту проблему, чтобы начать.