Интерфейс Python для динамического бинарного интерфейса инструментов PIN - PullRequest
0 голосов
/ 03 декабря 2010

Я занимаюсь анализом бинарных файлов, используя Python.Я использовал отладчики для динамического анализа (т.е. запуска приложения и использования точек останова для выполнения во время выполнения).Тем не менее, результаты могут быть улучшены, если я могу использовать некоторые бинарные инструменты, такие как PIN .ПИН разработан на C ++ и предоставляется в виде закрытого источника (только dll).Мы пишем нечто, называемое PinTools, которое действительно описывает , где и что мы хотим перехватить.Я хочу перенести функциональность PIN-кода в Python, чтобы я продолжал использовать Python.Я знаю о "ctypes" и boost-python.

Моя проблема: чтобы использовать PIN, мы пишем pintool и запускаем наш бибнарный исполняемый файл с помощью Pin и pintool (это похоже на запуск приложения с JIT),Теперь я понятия не имею, могу ли я использовать ctypes и т. Д. Для импорта функций PIN и использовать этот код Python для динамического анализа двоичного файла.Не могли бы вы дать несколько советов или рекомендаций по выполнению этой задачи.

Итак, в nut-n-shell я хочу создать Python-интерфейс (оболочку) для структуры PIN.

Ответы [ 2 ]

3 голосов
/ 20 марта 2011

Проверьте проект ProcessTap. Появляется для реализации именно то, что вы ищете: http://code.google.com/p/processtap/

0 голосов
/ 03 декабря 2010

Я думал об этом недавно, хотя я не рассматривал это, но я подхожу к этой проблеме следующим образом: напишите pintool, который при инициализации запускает встроенный интерпретатор python и импортирует модуль python. Я бы посмотрел на использование SWIG для генерации привязок для всех вызовов PIN API, которые вы хотите использовать. Затем pintool вызовет жестко запрограммированную функцию в импортированном модуле Python, которая будет вызывать API, чтобы зарегистрировать больше функций и делать все, что вы хотите.

Я не уверен, как будут работать обратные вызовы, я недостаточно знаю о SWIG. Кроме того, это может не сработать, если программа, которую вы пытаетесь использовать, сама использует Python. Но так я бы попытался решить эту проблему, чтобы начать.

...