
x64dbg-MCP سرور کیا ہے؟
x64dbg-MCP سرور، Model Context Protocol کا مقامی پلگ اِن ہے جو x64dbg کے لیے بنایا گیا ہے۔ یہ JSON-RPC کو HTTP کے ذریعے استعمال کرتے ہوئے x64dbg کی فعالیت فراہم کرتا ہے، جس سے MCP-compatible AI اسسٹنٹ ڈیبگنگ سیشنز کو پروگرام کے ذریعے کنٹرول کر سکتا ہے۔
اسسٹنٹ کسی پراسیس کو لوڈ یا اس سے منسلک ہو سکتا ہے، بریک پوائنٹس مقرر کر سکتا ہے، ہدایات کو مرحلہ وار چلا سکتا ہے، رجسٹرز کا معائنہ کر سکتا ہے، میموری پڑھ اور پیچ کر سکتا ہے، ماڈیولز اور تھریڈز کا جائزہ لے سکتا ہے، سٹرنگز اخذ کر سکتا ہے، حوالوں کی پیروی کر سکتا ہے، PE اسٹرکچرز کا تجزیہ کر سکتا ہے اور ریورس انجینئرنگ کی بہت سی دوسری کارروائیاں انجام دے سکتا ہے۔
یہ پلگ اِن Zig میں لکھا گیا ہے اور براہِ راست x64dbg کے اندر چلتا ہے۔ اس کے لیے Python، .NET یا کسی الگ رن ٹائم کی ضرورت نہیں۔ یہ Streamable HTTP اور legacy SSE transports کے ساتھ MCP 2024-11-05 specification کو سپورٹ کرتا ہے۔
اس سافٹ ویئر کو صرف جائز ریورس انجینئرنگ، مالویئر تجزیے، سیکیورٹی تحقیق، تعلیم یا ایسے دیگر کاموں کے لیے استعمال کریں جن کی آپ کو واضح اجازت حاصل ہو۔
اہم خصوصیات
- وسیع ڈیبگر کنٹرول: ٹولز ڈس اسمبلی، ایگزیکیوشن، بریک پوائنٹس، رجسٹرز، میموری، ماڈیولز، تھریڈز، کال اسٹیکس، سمبلز، حوالہ جات، PE تجزیے، ٹریسنگ، ڈمپنگ، PEB معائنے اور مزید امور کا احاطہ کرتے ہیں۔
- ڈیبگر ایونٹس کی جامع سپورٹ: پلگ اِن ایسے ایونٹس ریکارڈ کرتا ہے جن میں ابتدائیہ، رکنے کے واقعات، بریک پوائنٹس، استثناات، مرحلہ وار عمل درآمد، پراسیس سے منسلک ہونا، DLL سرگرمی اور تھریڈ سرگرمی شامل ہیں۔
- مقامی تعیناتی: پلگ اِن کو کسی بیرونی رن ٹائم یا فریم ورک کی ضرورت نہیں۔
- x32 اور x64 سپورٹ: ایک ہی کوڈ بیس دونوں x64dbg architectures کے لیے پلگ اِنز بناتا ہے۔
- دو MCP transports: Streamable HTTP تجویز کردہ ہے، جبکہ SSE پرانے MCP کلائنٹس کو سپورٹ کرتا ہے۔
- لازمی توثیق: ہر درخواست کے ساتھ درست Bearer token ہونا ضروری ہے۔
- خودکار آغاز: x64dbg شروع ہونے پر سرور بھی شروع ہو جاتا ہے۔
- بلٹ اِن configuration: x64dbg کا Plugins مینو bind address، port اور token کی settings فراہم کرتا ہے۔
- کراس کمپائلیشن: Zig، Windows، WSL، Linux یا macOS سے Windows پلگ اِنز بنا سکتا ہے۔
انٹیگریشن کیسے کام کرتی ہے
x64dbg شروع ہونے پر پلگ اِن x64bridge.dll اور x64dbg.dll سے ڈیبگر API symbols حل کرتا ہے۔ اس کے بعد یہ background thread پر HTTP server شروع کرتا ہے۔ MCP client تصدیق شدہ JSON-RPC requests بھیجتا ہے، اور ہر MCP tool x64dbg SDK calls سے منسلک ہوتا ہے، جیسے بریک پوائنٹ مقرر کرنا، میموری پڑھنا یا execution جاری رکھنا۔
چونکہ پلگ اِن x64dbg process کے اندر چلتا ہے، اس لیے یہ debugger API کے ساتھ براہِ راست رابطہ کرتا ہے۔ کسی بیرونی helper process یا polling service کی ضرورت نہیں ہوتی۔
پلگ اِن انسٹال کریں
آپشن 1: ریلیز انسٹال کریں
- پروجیکٹ کی GitHub releases سے تازہ ترین package ڈاؤن لوڈ کریں۔
- Package extract کریں۔
- اس کی
dist/directory کے contents اپنی x64dbg installation کی root directory میں copy کریں۔ - x32 یا x64 edition of x64dbg لانچ کریں۔
Distribution، x64dbg کے directory structure کی عکاسی کرتی ہے، اس لیے اسے root میں copy کرنے سے دونوں architecture-specific plugins انسٹال ہو جاتے ہیں:
dist/
├── x32/
│ └── plugins/
│ └── x64dbg-MCP-Server.dp32
└── x64/
└── plugins/
└── x64dbg-MCP-Server.dp64سرور خودکار طور پر شروع ہو جاتا ہے۔ اس کے default ports یہ ہیں:
- x64:
0.0.0.0:9094 - x32:
0.0.0.0:9095
آپشن 2: Source سے build کریں
Build کے لیے Zig 0.16-dev یا اس کے بعد کا ورژن درکار ہے۔ Repository root سے یہ چلائیں:
zig build -Doptimize=ReleaseSafe --prefix distیہ command dist/ کے اندر x32 اور x64 دونوں plugin files بناتی ہے۔ اس directory کے contents کو x64dbg root folder میں اسی طرح copy کریں جیسے release package کے ساتھ کرتے ہیں۔
سرور اور توثیق configure کریں
x64dbg میں Plugins > x64dbg-MCP Server > Configure MCP Server... کھولیں۔ Dialog میں bind address، port اور authentication token تبدیل کیے جا سکتے ہیں۔
127.0.0.1اس وقت استعمال کریں جب MCP client اسی Windows system پر چل رہا ہو اور remote access ضروری نہ ہو۔0.0.0.0اس وقت استعمال کریں جب WSL یا کسی دوسرے machine سے connect کرنا ہو جسے network کے ذریعے host تک رسائی درکار ہو۔- موجودہ token copy کرنے کے لیے Copy منتخب کریں۔
- Token تبدیل کرنے کے لیے Generate منتخب کریں۔
پہلی بار چلنے پر Bearer token خودکار طور پر generate ہوتا ہے۔ درست token کے بغیر requests کو 401 Unauthorized موصول ہوتا ہے۔ محفوظ کی گئی تبدیلیاں فوراً نافذ ہو جاتی ہیں کیونکہ سرور خودکار طور پر restart ہوتا ہے۔ Configuration، x64dbg executable کے ساتھ موجود mcp_config.json میں محفوظ کی جاتی ہے۔
سرور غیر encrypted HTTP کے ذریعے میموری پڑھنے اور لکھنے، پراسیس میں تبدیلی اور debugger command execution کی رسائی فراہم کرتا ہے۔ اسے کسی غیر معتبر network پر expose نہ کریں، اگرچہ Bearer authentication لازمی ہے۔
MCP کلائنٹ سے connect کریں
تجویز کردہ Streamable HTTP configuration
اپنے MCP client configuration، مثلاً .mcp.json، میں server entry شامل کریں۔ Default x64 port کے لیے یہ استعمال کریں:
{
"mcpServers": {
"x64dbg": {
"type": "http",
"url": "http://localhost:9094/",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}YOUR_TOKEN_HERE کو plugin configuration dialog سے copy کیے گئے token سے تبدیل کریں۔ اگر آپ x32dbg استعمال کر رہے ہیں تو default port کو 9095 کر دیں۔
قدیم کلائنٹس کے لیے SSE کی تشکیل
اگر آپ کا MCP کلائنٹ صرف SSE کو سپورٹ کرتا ہے تو sse ٹرانسپورٹ منتخب کریں اور اینڈ پوائنٹ کے آخر میں /sse شامل کریں:
{
"mcpServers": {
"x64dbg": {
"type": "sse",
"url": "http://localhost:9094/sse",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}WSL یا ریموٹ رسائی کے لیے localhost کی جگہ Windows میزبان کا IP پتہ درج کریں اور یقینی بنائیں کہ سرور 0.0.0.0 سے منسلک ہے۔
AI کی معاونت سے بنیادی ڈیبگنگ سیشن چلائیں
کلائنٹ سے منسلک ہونے کے بعد x64dbg کھولیں اور اسسٹنٹ سے ڈیبگنگ کے چند مختصر کام انجام دینے کو کہیں۔ ایک عام سیشن اس طرح شروع ہو سکتا ہے:
calc.exe لوڈ کریں اور انٹری پوائنٹ پر بریک لگائیں۔اسسٹنٹ LoadBinary، SetBreakpoint، run اور WaitForPause کو ملا کر ایگزیکیوٹیبل لوڈ کر سکتا ہے، عمل درآمد جاری کر سکتا ہے اور بریک پوائنٹ تک پہنچنے تک انتظار کر سکتا ہے۔
رجسٹرز کا معائنہ کریں
ٹارگٹ کے رک جانے کے بعد پوچھیں:
مجھے موجودہ CPU رجسٹرز دکھائیں۔اسسٹنٹ GetAllRegisters کو کال کر سکتا ہے۔ مجاز ڈیبگنگ سیشن کے دوران کسی قدر کو تبدیل کرنے کے لیے یہ SetRegister استعمال کر سکتا ہے۔
میموری پڑھیں اور اسے ڈس اسمبلی کریں
اسسٹنٹ سے موجودہ انسٹرکشن پوائنٹر کے گرد موجود کوڈ کا معائنہ کرنے کو کہیں:
موجودہ انسٹرکشن پوائنٹر پر 64 بائٹس پڑھیں اور اگلی 10 انسٹرکشنز کو ڈس اسمبلی کریں۔اس کے لیے GetCurrentAddress، ReadMemory اور Disassemble استعمال کیے جا سکتے ہیں۔ مکمل تجزیہ شدہ فنکشن کا معائنہ کرنے کے لیے DisassembleFunction کی درخواست کریں۔
کوڈ میں مرحلہ وار آگے بڑھیں
ایگزیکیوٹیبل ٹولز x64dbg کی مانوس کارروائیوں سے مطابقت رکھتے ہیں:
StepIntoF7 کی طرح کالز کے اندر جاتا ہے۔StepOverF8 کی طرح کالز کو چھوڑ کر آگے بڑھتا ہے۔StepOutموجودہ فنکشن کے واپس آنے تک چلتا ہے۔runF9 کی طرح عمل درآمد جاری کرتا ہے۔PauseDebugٹارگٹ کو روک دیتا ہے۔RunToAddressکسی مخصوص پتے تک پہنچنے تک عمل جاری رکھتا ہے۔
مثال کے طور پر:
اگلی تین انسٹرکشنز پر اسٹیپ اوور کریں، پھر موجودہ پتہ اور کال اسٹیک دکھائیں۔اسسٹنٹ StepOver کو تین بار، پھر GetCurrentAddress اور GetCallStack کو کال کر سکتا ہے۔
بریک پوائنٹس مؤثر طریقے سے استعمال کریں
پلگ اِن عام سافٹ ویئر بریک پوائنٹس، ہارڈویئر بریک پوائنٹس، میموری بریک پوائنٹس، مشروط بریک پوائنٹس اور استثنائی بریک پوائنٹس کو سپورٹ کرتا ہے۔
مشروط بریک پوائنٹ کی مثال
ٹارگٹ فنکشن پر بریک پوائنٹ لگائیں، لیکن صرف اس وقت روکیں جب مخصوص x64dbg شرط درست ہو۔اسسٹنٹ SetConditionalBreakpoint کو x64dbg کی شرطی ایکسپریشن اور اختیاری لاگ کارروائی کے ساتھ استعمال کر سکتا ہے۔ متعلقہ ٹولز بریک پوائنٹ کو فعال، غیر فعال، ٹوگل یا حذف کر سکتے ہیں، یا اس کے ہٹ کاؤنٹ کو ری سیٹ کر سکتے ہیں۔
ہارڈویئر اور میموری بریک پوائنٹس
دستیاب ڈیبگ رجسٹرز کے ذریعے پڑھنے، لکھنے یا عمل درآمد کی نگرانی کے لیے SetHardwareBreakpoint استعمال کریں۔ جب صفحہ سطح پر پڑھنے، لکھنے یا عمل درآمد کی نگرانی تحقیق کے لیے زیادہ موزوں ہو تو SetMemoryBreakpoint استعمال کریں۔
مزید بریک پوائنٹس بنانے سے پہلے اسسٹنٹ سے ListBreakpoints کال کرنے کو کہیں۔ اس سے ڈپلیکیٹ یا متصادم ڈیبگر حالت سے بچنے میں مدد ملتی ہے۔
ماڈیولز، سمبلز اور حوالہ جات کا تجزیہ کریں
سرور نچلی سطح کی ڈیبگنگ سے وسیع تر پروگرام تجزیے کی طرف جانے کے لیے کئی ٹولز فراہم کرتا ہے:
ListModulesلوڈ شدہ ماڈیولز، بنیادی پتے اور سائز رپورٹ کرتا ہے۔AnalyzeModulePE سیکشنز، انٹری پوائنٹ اور امیج سائز کا معائنہ کرتا ہے۔GetImportsاورGetExportsامپورٹ اور ایکسپورٹ ٹیبلز کا معائنہ کرتے ہیں۔SearchSymbolsپیٹرن سے مطابقت رکھنے والے سمبلز تلاش کرتا ہے۔GetFunctionsتجزیہ شدہ فنکشنز اور لیبلز کی فہرست بناتا ہے۔GetReferencesٹارگٹ پتے کے لیے CALL اور JMP حوالہ جات تلاش کرتا ہے۔FindPatternماڈیول میموری اسکین کرتا ہے اور??وائلڈ کارڈز کو سپورٹ کرتا ہے۔GetStringsماڈیول کی میموری سے ASCII سٹرنگز نکالتا ہے۔DetectOEPپیک کیے گئے ایگزیکیوٹیبلز کا اصل انٹری پوائنٹ تلاش کرنے میں مدد کرتا ہے۔
ایک عملی تجزیاتی درخواست یہ ہو سکتی ہے:
لوڈ شدہ ماڈیولز کی فہرست بنائیں، مرکزی ایگزیکیوٹیبل کا تجزیہ کریں، اس کی ASCII سٹرنگز نکالیں اور منتخب فنکشن کے حوالہ جات دکھائیں۔اعلیٰ درجے کی تجاویز
ایونٹ سے باخبر ورک فلو استعمال کریں
یہ فرض نہ کریں کہ عمل درآمد جاری کرنے کے فوراً بعد ٹارگٹ رک گیا ہے۔ run، بریک پوائنٹ کی کارروائیوں یا دیگر غیر ہم وقتی ڈیبگر کارروائیوں کے بعد WaitForPause یا WaitForEvent استعمال کریں۔ GetEventLog سے حالیہ بریک پوائنٹس، استثناوات، DLL لوڈز اور متعلقہ ایونٹس کا جائزہ لیا جا سکتا ہے۔
انفرادی اسٹیپس دہرانے کے بجائے ٹریس کریں
مختصر انسٹرکشن ہسٹری کے لیے کالز کے اندر اسٹیپ کرتے ہوئے پتے اور ڈس اسمبلی ریکارڈ کرنے کے لیے TraceInto استعمال کریں۔ جب کالز کو چھوڑ کر اسٹیپ کرنا ہو تو TraceOver استعمال کریں۔ یہ متعدد الگ الگ اسٹیپ درخواستیں بھیجنے سے زیادہ آسان ہے۔
ایکسپریشنز کا بیچ معائنہ
EvalExpression کسی x64dbg ایکسپریشن، مثلاً پتے، رجسٹر یا ریاضیاتی ایکسپریشن، کا نتیجہ نکالتا ہے۔ جب کئی قدروں کی بیک وقت نگرانی کرنی ہو تو ایک ہی درخواست میں متعدد ایکسپریشنز کا نتیجہ حاصل کرنے کے لیے WatchExpressions استعمال کریں۔
تجزیاتی حالت محفوظ اور بحال کریں
اہم مقامات پر نوٹ لگانے کے لیے CommentOrLabelAtAddress اور بک مارک ٹولز استعمال کریں۔ x64dbg ڈیٹابیس کو .dd64 یا .dd32 فائل کے طور پر محفوظ کرنے کے لیے SaveDatabase کال کریں۔
پیچ احتیاط سے لگائیں
WriteMemToAddress بائٹس میں پیوند کاری کرتا ہے، جبکہ Assemble کسی ایڈریس پر اسمبل شدہ ہدایت لکھتا ہے۔ پیوند کاری سے پہلے موجودہ بائٹس کا معائنہ کریں اور تبدیلیوں کا ریکارڈ رکھیں۔ ترامیم کا جائزہ لینے کے لیے GetPatches اور اصل بائٹس بحال کرنے کے لیے RestorePatches استعمال کریں۔
پروسیس اسٹرکچرز کی تحقیق کریں
Process Environment Block کے فیلڈز کا معائنہ کرنے کے لیے GetPEB، x32 Structured Exception Handler چین کے لیے GetSEHChain، اور رجسٹرز یا اسٹیک سے فنکشن آرگیومینٹس کا معائنہ کرنے کے لیے GetArguments استعمال کریں۔ FollowPointer مقررہ لیولز کی تعداد کے مطابق پوائنٹر چین کو ڈی ریفرنس کر سکتا ہے۔
نیٹ ورک ایکسپوژر کم سے کم رکھیں
جب تک ریموٹ کنیکٹیویٹی درکار نہ ہو، 127.0.0.1 کو ترجیح دیں۔ اگر 0.0.0.0 سے بائنڈ کرنا ضروری ہو، تو قابلِ اعتماد نیٹ ورک کنٹرولز کے ذریعے رسائی محدود کریں، ٹوکن محفوظ رکھیں، اور ایکسپوژر کا شبہ ہونے پر اسے تبدیل کریں۔ یاد رکھیں کہ ٹرانسپورٹ HTTP ہے، انکرپٹڈ HTTPS نہیں۔
مفید آپریشنل ٹولز
GetDebugStateچیک کرتا ہے کہ ڈیبگنگ سیشن فعال ہے یا نہیں، اور PID اور انسٹرکشن پوائنٹر کی اطلاع دیتا ہے۔AttachProcessPID کے ذریعے کسی زیرِ اجرا پروسیس کے ساتھ x64dbg منسلک کرتا ہے۔ExecuteDebuggerCommandبراہِ راست x64dbg کمانڈ چلاتا ہے۔ListCommandsByCategoryMCP کلائنٹ کو دستیاب ٹولز دریافت کرنے میں مدد دیتا ہے۔GetThreads،SwitchThread،SuspendThread، اورResumeThreadتھریڈ کے سیاق و سباق کا نظم کرتے ہیں۔GetMemoryMapاورGetDumpableRegionsمیموری کو پڑھنے یا ڈمپ کرنے سے پہلے میموری ریجنز کی شناخت کرتے ہیں۔DumpMemoryمنتخب میموری رینج محفوظ کرتا ہے، جبکہDumpModuleپورا ماڈیول محفوظ کرتا ہے۔StopDebugموجودہ سیشن ختم کرتا ہے، جبکہRestartDebugاسے دوبارہ شروع کرتا ہے۔
نتیجہ
x64dbg-MCP Server، کسی بیرونی رن ٹائم کی ضرورت کے بغیر، x64dbg کی مقامی ڈیبگنگ صلاحیتوں کو MCP-compatible AI اسسٹنٹس سے منسلک کرتا ہے۔ درست x32 اور x64 پلگ اِنز انسٹال کرنے، تیار کردہ Bearer ٹوکن کاپی کرنے، اور HTTP یا SSE اینڈ پوائنٹ ترتیب دینے کے بعد، آپ قدرتی زبان کی درخواستوں کے ذریعے مکمل ڈیبگنگ ورک فلو چلا سکتے ہیں۔
صرف مقامی بائنڈ ایڈریس اور سادہ read-only معائنہ کے کاموں سے آغاز کریں۔ پھر event-aware stepping، conditional breakpoints، tracing، PE analysis، اور احتیاط سے کنٹرول شدہ میموری ترامیم کی طرف بڑھیں۔ سرور ہمیشہ مجاز اہداف پر استعمال کریں اور اس کے غیر انکرپٹڈ HTTP انٹرفیس کو غیر معتبر نیٹ ورکس کے سامنے ظاہر کرنے سے گریز کریں۔
