
क्वोक्का: एक तेज़ और सटीक बाइनरी एक्सपोर्टर
यह छवि DALL-E द्वारा निर्मित है
Quokka एक बाइनरी एक्सपोर्टर है: किसी प्रोग्राम के डिसअसेम्बली से, यह एक एक्सपोर्ट फ़ाइल उत्पन्न करता है जिसका उपयोग डिसअसेम्बलर के बिना किया जा सकता है। यह वर्तमान में डिसअसेम्बली बैकएंड के रूप में IDA Pro, Ghidra और Binary Ninja का समर्थन करता है।
Quokka का मुख्य उद्देश्य प्रारंभिक एक्सपोर्ट के बाद कभी भी डिसअसेम्बलर खोले बिना बाइनरी को पूरी तरह से हेर-फेर करने में सक्षम बनाना है। इसके अलावा, यह उपयोगकर्ताओं को एक स्वच्छ इंटरफ़ेस प्रदान करने के लिए डिसअसेम्बलर के API को एब्स्ट्रैक्ट करता है।
Quokka, BinExport से काफी प्रेरित है, जो BinDiff द्वारा उपयोग किया जाने वाला बाइनरी एक्सपोर्टर है।
IDA Pro Ghidra Binary Ninja
│ │ │
IDA Plugin (C++) Ghidra Plugin (Java) BinaryNinja Plugin (Python)
│ │ │
└────────────── quokka.proto ─────────────────┘
(protobuf schema)
│
.quokka files
│
Python bindings (quokka.Program)
├── Capstone backend (primary)
└── Pypcode backend (optional)
प्लगइन CI में बनाया जाता है और रजिस्ट्री में उपलब्ध है।
इस प्रकार के कमांड का उपयोग करके सीधे PIP से इंस्टॉल करना संभव होना चाहिए:
$ pip install quokka-project
नोट: Quokka द्वारा उत्पन्न फ़ाइल को पढ़ने के लिए IDA प्लगइन की आवश्यकता नहीं है। इसका उपयोग केवल उन्हें उत्पन्न करने के लिए किया जाता है।
Quokka, IDA 9.1+ के साथ संगत है।
Quokka को Hex-Rays प्लगइन रिपॉजिटरी में प्रकाशित किया गया है और इसे hcli के साथ इंस्टॉल किया जा सकता है:
user@host:~$ hcli plugin install quokka
प्लगइन CI पर भी बनाया जाता है और रिलीज़ टैब में उपलब्ध है।
प्लगइन डाउनलोड करने के लिए, quokka_plugin.so नामक फ़ाइल (या अपने IDA संस्करण के लिए quokka-ida<version>.zip संग्रह) लें और इसे अपनी IDA plugins निर्देशिका में कॉपी करें।
Quokka एक समर्पित एक्सटेंशन के माध्यम से Ghidra (>= 12.0.3) से एक्सपोर्ट का भी समर्थन करता है। यह वही .quokka protobuf फ़ाइलें उत्पन्न करता है जिन्हें Python लाइब्रेरी लोड कर सकती है।
निर्माण निर्देशों, स्थापना और उपयोग के विवरण के लिए Ghidra एक्सटेंशन README देखें।
Quokka एक Python प्लगइन के माध्यम से Binary Ninja से एक्सपोर्ट का भी समर्थन करता है। यह वही .quokka protobuf फ़ाइलें उत्पन्न करता है जिन्हें Python लाइब्रेरी लोड कर सकती है।
स्थापना और उपयोग के विवरण के लिए BinaryNinja एक्सटेंशन README देखें।
बाइनरी एक्सपोर्ट करने का पहला मैन्युअल तरीका IDA Pro के अंदर प्लगइन का उपयोग करना है। IDA के अंदर डिफ़ॉल्ट शॉर्टकट Alt+A है। यह निम्नलिखित डायलॉग खोलता है:

