سؤال

أنا أعمل في تحليل الملفات الثنائية ، باستخدام Python. لقد كنت أستخدم Defuggers لإجراء تحليل ديناميكي (أي تشغيل التطبيق واستخدام نقاط التوقف للحصول على تنفيذ وقت التشغيل). ومع ذلك ، يمكن تحسين النتائج إذا كان بإمكاني استخدام بعض الأدوات الثنائية دبوس. تم تطوير دبوس في C ++ وتم توفيره كمصدر مغلق (DLLs فقط). نكتب شيئًا يسمى pintools يصفه أين وماذا نريد اعتراض. أرغب في تشغيل وظيفة PIN في Python حتى أتابع استخدام Python. أنا على دراية بـ "Ctypes" و Boost-Python.

مشكلتي هي: من أجل استخدام PIN ، نكتب Pintool وندير bibnary قابلة للتنفيذ مع PIN و Pintool (يشبه تشغيل التطبيق مع JIT). الآن ، ليس لدي أي فكرة عما إذا كان بإمكاني استخدام Ctypes وما إلى ذلك لاستيراد وظائف PIN واستخدام رمز Python هذا لتحليل الثنائي ديناميكيًا. هل يمكنك تقديم بعض الاقتراحات أو الإرشادات حول كيفية متابعة هذه المهمة.

لذلك ، في Nut-n-shell ، أريد إنشاء واجهة Python (Wrapper) لإطار Pin.

هل كانت مفيدة؟

المحلول

تحقق من مشروع ProcessTap. يبدو أنه ينفذ بالضبط ما تبحث عنه: http://code.google.com/p/processtap/

نصائح أخرى

كنت أفكر في هذا مؤخرًا ، في حين أنني لم أبحث عنه ، سأقترب من مشكلة مثل هذه: اكتب بنتول ، عند التهيئة ، يبدأ مترجم بيثون مضمن ويستورد وحدة بيثون. سأبحث في استخدام SWIG لإنشاء روابط لجميع مكالمات API PIN التي تريد استخدامها. بعد ذلك ، سيطلق Pintool وظيفة متشددين في وحدة Python المستوردة التي من شأنها إصدار مكالمات إلى API لتسجيل المزيد من الوظائف والقيام بكل ما تريد القيام به.

لست متأكدًا من كيفية عمل عمليات الاسترجاعات ، لا أعرف ما يكفي عن SWIG. أيضًا ، قد يفشل هذا إذا كان البرنامج الذي تحاول صكه نفسه يستخدم Python. ولكن هكذا أحاول حل هذه المشكلة للبدء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top