Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
vmlinux-to-elf — एक उपकरण जो कर्नेल प्रतीक तालिका (kallsyms) निकालकर कच्चे कर्नेल से पूरी तरह विश्लेषण-योग्य .ELF पुनर्प्राप्त करता है। | Kitploit
उपकरण/GitHubGitHub/marin-m/vmlinux-to-elf
एम्बेडेड सिस्टम सुरक्षारिवर्स इंजीनियरिंगबाइनरी विश्लेषणफर्मवेयर विश्लेषण
GitHubmarin-m/vmlinux-to-elf

vmlinux-to-elf

एक उपकरण जो कर्नेल प्रतीक तालिका (kallsyms) निकालकर कच्चे कर्नेल से पूरी तरह विश्लेषण-योग्य .ELF पुनर्प्राप्त करता है।

रिपॉजिटरी देखें
1.8k1822 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
वेबसाइट

vmlinux-to-elf

यह टूल एक vmlinux/vmlinuz/bzImage/zImage कर्नेल इमेज (चाहे वह रॉ बाइनरी ब्लॉब हो या पहले से मौजूद लेकिन स्ट्रिप किया गया .ELF फ़ाइल) से पूरी तरह विश्लेषण योग्य .ELF फ़ाइल प्राप्त करने की अनुमति देता है, जिसमें पुनर्प्राप्त फ़ंक्शन और वेरिएबल प्रतीक शामिल होते हैं।

मुख्य चित्रण

इसके लिए, यह आपके कर्नेल में एक कर्नेल प्रतीक तालिका (kallsyms) खोजता है, एक संपीड़ित प्रतीक तालिका जो लगभग हर कर्नेल में मौजूद होती है, अधिकांशतः अपरिवर्तित।

चूँकि संबंधित प्रतीक तालिका मूल रूप से संपीड़ित होती है, इसे उन स्ट्रिंग्स को पुनर्प्राप्त करना चाहिए जो मूल बाइनरी में दिखाई नहीं देती हैं।

यह एक .ELF फ़ाइल उत्पन्न करता है जिसका आप IDA Pro और Ghidra का उपयोग करके विश्लेषण कर सकते हैं। इसलिए यह टूल एम्बेडेड सिस्टम रिवर्स इंजीनियरिंग के लिए उपयोगी है।

Get it from the Snap Store   Get it on Flathub

उपयोग:

root@kitploit:~
# Command line:
vmlinux-to-elf <input_kernel.bin> <output_kernel.elf>

# Command line, list symbol addresses only:
kallsyms-finder <input_kernel.bin> # If installed with uv
vmlinux-to-elf.kallsyms-finder # If installed with snap

# Command line, just decompress the kernel:
vmlinuz-decompressor <input_kernel.bin> <output_kernel.bin> # If installed with uv
vmlinux-to-elf.vmlinuz-decompressor # If installed with snap

# Graphical:
vmlinux-to-elf-gui # If installed with uv
vmlinux-to-elf.gui # If installed with snap
flatpak run re.fossplant.vmlinux-to-elf # If installed with flatpak

एप्लिकेशन मुख्य स्क्रीन एप्लिकेशन कर्नेल ऑफसेट दृश्य

स्थापना:

root@kitploit:~
# Install CLI+GUI with Snap (recommended on Ubuntu)
sudo snap install vmlinux-to-elf

# Install CLI+GUI with yay (recommended on Arch, Manjaro)
yay -S vmlinux-to-elf libadwaita python-gobject

# Install CLI+GUI with uv (example with Fedora)
sudo dnf install -y uv glib2-devel libadwaita-devel gtk4-devel \
    gobject-introspection-devel python3-gobject-devel \
    python3-devel cairo-devel @development-tools
uv tool install vmlinux-to-elf[gui]
vmlinux-to-elf-gui --install-metadata # Install .desktop file

# Install CLI with uv and GUI with Flatpak (recommended on
# distributions with libadwaita < 1.6)
sudo dnf install -y uv flatpak @development-tools
uv tool install vmlinux-to-elf

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install re.fossplant.vmlinux-to-elf

स्थानीय विकास वातावरण सेटअप:

root@kitploit:~
sudo snap install --classic astral-uv
sudo apt install git
git clone [email protected]:marin-m/vmlinux-to-elf.git

# Dependencies for the GTK-4 GUI
sudo apt install libgirepository-2.0-dev libadwaita-1-dev \
    gir1.2-adw-1 gir1.2-gtk-4.0 python3-dev blueprint-compiler