उपलब्ध मोड हैं:
नोट: FULL मोड अभी तक लागू नहीं किया गया है। केवल LIGHT मोड वर्तमान में कार्यात्मक है।
नोट: इसके लिए एक कार्यशील IDA इंस्टॉलेशन की आवश्यकता होती है।
$ idat -OQuokkaAuto:true -OQuokkaDecompiled:true -A /path/to/hello.i64
सभी उपलब्ध विकल्पों का वर्णन उपयोग में किया गया है।
नोट: एक्सपोर्ट की गति बढ़ाने के लिए idat का उपयोग ida के बजाय किया जाता है क्योंकि ग्राफ़िकल इंटरफ़ेस की आवश्यकता नहीं होती है।
$ analyzeHeadless /tmp/proj Test \
-import /path/to/binary \
-scriptPath ghidra_extension/src/script/ghidra_scripts \
-postScript QuokkaExportHeadless.java \
--out=/path/to/output.quokka --mode=LIGHT
अधिक विवरण के लिए Ghidra एक्सटेंशन README देखें।
नोट: Binary Ninja API के हेडलेस उपयोग के लिए व्यावसायिक लाइसेंस की आवश्यकता होती है। यदि लाइसेंस नहीं है, तो इसके बजाय Binary Ninja UI के अंदर एक्सपोर्ट कमांड का उपयोग करें।
$ python binaryninja_extension/export_headless.py /path/to/binary \
-o /path/to/output.quokka --mode LIGHT
अधिक विवरण के लिए BinaryNinja एक्सटेंशन README देखें।
Quokka एक CLI उपयोगिता टूल प्रदान करता है जो एक या अधिक फ़ाइलों और/या निर्देशिकाओं (प्रत्येक निर्देशिका में सभी निष्पादन योग्य फ़ाइलें) को समानांतर में स्वचालित रूप से एक्सपोर्ट करता है। यह IDA Pro और Ghidra दोनों बैकएंड का समर्थन करता है:
$ quokka-cli --backend ghidra -t 8 dir/
$ quokka-cli --backend ida --ida-path /opt/ida -t 8 dir/
$ quokka-cli -t 8 dir/ # auto-detect backend
$ quokka-cli -o "%p/exports/%f.quokka" binary # custom output directory
$ quokka-cli -b ida -o %F_ida.quokka -t 4 dir/ # Using relative path
$ quokka-cli -t 8 dir1/ dir2/ binary1 binary2 # multiple inputs
डिफ़ॉल्ट रूप से, .quokka फ़ाइल इनपुट बाइनरी के बगल में रखी जाती है (उदा. /usr/bin/ls से /usr/bin/ls.quokka उत्पन्न होता है)। इसे शाब्दिक पथ या प्रति फ़ाइल विस्तारित टेम्पलेट के साथ ओवरराइड करने के लिए -o का उपयोग करें (%f = स्टेम, %F = फ़ाइलनाम, %p = पैरेंट निर्देशिका, %P = पूर्ण पथ, %e = एक्सटेंशन, %% = शाब्दिक %)।
सभी विकल्पों के लिए quokka-cli --help चलाएँ। मुख्य फ्लैग में शामिल हैं:
-b, --backend डिसअसेम्बलर बैकएंड चुनने के लिए (ida, ghidra, या auto)-i, --ida-path IDA इंस्टॉलेशन निर्देशिका का पथ प्रदान करने के लिए (idat वाला फ़ोल्डर)--ghidra-path Ghidra इंस्टॉलेशन निर्देशिका प्रदान करने के लिए (GHIDRA_INSTALL_DIR को ओवरराइड करता है)-o, --output आउटपुट पथ या टेम्पलेट सेट करने के लिए (डिफ़ॉल्ट: %F.quokka)-m, --mode एक्सपोर्ट मोड चुनने के लिए (light या full)--decompiled डीकंपाइल्ड कोड एक्सपोर्ट सक्षम करने के लिए (केवल IDA)-v, --verbose वर्बोज़ लॉगिंग सक्षम करने के लिएimport quokka
from quokka.types import Disassembler
# Directly from the binary (auto-detects available backend)
prog = quokka.Program.from_binary("/bin/ls")
# Explicitly choose a backend
prog = quokka.Program.from_binary("/bin/ls", disassembler=Disassembler.GHIDRA)
prog = quokka.Program.from_binary("/bin/ls", disassembler=Disassembler.IDA)
# From the exported file
prog = quokka.Program("ls.quokka", # the exported file
"/bin/ls") # the original binary
# Add new types from C declarations
prog.add_type("struct context { int id; char name[64]; };")
prog.add_type("enum status { OK=0, ERROR=1 };")
# Save the .quokka file
prog.write()
# Or apply changes (including new types) back to the IDA database
prog.commit(database_file="ls.i64", overwrite=True)