Интерфейс Python для динамического бинарного инструментария PIN-кода

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

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

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


person Sanjay    schedule 03.12.2010    source источник
comment
Создает ли PIN выходные файлы? Вы пытаетесь прочитать эти выходные файлы? Это то, что вы имеете в виду под двоичным кодом? Выходные файлы в двоичном формате из PIN-кода?   -  person S.Lott    schedule 03.12.2010
comment
@S.Lott: я думаю, что «двоичный файл» здесь означает скомпилированные исполняемые файлы.   -  person Thomas K    schedule 03.12.2010
comment
Да, двоичный файл означает скомпилированные исполняемые файлы (например, файлы PE, ELF). Например, допустим, у меня есть исполняемый файл abc.exe. если я хочу проанализировать его динамически, я запущу его так: C:\›pin --my_pintool abc.exe. Здесь pintool — это файл, который использует язык C++ и вызывает функции, определенные в dll PIN-кода, и выполняет инструментирование на лету. на abc.exe во время выполнения.   -  person Sanjay    schedule 03.12.2010
comment
В принципе, ctypes позволяет вызывать функции из dll. Но я полагаю, что для этого потребуется довольно подробное знание Pin, и их список рассылки, вероятно, лучшее место, где можно спросить об этом.   -  person Thomas K    schedule 03.12.2010
comment
@Томас: Спасибо. Да, я знаю о ctypes. Я также разместил письмо в списке PIN-кодов, но не смог получить что-то конкретное. Но у PIN есть хорошая документация, чтобы узнать о функциях.   -  person Sanjay    schedule 05.12.2010


Ответы (2)


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

person Pedram Amini    schedule 20.03.2011

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

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

person brownan    schedule 03.12.2010
comment
Спасибо Браунан. Это то, о чем я думал, когда я разместил этот вопрос, чтобы я мог получить некоторое мнение для начала. Я обязательно рассмотрю способ, который вы предложили. Как только мы начнем работать над этим, мы узнаем, как действовать дальше. Существуют и другие варианты, такие как cython, boost-python, которые можно использовать для C-to-python и python-to-C. Еще раз, спасибо. - person Sanjay; 05.12.2010