IDA Pro MCP: ریورس انجینیرینگ با کمک هوش مصنوعی
خلاصهٔ کاملتر
IDA Pro MCP یه سرور MCP (Model Context Protocol) هست که به LLMها اجازه میده مستقیماً با IDA Pro — یکی از قدرتمندترین ابزارهای دیساسمبلر و دیکامپایلر — تعامل داشته باشن. هدف اصلیش اینه که فرآیند ریورس انجینیرینگ رو با کمک هوش مصنوعی سریعتر و هوشمندتر کنه؛ از تحلیل کد گرفته تا rename کردن توابع و اضافه کردن کامنت.
این پروژه با طیف گستردهای از کلاینتهای MCP کار میکنه: Claude، Cursor، VS Code، Gemini CLI، Copilot CLI، Windsurf و دهها ابزار دیگه. دو حالت نصب داره: GUI که پلاگین رو درون IDA نصب میکنه، و headless که از طریق idalib بدون نیاز به باز بودن محیط گرافیکی IDA کار میکنه.
حالت headless با ابزار idalib-mcp فعال میشه و میتونه چند فایل رو بهصورت موازی باز نگه داره. هر فایل در یه worker process جداگانه اجرا میشه و میشه با session_id بهشون دسترسی داشت:
idalib_open("/path/to/binary_a.exe", session_id="binary_a")
idalib_open("/path/to/library.dll", session_id="library")
decompile("main", database="binary_a")
xrefs_to("ImportantExport", database="library")ابزارهای اصلی این سرور شامل دیکامپایل (decompile)، دیساسمبل (disasm)، گرفتن cross-referenceها (xrefs_to)، rename کردن توابع و متغیرها، تعریف تایپهای C، و حتی اجرای کد Python دلخواه در محیط IDA میشه. یه ابزار مهم هم int_convert هست که تبدیل بین فرمتهای مختلف عددی (hex، decimal، bytes) رو انجام میده تا LLM دچار اشتباه محاسباتی نشه.
برای prompt نوشتن هم نکات مهمی وجود داره: LLMها روی کدهای obfuscateشده عملکرد ضعیفی دارن. قبل از استفاده بهتره string encryption، import hashing، control flow flattening و anti-decompilation trickها رو از باینری حذف کنی. همچنین استفاده از ابزارهایی مثل Lumina یا FLIRT برای شناسایی توابع کتابخونههای open source دقت تحلیل رو بالا میبره.
نکات کلیدی:
- به LLM اجازه میده مستقیم با IDA Pro تعامل کنه و ریورس انجینیرینگ رو خودکار کنه
- دو حالت GUI (پلاگین IDA) و headless (از طریق idalib) داره
- با بیش از ۲۰ کلاینت MCP مختلف سازگاره
- ابزار int_convert از hallucination عددی LLM جلوگیری میکنه
- روی کدهای obfuscateشده عملکرد ضعیفی داره و باید قبلاً پاکسازی بشن
- امکان باز نگه داشتن چند باینری بهصورت موازی با session_id وجود داره
- گزینه --isolated-contexts برای جداسازی دقیق context بین چند agent موجوده