cd vmlinux-to-elf
cp -a .github/hooks/* .git/hooks/
# Download Python modules and initialize virtualenv (creates ".venv",
# call "source .venv/bin/activate" to set up)
uv sync --extra gui
# Add vmlinux-to-elf to $PATH, so that the commands are callable
# system-wide (creates a symlink to the source in "~/.local/bin")
uv tool install -e .[gui]

विशेषताएँ

  • इनपुट के रूप में रॉ बाइनरी ब्लॉब या ELF कर्नेल फ़ाइल लें [OK]
  • Linux कर्नेल के लिए उपयोग किए जाने वाले मुख्य संपीड़न प्रारूपों को स्वचालित रूप से पहचानें और अनपैक करें [OK]
  • इनपुट फ़ाइल से एम्बेडेड कर्नेल प्रतीक तालिका (kallsyms) ढूँढें और निकालें [OK]
  • सामान्य फ़ंक्शन प्रोलॉग हस्ताक्षरों के अलावा अन्य चीज़ों पर निर्भर करते हुए इंस्ट्रक्शन सेट आर्किटेक्चर, एंडियननेस, बिट आकार का अनुमान लगाएं [OK]
  • kallsyms तालिका में निहित प्रतीकों से कर्नेल के एंट्री पॉइंट का अनुमान लगाएं [OK]
  • कर्नेल बेस पते के लिए बुनियादी अनुमान प्रदान करें [OK] (अभी के लिए, मान लें कि यह निचले 0xfff बिट्स क्लियर के साथ बाइनरी का पहला "TEXT" प्रतीक पता है - पर्याप्त अच्छा काम करता प्रतीत होता है)
  • ANDROID! या UNCOMPRESSED_IMG मैजिक से शुरू होने वाली कुछ प्रकार की Android boot.img फ़ाइलों को अनपैक करें [OK]
  • आउटपुट के रूप में IDA Pro या Ghidra के साथ पूरी तरह विश्लेषण योग्य .ELF फ़ाइल तैयार करें [OK]

यह वास्तव में कैसे काम करता है?

"kallsyms" प्रतीक तालिका का एक संक्षिप्त इतिहास "kallsyms.py" फ़ाइल के शीर्ष पर पाया जा सकता है। संक्षेप में, इसे लगभग 2004 में Linux कर्नेल में इसके वर्तमान रूप में पेश किया गया था और अन्य चीजों के अलावा "Kernel oops" संदेशों को प्रिंट करने के लिए उपयोग किया जाता है।

इसमें "प्रतीक नाम", "प्रतीक पता", "प्रतीक प्रकार" के टुपल्स होते हैं (प्रतीक प्रकार nm उपयोगिता के समान शैली में एक अकेले अक्षर से निर्दिष्ट किए जाते हैं), यह जानकारी एक साधारण संपीड़न एल्गोरिथ्म के साथ कसकर पैक की जाती है।

नीचे दिया गया स्कीमा दिखाता है कि यह जानकारी कर्नेल में कैसे क्रमबद्ध की जाती है, प्रत्येक संरचना का ऑफसेट vmlinux-to-elf द्वारा ह्यूरिस्टिक्स के माध्यम से पता लगाया जाता है:

OpenWRT के पास 2013 से एक पैच है जो डिफ़ॉल्ट रूप से kallsyms तालिका पर संपीड़न हटा देता है (जब उपयोगकर्ता द्वारा kallsyms बिल्ड सक्षम किया गया हो)। वे LZMA का उपयोग करके कर्नेल पर पुनः संपीड़ित करते समय स्थान बचाने के लिए ऐसा करते हैं।

इसका मतलब है कि kallsyms_token_table और kallsyms_token_address प्रविष्टियाँ गायब हो जाती हैं, और प्रतीक नाम इसके बजाय सादे पाठ ASCII का उपयोग करते हैं। इस मामले का भी समर्थन किया गया है।

मानक Linux 6.2 कर्नेलों में, kallsyms ऐरे निम्नलिखित क्रम में एन्कोड किए जाते हैं:

  1. kallsyms_addresses (or kallsyms_offsets + kallsyms_relative_base)
  2. kallsyms_num_syms
  3. kallsyms_names
  4. kallsyms_markers
  5. kallsyms_seqs_of_names (केवल 6.2+)
  6. kallsyms_token_table
  7. kallsyms_token_index

Linux 6.4+ कर्नेलों के लिए, यह लेआउट बदल दिया गया है:

  1. kallsyms_num_syms
  2. kallsyms_names
  3. kallsyms_markers
  4. kallsyms_token_table
  5. kallsyms_token_index
  6. kallsyms_addresses (or kallsyms_offsets + kallsyms_relative_base)
  7. kallsyms_seqs_of_names

जबकि इन्हें vmlinux-to-elf के पार्सिंग एल्गोरिथ्म द्वारा निम्नलिखित क्रम में पार्स किया जाता है:

  1. kallsyms_token_table (उपांत्य संरचना)
  2. kallsyms_token_index (अंतिम संरचना, आगे की ओर)
  3. kallsyms_markers (पीछे की ओर)
  4. kallsyms_names (फिर से पीछे की ओर)
  5. kallsyms_num_syms (फिर से पीछे की ओर)
  6. kallsyms_addresses (or kallsyms_offsets + kallsyms_relative_base) (फिर से पीछे की ओर)

कर्नेल समर्थन

इसे संस्करण 2.6.10 (दिसंबर 2004) से लेकर वर्तमान 6.4 (अगस्त 2023 तक) तक के कर्नेलों का समर्थन करना चाहिए। केवल स्पष्ट रूप से CONFIG_KALLSYMS के बिना कॉन्फ़िगर किए गए कर्नेलों का समर्थन नहीं किया जाना चाहिए। यदि यह कर्नेल कॉन्फ़िगरेशन वेरिएबल बिल्ड के समय सेट नहीं किया गया था, तो आपको यह प्राप्त होगा: KallsymsNotFoundException: No embedded symbol table found in this kernel।

रॉ कर्नेलों के लिए, निम्नलिखित आर्किटेक्चर का पता लगाया जा सकता है (binwalk से मैजिक का उपयोग करके): MIPSEL, MIPSEB, ARMEL, ARMEB, PowerPC, SPARC, x86, x86-64, ARM64, MIPS64, SuperH, ARC।

निम्नलिखित कर्नेल संपीड़न प्रारूपों का स्वचालित रूप से पता लगाया जा सकता है: XZ, LZMA, GZip, BZ2, LZ4, LZO और Zstd।

उन्नत उपयोग

आप इस टूल के साथ बंडल किए गए kallsyms-finder उपयोगिता का उपयोग करके कर्नेल के प्रतीक नामों, पतों और प्रकारों का केवल-पाठ आउटपुट भी प्राप्त कर सकते हैं। इसके आउटपुट का प्रारूप /proc/kallsyms procfs फ़ाइल के समान होगा।

टूल द्वारा स्वचालित रूप से अनुमानित किए जाने वाले कुछ पैरामीटर (जैसे इंस्ट्रक्शन सेट या बेस पता) समस्या की स्थिति में ओवरराइड किए जा सकते हैं। ऐसा करने की अनुमति देने वाले तर्कों का पूरा विनिर्देश नीचे प्रस्तुत है:

root@kitploit:~
$ vmlinux-to-elf -h
usage: vmlinux-to-elf [-h] [--e-machine DECIMAL_NUMBER] [--bit-size BIT_SIZE]
                      [--file-offset HEX_NUMBER] [--base-address HEX_NUMBER]
                      [--bss-size BSS_SIZE] [--use-absolute]
                      input_file output_file

Turn a raw or compressed kernel binary, or a kernel ELF without symbols, into a fully analyzable ELF whose symbols were extracted from the kernel symbol table

positional arguments:
  input_file            Path to the vmlinux/vmlinuz/zImage/bzImage/kernel.bin/kernel.elf file to make into an analyzable .ELF
  output_file           Path to the analyzable .ELF to output

options:
  -h, --help            show this help message and exit
  --e-machine DECIMAL_NUMBER
                        Force overriding the output ELF "e_machine" field with this integer value (rather than auto-detect)
  --bit-size BIT_SIZE   Force overriding the input kernel bit size, providing 32 or 64 bit (rather than auto-detect)
  --file-offset HEX_NUMBER
                        Consider that the raw kernel starts at this offset of the provided raw file or compressed stream (rather than 0, or the beginning of the ELF
                        sections if an ELF header was present in the input)
  --base-address HEX_NUMBER
                        Force overriding the output ELF base address field with this integer value (rather than auto-detect)
  --bss-size BSS_SIZE   Size in megabytes of the .bss section in the binary
  --use-absolute        Assume kallsyms offsets are absolute addresses

सोर्स कोड कैसे व्यवस्थित है?

सोर्स कोड चार्ट

बग फिक्स, सुधार, आदि।

किसी भी सुधार सुझाव के लिए एक issue खोलने में संकोच न करें।

बग रिपोर्ट करने, प्रश्न पूछने आदि के लिए कृपया वर्तमान Github रिपॉजिटरी issues और pull requests को प्राथमिकता दें।

वैकल्पिक रूप से, यदि आपको परियोजना के लेखक से सीधे संपर्क करने की आवश्यकता है तो आप इस matrix चैनल का उपयोग कर सकते हैं, लेकिन कृपया इसे द्वितीयक चैनल के रूप में आरक्षित रखें, उदाहरण के लिए कर्नेल नमूने भेजने के लिए, अन्यथा जो यहाँ आता है उसके खो जाने की अधिक संभावना होती है।

टूल डाउनलोड करें
ऐरे का नामविवरणनमूना सामग्री
kallsyms_addresses (or kallsyms_offsets + kallsyms_relative_base)प्रत्येक प्रतीक के पते (या हाल के कर्नेलों में, एक आधार के सापेक्ष ऑफसेट), एक ऐरे के रूप में80 82 00 C0 80 82 00 C0 80 82 00 C0 0C 84 00 C0 B4 84 00 C0 5C 85 00 C0 60 85 00 C0 60 85 00 C0 ...
kallsyms_num_symsप्रतीकों की कुल संख्या, एक पूर्णांक के रूप में (एंडियननेस, संरेखण, प्रतीक तालिका के सही डिकोडिंग की जाँच के लिए उपयोगी)54 D4 00 00
kallsyms_namesसंपीड़ित, लंबाई-पृथक प्रतीक नाम स्वयं। संपीड़ित प्रतीक स्ट्रिंग्स में प्रत्येक बाइट "kallsyms_token_index" ऐरे में एक इंडेक्स को संदर्भित करता है, जो स्वयं "kallsyms_token_table" ऐरे में एक वर्ण या स्ट्रिंग खंड के ऑफसेट को संदर्भित करता है।09 54 64 6F 5F E1 F1 66 F5 25 05 54 F3 74 AB 74 0E 54 FF AB ...
kallsyms_markersएक लुकअप तालिका जो "kallsyms_names" में एक संपीड़ित प्रतीक नाम का अनुमानित ऑफसेट तुरंत खोजने का कार्य करती है: हर 256 प्रतीकों पर, "kallsyms_names" में संबंधित प्रतीक का एक ऑफसेट इस तालिका में long के रूप में जोड़ा जाता है।00 00 00 00 03 0C 00 00 0C 18 00 00 1B 24 00 00 0F 31 00 00 DA 3D 00 00 CF 4A 00 00 ...
kallsyms_seqs_of_namesयह लुकअप तालिका (केवल 6.2+ कर्नेलों में मौजूद) पैक किए गए 3-बाइट पूर्णांकों का एक ऐरे अनुक्रम रखती है, जहाँ ऐरे इंडेक्स किसी दिए गए प्रतीक नाम के लिए वर्णमाला-संख्यात्मक क्रम से मेल खाते हैं, और ऐरे मान kallsyms_addresses और kallsyms_names ऐरे में संबंधित प्रविष्टि इंडेक्स से मेल खाते हैं
kallsyms_token_tableNull-समाप्त स्ट्रिंग खंड या वर्ण जो कर्नेल प्रतीक नामों में समाहित हो सकते हैं। इसमें अधिकतम 256 स्ट्रिंग खंड या वर्ण हो सकते हैं। ASCII कोड पॉइंट्स के अनुरूप इंडेक्स जो वास्तव में किसी कर्नेल प्रतीक में उपयोग होते हैं, संबंधित ASCII वर्ण के अनुरूप होंगे, अन्य स्थितियों में एक सांख्यिकीय रूप से चुना गया स्ट्रिंग खंड होगा। यह टूल पहले दी गई फ़ाइल में इस ऐरे को ह्यूरिस्टिक रूप से खोजने का प्रयास करता है ताकि kallsyms प्रतीक तालिका मिल सके।73 69 00 67 70 00 74 74 00 79 6E 00 69 6E 74 5F 00 66 72 00 ...
kallsyms_token_index256 वर्ड, जिनमें से प्रत्येक "kallsyms_token_table" में उनके संबंधित इंडेक्स द्वारा निर्दिष्ट वर्णों या स्ट्रिंग खंडों के ऑफसेट से मैप करता है।00 00 03 00 06 00 09 00 0C 00 11 00 14 00 1B 00 1E 00 22 00 2C 00 30 00 35 00 38 00 ...