
x64dbg-MCP Server কী?
x64dbg-MCP Server হলো Model Context Protocol-এর একটি নেটিভ প্লাগইন, যা x64dbg-এর জন্য তৈরি। এটি HTTP-এর মাধ্যমে JSON-RPC ব্যবহার করে x64dbg-এর কার্যকারিতা উন্মুক্ত করে, ফলে MCP-সামঞ্জস্যপূর্ণ AI সহকারী প্রোগ্রাম্যাটিকভাবে ডিবাগিং সেশন নিয়ন্ত্রণ করতে পারে।
সহকারী কোনো প্রসেস লোড বা অ্যাটাচ করতে, ব্রেকপয়েন্ট সেট করতে, নির্দেশনা ধাপে ধাপে চালাতে, রেজিস্টার পরিদর্শন করতে, মেমরি পড়তে ও প্যাচ করতে, মডিউল ও থ্রেড পরীক্ষা করতে, স্ট্রিং বের করতে, রেফারেন্স অনুসরণ করতে, PE কাঠামো বিশ্লেষণ করতে এবং আরও অনেক রিভার্স-ইঞ্জিনিয়ারিং কার্যক্রম সম্পাদন করতে পারে।
প্লাগইনটি Zig-এ লেখা এবং সরাসরি x64dbg-এর ভেতরে চলে। এর জন্য Python, .NET বা আলাদা কোনো রানটাইমের প্রয়োজন নেই। এটি Streamable HTTP এবং লিগ্যাসি SSE ট্রান্সপোর্টসহ MCP 2024-11-05 স্পেসিফিকেশন সমর্থন করে।
এই সফটওয়্যার শুধুমাত্র বৈধ রিভার্স ইঞ্জিনিয়ারিং, ম্যালওয়্যার বিশ্লেষণ, নিরাপত্তা গবেষণা, শিক্ষা বা আপনার স্পষ্ট অনুমোদন থাকা অন্য কোনো কাজের জন্য ব্যবহার করুন।
প্রধান বৈশিষ্ট্য
- ব্যাপক ডিবাগার নিয়ন্ত্রণ: টুলগুলো ডিসঅ্যাসেম্বলি, এক্সিকিউশন, ব্রেকপয়েন্ট, রেজিস্টার, মেমরি, মডিউল, থ্রেড, কল স্ট্যাক, সিম্বল, রেফারেন্স, PE বিশ্লেষণ, ট্রেসিং, ডাম্পিং, PEB পরিদর্শনসহ আরও অনেক কিছু কভার করে।
- ডিবাগার ইভেন্ট কভারেজ: প্লাগইনটি ইনিশিয়ালাইজেশন, স্টপ, ব্রেকপয়েন্ট, এক্সেপশন, স্টেপিং, প্রসেস অ্যাটাচমেন্ট, DLL কার্যক্রম এবং থ্রেড কার্যক্রমসহ বিভিন্ন ইভেন্ট রেকর্ড করে।
- নেটিভ ডিপ্লয়মেন্ট: প্লাগইনটির কোনো বাহ্যিক রানটাইম বা ফ্রেমওয়ার্ক নির্ভরতা নেই।
- x32 এবং x64 সমর্থন: একই কোডবেস থেকে x64dbg-এর উভয় আর্কিটেকচারের জন্য প্লাগইন তৈরি করা যায়।
- দুটি MCP ট্রান্সপোর্ট: Streamable HTTP সুপারিশকৃত, আর SSE লিগ্যাসি MCP ক্লায়েন্ট সমর্থন করে।
- বাধ্যতামূলক প্রমাণীকরণ: প্রতিটি অনুরোধে একটি বৈধ Bearer টোকেন থাকতে হবে।
- স্বয়ংক্রিয় স্টার্টআপ: x64dbg চালু হলে সার্ভার শুরু হয়।
- বিল্ট-ইন কনফিগারেশন: x64dbg-এর Plugins মেনুতে bind address, port এবং token-এর সেটিংস রয়েছে।
- ক্রস-কম্পাইলেশন: Zig ব্যবহার করে Windows, WSL, Linux বা macOS থেকে Windows প্লাগইন তৈরি করা যায়।
ইন্টিগ্রেশন যেভাবে কাজ করে
x64dbg চালু হলে প্লাগইনটি x64bridge.dll এবং x64dbg.dll থেকে ডিবাগার API সিম্বল রিজলভ করে। এরপর এটি একটি ব্যাকগ্রাউন্ড থ্রেডে HTTP সার্ভার চালু করে। একটি MCP ক্লায়েন্ট প্রমাণীকৃত JSON-RPC অনুরোধ পাঠায়, এবং প্রতিটি MCP টুল x64dbg SDK কলের সঙ্গে ম্যাপ হয়, যেমন ব্রেকপয়েন্ট সেট করা, মেমরি পড়া বা এক্সিকিউশন চালু রাখা।
প্লাগইনটি x64dbg প্রসেসের ভেতরে চলায় এটি সরাসরি ডিবাগার API-এর সঙ্গে যোগাযোগ করে। কোনো বাহ্যিক হেল্পার প্রসেস বা পোলিং সার্ভিসের প্রয়োজন নেই।
প্লাগইন ইনস্টল করুন
বিকল্প ১: একটি রিলিজ ইনস্টল করুন
- প্রকল্পের GitHub releases থেকে সর্বশেষ প্যাকেজ ডাউনলোড করুন।
- প্যাকেজটি এক্সট্র্যাক্ট করুন।
- এর
dist/ডিরেক্টরির বিষয়বস্তু আপনার x64dbg ইনস্টলেশনের রুট ডিরেক্টরিতে কপি করুন। - x32 অথবা x64 সংস্করণের x64dbg চালু করুন।
ডিস্ট্রিবিউশনটি x64dbg-এর ডিরেক্টরি কাঠামো অনুসরণ করে। তাই এটি রুটে কপি করলে উভয় আর্কিটেকচারের প্লাগইন ইনস্টল হবে:
dist/
├── x32/
│ └── plugins/
│ └── x64dbg-MCP-Server.dp32
└── x64/
└── plugins/
└── x64dbg-MCP-Server.dp64সার্ভার স্বয়ংক্রিয়ভাবে চালু হয়। এর ডিফল্ট পোর্টগুলো হলো:
- x64:
0.0.0.0:9094 - x32:
0.0.0.0:9095
বিকল্প ২: সোর্স থেকে বিল্ড করুন
বিল্ড করার জন্য Zig 0.16-dev বা পরবর্তী সংস্করণ প্রয়োজন। রিপোজিটরির রুট থেকে চালান:
zig build -Doptimize=ReleaseSafe --prefix distএই কমান্ডটি dist/-এর অধীনে x32 ও x64 উভয় প্লাগইন ফাইল তৈরি করে। রিলিজ প্যাকেজের মতোই ওই ডিরেক্টরির বিষয়বস্তু x64dbg-এর রুট ফোল্ডারে কপি করুন।
সার্ভার ও প্রমাণীকরণ কনফিগার করুন
x64dbg-তে Plugins > x64dbg-MCP Server > Configure MCP Server... খুলুন। এই ডায়ালগে bind address, port এবং authentication token পরিবর্তন করা যায়।
- যখন MCP ক্লায়েন্ট একই Windows সিস্টেমে চলে এবং দূরবর্তী অ্যাক্সেসের প্রয়োজন নেই, তখন
127.0.0.1ব্যবহার করুন। - WSL বা নেটওয়ার্কের মাধ্যমে হোস্টে পৌঁছাতে হবে এমন অন্য কোনো মেশিন থেকে সংযোগ করার সময়
0.0.0.0ব্যবহার করুন। - বর্তমান টোকেন কপি করতে Copy নির্বাচন করুন।
- টোকেন পরিবর্তন করতে Generate নির্বাচন করুন।
প্রথমবার চালানোর সময় একটি Bearer টোকেন স্বয়ংক্রিয়ভাবে তৈরি হয়। সঠিক টোকেন ছাড়া অনুরোধে 401 Unauthorized পাওয়া যায়। সার্ভার স্বয়ংক্রিয়ভাবে পুনরায় চালু হওয়ায় সংরক্ষিত পরিবর্তন তাৎক্ষণিকভাবে কার্যকর হয়। কনফিগারেশনটি x64dbg এক্সিকিউটেবলের পাশে mcp_config.json-এ সংরক্ষিত হয়।
সার্ভারটি এনক্রিপশনবিহীন HTTP-এর মাধ্যমে মেমরি পড়া ও লেখার অ্যাক্সেস, প্রসেস পরিচালনা এবং ডিবাগার কমান্ড এক্সিকিউশনের সুবিধা দেয়। Bearer প্রমাণীকরণ বাধ্যতামূলক হলেও এটিকে কোনো অবিশ্বস্ত নেটওয়ার্কে উন্মুক্ত করবেন না।
MCP ক্লায়েন্ট সংযুক্ত করুন
সুপারিশকৃত Streamable HTTP কনফিগারেশন
আপনার MCP ক্লায়েন্টের কনফিগারেশনে, যেমন .mcp.json-এ, একটি সার্ভার এন্ট্রি যোগ করুন। ডিফল্ট x64 পোর্টের জন্য ব্যবহার করুন:
{
"mcpServers": {
"x64dbg": {
"type": "http",
"url": "http://localhost:9094/",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}YOUR_TOKEN_HERE-এর জায়গায় প্লাগইন কনফিগারেশন ডায়ালগ থেকে কপি করা টোকেন বসান। x32dbg ব্যবহার করলে ডিফল্ট পোর্ট 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 ব্যবহার করতে পারে।
মেমরি পড়া ও ডিসঅ্যাসেম্বল করা
বর্তমান instruction pointer-এর আশপাশের কোড পরিদর্শন করতে সহকারীকে বলুন:
বর্তমান instruction pointer-এ 64 বাইট পড়ুন এবং পরের 10টি instruction ডিসঅ্যাসেম্বল করুন।এ কাজে GetCurrentAddress, ReadMemory এবং Disassemble ব্যবহার করা যেতে পারে। সম্পূর্ণ বিশ্লেষিত ফাংশন পরিদর্শন করতে DisassembleFunction অনুরোধ করুন।
কোড ধাপে ধাপে চালানো
এক্সিকিউশন টুলগুলো পরিচিত x64dbg অ্যাকশনের সঙ্গে সামঞ্জস্যপূর্ণ:
StepIntoF7-এর মতো কলের ভেতরে প্রবেশ করে।StepOverF8-এর মতো কলের ওপর দিয়ে যায়।StepOutবর্তমান ফাংশন রিটার্ন করা পর্যন্ত চালায়।runF9-এর মতো এক্সিকিউশন পুনরায় চালু করে।PauseDebugটার্গেট থামায়।RunToAddressনির্দিষ্ট ঠিকানায় পৌঁছানো পর্যন্ত চালিয়ে যায়।
উদাহরণ:
পরের তিনটি instruction-এর ওপর দিয়ে যান, তারপর বর্তমান ঠিকানা ও call stack দেখান।সহকারী তিনবার StepOver কল করতে পারে, এরপর GetCurrentAddress এবং GetCallStack কল করতে পারে।
কার্যকরভাবে ব্রেকপয়েন্ট ব্যবহার করুন
প্লাগইনটি সাধারণ সফটওয়্যার ব্রেকপয়েন্ট, হার্ডওয়্যার ব্রেকপয়েন্ট, মেমরি ব্রেকপয়েন্ট, শর্তাধীন ব্রেকপয়েন্ট এবং exception ব্রেকপয়েন্ট সমর্থন করে।
শর্তাধীন ব্রেকপয়েন্টের উদাহরণ
টার্গেট ফাংশনে একটি ব্রেকপয়েন্ট সেট করুন, তবে নির্দিষ্ট x64dbg শর্ত সত্য হলেই থামুন।সহকারী একটি x64dbg শর্ত এক্সপ্রেশন এবং ঐচ্ছিক লগ অ্যাকশনসহ SetConditionalBreakpoint ব্যবহার করতে পারে। সংশ্লিষ্ট টুলগুলো ব্রেকপয়েন্ট সক্রিয়, নিষ্ক্রিয়, টগল, মুছে বা হিট কাউন্ট রিসেট করতে পারে।
হার্ডওয়্যার ও মেমরি ব্রেকপয়েন্ট
উপলব্ধ ডিবাগ রেজিস্টারের মাধ্যমে পড়া, লেখা বা এক্সিকিউশন পর্যবেক্ষণের জন্য SetHardwareBreakpoint ব্যবহার করুন। তদন্তের জন্য পেজ-লেভেলে পড়া, লেখা বা এক্সিকিউশন পর্যবেক্ষণ বেশি উপযোগী হলে SetMemoryBreakpoint ব্যবহার করুন।
আরও ব্রেকপয়েন্ট তৈরি করার আগে সহকারীকে ListBreakpoints কল করতে বলুন। এতে ডুপ্লিকেট বা পরস্পরবিরোধী ডিবাগার স্টেট এড়ানো যায়।
মডিউল, সিম্বল ও রেফারেন্স বিশ্লেষণ
সার্ভারটি নিম্নস্তরের ডিবাগিং থেকে বৃহত্তর প্রোগ্রাম বিশ্লেষণে যাওয়ার জন্য বিভিন্ন টুল প্রদান করে:
ListModulesলোড হওয়া মডিউল, বেস ঠিকানা ও আকার জানায়।AnalyzeModulePE সেকশন, এন্ট্রি পয়েন্ট ও ইমেজের আকার পরীক্ষা করে।GetImportsএবংGetExportsimport ও export টেবিল পরিদর্শন করে।SearchSymbolsএকটি প্যাটার্নের সঙ্গে মিলে যাওয়া সিম্বল খুঁজে।GetFunctionsবিশ্লেষিত ফাংশন ও লেবেলগুলোর তালিকা দেয়।GetReferencesটার্গেট ঠিকানার CALL ও JMP রেফারেন্স খুঁজে।FindPatternমডিউল মেমরি স্ক্যান করে এবং??ওয়াইল্ডকার্ড সমর্থন করে।GetStringsমডিউলের মেমরি থেকে ASCII স্ট্রিং বের করে।DetectOEPপ্যাক করা এক্সিকিউটেবলের মূল এন্ট্রি পয়েন্ট খুঁজে পেতে সহায়তা করে।
একটি ব্যবহারিক বিশ্লেষণ অনুরোধ হতে পারে:
লোড হওয়া মডিউলগুলোর তালিকা দিন, প্রধান এক্সিকিউটেবল বিশ্লেষণ করুন, এর ASCII স্ট্রিং বের করুন এবং নির্বাচিত ফাংশনের রেফারেন্স দেখান।উন্নত টিপস
ইভেন্ট-সচেতন ওয়ার্কফ্লো ব্যবহার করুন
এক্সিকিউশন পুনরায় চালু করার পর টার্গেট সঙ্গে সঙ্গে থেমে গেছে ধরে নেবেন না। run, ব্রেকপয়েন্ট অপারেশন বা অন্যান্য অ্যাসিনক্রোনাস ডিবাগার অ্যাকশনের পর WaitForPause বা WaitForEvent ব্যবহার করুন। সাম্প্রতিক ব্রেকপয়েন্ট, exception, DLL লোড এবং সংশ্লিষ্ট ইভেন্ট পর্যালোচনা করতে GetEventLog ব্যবহার করা যায়।
আলাদা আলাদা ধাপ বারবার করার বদলে ট্রেস করুন
সংক্ষিপ্ত instruction history-এর জন্য কলের ভেতরে ধাপে ধাপে যাওয়ার সময় ঠিকানা ও ডিসঅ্যাসেম্বলি রেকর্ড করতে TraceInto ব্যবহার করুন। কলের ওপর দিয়ে যেতে হলে TraceOver ব্যবহার করুন। এতে অনেকগুলো পৃথক step অনুরোধ করার চেয়ে কাজটি সহজ হয়।
একসঙ্গে এক্সপ্রেশন পরিদর্শন
EvalExpression একটি x64dbg expression, যেমন ঠিকানা, রেজিস্টার বা arithmetic expression, মূল্যায়ন করে। একসঙ্গে একাধিক মান পর্যবেক্ষণ করতে হলে একটি অনুরোধে একাধিক expression মূল্যায়নের জন্য 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-এ বাইন্ড করতেই হলে বিশ্বস্ত নেটওয়ার্ক নিয়ন্ত্রণ ব্যবহার করে অ্যাক্সেস সীমাবদ্ধ করুন, টোকেন সুরক্ষিত রাখুন এবং এক্সপোজারের সন্দেহ হলে টোকেন পরিবর্তন করুন। মনে রাখবেন, ট্রান্সপোর্টটি এনক্রিপ্ট করা HTTPS নয়, HTTP।
উপযোগী অপারেশনাল টুল
GetDebugStateকোনো ডিবাগিং সেশন সক্রিয় আছে কি না পরীক্ষা করে এবং PID ও instruction pointer জানায়।AttachProcessPID ব্যবহার করে চলমান কোনো প্রসেসের সঙ্গে x64dbg সংযুক্ত করে।ExecuteDebuggerCommandসরাসরি একটি x64dbg কমান্ড চালায়।ListCommandsByCategoryকোনো MCP ক্লায়েন্টকে উপলভ্য টুল খুঁজে পেতে সহায়তা করে।GetThreads,SwitchThread,SuspendThreadএবংResumeThreadথ্রেডের কনটেক্সট পরিচালনা করে।- মেমরি পড়া বা ডাম্প করার আগে
GetMemoryMapএবংGetDumpableRegionsমেমরি অঞ্চল শনাক্ত করে। DumpMemoryনির্বাচিত মেমরি রেঞ্জ সংরক্ষণ করে, আরDumpModuleএকটি সম্পূর্ণ মডিউল সংরক্ষণ করে।StopDebugবর্তমান সেশন শেষ করে, আরRestartDebugসেটি পুনরায় চালু করে।
উপসংহার
x64dbg-MCP Server কোনো বাহ্যিক রানটাইমের প্রয়োজন ছাড়াই x64dbg-এর নেটিভ ডিবাগিং সক্ষমতাকে MCP-সামঞ্জস্যপূর্ণ AI সহকারীদের সঙ্গে সংযুক্ত করে। সঠিক x32 ও x64 প্লাগইন ইনস্টল করার পর, তৈরি করা Bearer টোকেন কপি করে এবং একটি HTTP বা SSE এন্ডপয়েন্ট কনফিগার করলে আপনি স্বাভাবিক ভাষার অনুরোধের মাধ্যমে সম্পূর্ণ ডিবাগিং ওয়ার্কফ্লো পরিচালনা করতে পারবেন।
শুধু লোকাল ব্যবহারের জন্য বাইন্ড ঠিকানা এবং সহজ, শুধু-পঠনযোগ্য পরিদর্শন কাজ দিয়ে শুরু করুন। এরপর ইভেন্ট-সচেতন স্টেপিং, কন্ডিশনাল ব্রেকপয়েন্ট, ট্রেসিং, PE বিশ্লেষণ এবং সতর্কভাবে নিয়ন্ত্রিত মেমরি পরিবর্তনের দিকে এগিয়ে যান। সবসময় অনুমোদিত টার্গেটে সার্ভার ব্যবহার করুন এবং এর এনক্রিপ্ট না করা HTTP ইন্টারফেসকে অবিশ্বস্ত নেটওয়ার্কে উন্মুক্ত করা এড়িয়ে চলুন।
