এমন একটি ডিকম্পাইলার যা ফিরিয়ে আনে অ্যালগরিদম, শুধু কোড নয়
প্রতিষ্ঠানগুলিকে প্রায়ই এমন সফটওয়্যার বুঝতে হয় যার সোর্স কোড তাদের কাছে নেই: পুরনো কোনো ব্যবস্থা, বাইরে থেকে কেনা কোনো অংশ, কিংবা এসে পৌঁছেছে অথচ সন্দেহজনক ঠেকছে এমন কিছু। মেশিন কোডকে আবার পড়ার মতো ধাপে ফিরিয়ে আনে এমন সরঞ্জাম আগে থেকেই আছে। RetDec Imortek আরও এক ধাপ এগিয়ে ওই ধাপগুলির নাম বলতে চায় — এই অংশটি অ্যাডভান্সড এনক্রিপশন স্ট্যান্ডার্ড (AES), এই অংশটি একটি সর্ট, এই অংশটি পাঠানোর জন্য ডেটা গোছানোর কায়দা।
মূল RetDec v5.0 ২০২২ সাল থেকে নিষ্ক্রিয়। সত্যিকারের প্রশস্ত সামনের অংশ আছে এমন হাতে গোনা উন্মুক্ত ডিকম্পাইলারের একটি এটি — আর সেই প্রশস্ততা বাঁচিয়ে রাখার মতো।
এটি কী, এক মিনিটে
সফটওয়্যার এমন চেহারায় আসে যা মেশিন পড়তে পারে, মানুষ পারে না। যখন সোর্স কোড নেই — সরবরাহকারী আর নেই, চুক্তিতে কখনও ছিলই না, ফাইলটি এসেছে এমন জায়গা থেকে যাকে আপনি বিশ্বাস করেন না — তখন প্রোগ্রামটি আসলে কী করে তা কেউ বলতে পারে না। হাতে যাচাই করা মানে একটার পর একটা মেশিন নির্দেশ পড়া।
এটি কম্পাইল করা ফাইলটি খুলে ফেলে তা থেকে আবার C গড়ে: পরীক্ষা-সংগ্রহের ২১৬টি বাইনারিই বিল্ডযোগ্য C হয়ে ফেরে। তারপর এটি মানের পিছনে ছোটে — কোন ক্রিপ্টোগ্রাফি, কোন সর্ট, কোন থ্রেডিং, কোন ফাইল ফরম্যাট — আর কতবার তা কাজে লাগে তা জানায়, যেখানে প্রায় লাগেই না সেই অবস্থাটিসহ।
ম্যালওয়্যার খুলে দেখা নিরাপত্তা দল, যাদের কোডের আগে উত্তরটা দরকার। যেসব কোম্পানি এমন সফটওয়্যার চালায় যার সোর্স কারও কাছে নেই, আর নিরাপদে কিছু নতুন করে গড়া বা বদলানোর আগে যাদের তার একটি বিবরণ দরকার। যে-কেউ এমন ফাইল ফরম্যাটে আটকে আছেন যা কখনও নথিভুক্ত হয়নি — পুরনো নথি, কিংবা এমন যন্ত্র যা কেবল নিজের সফটওয়্যারের সঙ্গেই কথা বলে।
আসল ডিকোডারটাই, WebAssembly-তে কম্পাইল করা
এর উপরের সবটাই বিমূর্তনের মইয়ের ভিতর দিয়ে স্ক্রিপ্ট করা একটা হাঁটা। এটিই প্রথম ধাপ যা সত্যি সত্যি চলছে: Capstone — নেটিভ RetDec বিল্ড যে ডিসঅ্যাসেম্বলারের সঙ্গে লিংক করে সেই একই — আপনার পেস্ট করা বাইট ডিকোড করছে।
capstone — WebAssembly
৭৯১ কিলোবাইট (KB), কারণ সত্যিকারের একটি x86 ডিকোডার গোটা নির্দেশ-সেট বয়ে নেয় — প্রতিটি এনকোডিং, প্রিফিক্স ও এক্সটেনশন। জিনিসটার সৎ মাপ এটাই।
deps/capstone.
নেটিভ, বাইটকোড ও নতুন ফরম্যাট
আউটপুট ফরম্যাটের উপর নির্ভর করে, কারণ সবকিছুই C-তে ডিকম্পাইল হয় বলে ভান করলে কারও লাভ নেই। সামনের অংশ নেটিভ বাইনারি নেয় নির্বাহযোগ্য ও লিংকযোগ্য ফরম্যাটে (ELF), পোর্টেবল এক্সিকিউটেবলে (PE) আর Mach-O-তে; বাইটকোড নেয়, যার মধ্যে আছে জাভা ভার্চুয়াল মেশিনের (JVM) ক্লাস ফাইল, ডালভিক এক্সিকিউটেবল (DEX) ও কমন ইন্টারমিডিয়েট ল্যাঙ্গুয়েজ (CIL); আর নেয় নতুন লক্ষ্য, যেমন CUDA-র প্যারালাল থ্রেড এক্সিকিউশন (PTX)।
ELF · PE · Mach-O
C ছদ্মকোড তৈরি করে, সঙ্গে সেই শব্দার্থ-স্তরটি, যার জন্যই এই ফর্ক।
Python · Lua · JVM · DEX · CIL
Python আর Lua বাইটকোড নিজেদের ভাষাতেই ফিরে আসে; ম্যানেজড কোডের পথগুলি Java-ঘরানা বা C#-ঘরানার আউটপুট দেয়।
WebAssembly · CUDA PTX
WebAssembly রূপান্তরিত হয় WebAssembly টেক্সট ফরম্যাটে (WAT)। PTX-কে পরে জোড়া কিছু নয়, প্রথম শ্রেণির ইনপুট হিসেবেই ধরা হয়।
একটি ফাংশনকে বিমূর্তনের মই বেয়ে উঠতে দেখুন
একটি বাইনারি ফাংশন বেছে নিন আর সেটিকে পাইপলাইনের ভিতর দিয়ে ধাপে ধাপে চালান: কাঁচা বাইট, ডিসঅ্যাসেম্বলি, তোলা IR, C ছদ্মকোড, আর শেষে শব্দার্থের রায় — নামসহ অ্যালগরিদম, সঙ্গে যে প্রমাণ তাকে শনাক্ত করেছে।
retdec — স্পেসিফিকেশন নিষ্কাশন
শব্দার্থের রায়
প্রমাণ
সিম্বল ছেঁটে ফেললে উদ্ধার কেবল গঠন থেকেই করতে হয় — ধ্রুবক, রাউন্ডের সংখ্যা, নিয়ন্ত্রণ-প্রবাহের আকার। ওটাই কঠিন পরিস্থিতি, আর মাপা F1 ০.০৫৬ ওটাকেই বোঝায়।
ছয় ঘরানার গঠন
স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরির (STL) কনটেইনার আর C++ রানটাইম গঠন — একটি std::vector কনটেইনারের আকার আবার ফুটে উঠছে বরাদ্দের ধরন থেকে।
AES, সিকিউর হ্যাশ অ্যালগরিদম (SHA) পরিবার, ChaCha20, Rivest–Shamir–Adleman (RSA) আর উপবৃত্তীয় বক্ররেখার আদি-উপাদান, ধ্রুবক ও রাউন্ডের গঠন দেখে চেনা।
ইনট্রোসর্ট, মার্জ সর্ট, বাইনারি অনুসন্ধান — সঙ্গে সেই গভীরতা-সীমার সুইচ, যেটা ইনট্রোসর্টকে ধরিয়ে দেয়।
গ্রাফ অ্যালগরিদম, সঙ্গে প্রস্থ-প্রথম অনুসন্ধান (BFS) ও গভীরতা-প্রথম অনুসন্ধানের (DFS) পরিভ্রমণ-ধরন।
std::thread, pthreads, OpenMP, থ্রেডিং বিল্ডিং ব্লকস (TBB) আর কাঁচা অ্যাটমিক।
Protobuf, FlatBuffers, MessagePack, JavaScript অবজেক্ট নোটেশন (JSON) আর এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজের (XML) ফ্রেমিং।
২১৬টি বাইনারি, আর যে সংখ্যাটা গায়ে লাগে
পরীক্ষা-সংগ্রহের ২১৬টি ELF বাইনারিই বিল্ডযোগ্য C তৈরি করে, ব্যবহার করে
--buildable, যা পূর্বনির্ধারিতভাবেই চালু থাকে। অ্যালগরিদম উদ্ধারের গল্পটা আলাদা, আর সেটা জানানোর সৎ উপায় হলো দুটি সংখ্যাই পাশাপাশি রাখা।
| মাপকাঠি | ফল | শর্ত |
|---|---|---|
| বিল্ডযোগ্য C আউটপুট | 216 / 216 | --buildable, পূর্বনির্ধারিতভাবে চালু |
| অ্যালগরিদম উদ্ধারের F1 | 0.056 | নাম ছাড়া, ৯৫% আস্থা ব্যবধান ০.০৩৪–০.০৮৩ |
| অ্যালগরিদম উদ্ধারের F1 | 1.000 | নাম সহ, সিম্বলযুক্ত বাইনারি |
পূর্বনির্ধারিত .c আবার কম্পাইল হয় | না | এই ফর্কেও নয়, মূল RetDec-এও নয় |
ঐচ্ছিক, অফলাইন, আর গেটে বাঁধা
পরিশোধন চলে llama.cpp দিয়ে, GGUF মডেল ব্যবহার করে, পুরোপুরি অফলাইনে, কেবল তখনই যখন
RETDEC_NEURAL_REFINE=1 থাকে আর একটি মডেলের পথ দেওয়া হয়। এটি পূর্বনির্ধারিতভাবে বন্ধ, আর এটি কখনও ভিত্তি-আউটপুটের জায়গা নেয় না।
- কম্পাইল গেট। পরিশোধিত আউটপুটকে পেরোতে হয়
gcc -fsyntax-onlyগেট, তবেই সেটি গ্রহণ করা হয়। - গঠনগত যাচাই। পরিশোধনটিকে তবু তোলা গঠনের সঙ্গে মিলতে হবে।
- নির্ধারণবাদী ভিত্তিটি অটুট রাখা হয়। পরিশোধন ছাড়া ডিকম্পাইলারের আউটপুটই নিরীক্ষাযোগ্য নিদর্শন হিসেবে থেকে যায়। কোনো ফল নিয়ে যুক্তি দিতে হলে আপনি সেটিকেই সামনে রাখবেন।
- কোনো নেটওয়ার্ক নেই। স্থানীয় GGUF ইনফারেন্স। আপনার বাইনারির কিছুই মেশিন ছেড়ে যায় না।
$ export RETDEC_NEURAL_REFINE=1 $ export RETDEC_NEURAL_MODEL=/models/qwen-coder.gguf $ retdec-decompiler --buildable ./target.elf
সোর্স কোড হারিয়ে গেলে একটি প্রোগ্রাম কী করে তা বের করে
সফটওয়্যার এমন চেহারায় আসে যা মেশিন পড়তে পারে, মানুষ পারে না। এটি সেটিকে আবার খুলে ফেলে আর সোজা কথায় বলে দেয় প্রোগ্রামটি আসলে কী করছে।
ম্যালওয়্যার খুলে দেখা নিরাপত্তা দল
পাতার পর পাতা অপাঠ্য কোডের বদলে আপনি উত্তরটা পান: এই অংশটা ডেটা এলোমেলো করছে, এই অংশটা দিয়ে সে বাড়িতে খবর পাঠায়, এই অংশটা দিয়ে সে লুকিয়ে থাকে। একজন বিশ্লেষকের সবার আগে ওইটুকুই দরকার।
পুরনো সফটওয়্যার আছে অথচ সোর্স কোড নেই এমন কোম্পানি
সিস্টেমটা এখনও ব্যবসা চালাচ্ছে, আর যে লিখেছিল সে বছর কয়েক আগেই চলে গেছে। এটি সেটি কী করে তার একটি বিবরণ উদ্ধার করে, আর কেউ নিরাপদে নতুন করে বানানো বা বদলানোর আগে ঠিক সেটাই দরকার।
কেউ নথিভুক্ত করেনি এমন ফাইল ফরম্যাটে আটকে থাকা যে কেউ
পুরনো নথি, এমন একটা যন্ত্র যেটা কেবল নিজের সফটওয়্যারের সঙ্গেই কথা বলে, প্রতিযোগীর রপ্তানি করা ফাইল। এটি গঠনটা বের করে দেয়, যাতে আপনার নিজের সফটওয়্যার সেটি পড়তে পারে।
Qt 6 গ্রাফিকাল ইউজার ইন্টারফেস (GUI), কিংবা GUI-ই নয়
C, অ্যাসেম্বলি, IR আর নিয়ন্ত্রণ-প্রবাহের গ্রাফ জুড়ে মিলিয়ে রাখা কোড-দৃশ্য, সঙ্গে ফাংশন ভ্রমণ, স্ট্রিং পরিদর্শন, একটি বাইনারি ব্রাউজার ও একটি সহায়ক প্যানেল। হেডলেস মোড প্রতিটি GUI নির্ভরতা বাদ দেয়, ফলে একই বিল্ড কন্টিনিউয়াস ইন্টিগ্রেশনেও (CI) চলে।
ওপেন সোর্স ব্যবহারের জন্য GNU Affero জেনারেল পাবলিক লাইসেন্স (AGPL-3.0+), কিংবা মালিকানাধীন স্থাপনার জন্য একটি বাণিজ্যিক লাইসেন্স। কপিরাইট Odin Loch, Imortek নামে ব্যবসারত, ২০২৫–২০২৬।
v2.0.21-এ পাঠানোর মতো। CI গেটগুলি উৎপাদন-পর্যায়ের পরিপক্বতার মান নয়, উন্নয়নের অবস্থাই তুলে ধরে — প্রকল্প নিজেই তা বলেছে, এটি অনুমান নয়।