रिवर्स इंजीनियरों के लिए hex editor ImHex
(github.com/WerWolv)- ImHex रिवर्स इंजीनियरों, प्रोग्रामरों और रात देर तक काम करने वालों के लिए बनाया गया एक hex editor है, जो फ़ाइल सामग्री का विश्लेषण, संशोधन और visualization एक ही टूल में उपलब्ध कराता है
- इसकी मुख्य विशेषता C-जैसी pattern language है, जिससे structure और data type परिभाषित करके फ़ाइल सामग्री को parse और highlight किया जा सकता है, और MIME type तथा magic value आधारित auto-loading भी समर्थित है
- यह local file, raw disk, GDB Server, UDP packet, process memory, SSH/SFTP remote file जैसे कई data source खोल सकता है, और Capstone-आधारित disassembler तथा YARA rule scan भी शामिल हैं
- उपयोग के लिए आमतौर पर OpenGL 3.0 या उससे ऊपर वाले GPU की आवश्यकता होती है, जबकि
-NoGPUsoftware-rendered release बिना GPU के चल सकता है, लेकिन GPU-accelerated version की तुलना में काफ़ी धीमा हो सकता है - plugin विकास
libimhex, ImHex API और Content Registry के ज़रिये किया जाता है; अधिकांश हिस्सा GPLv2-only है, लेकिन/lib/libimhexऔर/plugins/uiLGPLv2.1 के तहत उपलब्ध हैं, जिससे proprietary plugin development संभव होता है
ImHex की मूल भूमिका
- ImHex रिवर्स इंजीनियरों, प्रोग्रामरों और उन लोगों के लिए एक hex editor है जो सुबह 3 बजे भी काम करते समय आँखों पर कम ज़ोर डालने वाला टूल चाहते हैं
- नवीनतम release download, nightly pre-release, web version और documentation अलग-अलग उपलब्ध हैं
Hex view और data editing
- Hex view byte patching, patch management और unlimited undo/redo को support करता है
- byte copy कई formats में संभव है
- bytes
- hex string
- C, C++, C#, Rust, Python, Java, JavaScript arrays
- ASCII-Art hex view
- HTML self-contained div
- search और navigation feature में simple string/hex search, तथा start/end/current cursor के आधार पर goto शामिल हैं
- highlighting में foreground rule setting, तथा pattern, search result और bookmark आधारित background highlight शामिल हैं
- data display कई types को support करता है
- 8/16/32/64-bit hexadecimal integer
- 8/16/32/64-bit signed/unsigned decimal integer
- 16/32/64-bit float
- RGBA8 color, HexII, binary
- encoding के लिए ASCII और custom encoding को संभाला जा सकता है, और UTF-8, UTF-16, ShiftJIS, अधिकतर Windows encodings आदि built-in रूप में समर्थित हैं
- paged data view उपलब्ध है
Pattern language और data structure interpretation
- Pattern Language ImHex के लिए विकसित की गई एक पूर्णत: custom programming language है
- C-जैसे syntax के साथ structure और data type परिभाषित किए जा सकते हैं, और उनके आधार पर फ़ाइल सामग्री को parse और highlight किया जा सकता है
- pattern language MIME type और magic value के आधार पर auto-loading को support करती है
- समर्थित तत्वों में arrays, pointers, structs, unions, enums, bitfields, namespaces, little/big endian, conditionals आदि शामिल हैं
- यह error message, syntax highlighting और error marking प्रदान करती है
- data visualization targets में images, audio, 3D models, coordinates, time stamps आदि शामिल हैं
- संबंधित सामग्री:
- Pattern Language Source Code
- Pattern Language Documentation
- ImHex-Patterns: format patterns, libraries, magic, constant files का repository
Data inspection, pre-processing, search
- Data Inspector endianness, decimal, hexadecimal, octal और bit inversion सहित data को कई types में interpret करता है
- unsigned/signed integer: 8/16/24/32/48/64-bit
- float: 16/32/64-bit
- signed/unsigned LEB128
- ASCII, Wide, UTF-8 characters and strings
time32_t,time64_t, DOS date/time- GUID, RGBA8, RGB65 colors
- inspector के माध्यम से byte copy और modification संभव है, और pattern language से नए data type जोड़े जा सकते हैं
- node-based data pre-processor data को hex editor में दिखाए जाने से पहले modify, decrypt और decode कर सकता है
- underlying source को छुए बिना data modification संभव है
- custom node जोड़ने का support है
- data search पूरे file या selected region पर किया जा सकता है
- string extraction में minimum length, character set और encoding options उपलब्ध हैं
- sequence search byte या character sequence ढूँढ सकता है और case-insensitive option देता है
- regex search, binary pattern wildcard search, numeric value/range search समर्थित हैं
- numeric search में size, endianness और unaligned value ignore option शामिल हैं
Data source और analysis features
- ImHex कई data source से data load कर सकता है
- local files: बड़ी files के लिए तेज़ और कुशल loading
- raw disks: raw disk और partition loading
- GDB Server: चल रहे process या embedded device की RAM तक पहुँच
- Intel Hex, Motorola SREC
- Base64 encoded data
- UDP packets
- process memory: चल रहे process के पूरे address space का निरीक्षण
- SSH/SFTP remote files
- data analysis और visualization में file magic आधारित file parser और MIME type database शामिल हैं
- graph और statistics में byte type distribution, entropy graph, highest/average entropy, digram, layered distribution graph शामिल हैं
- encrypted/compressed file detection feature उपलब्ध है
- diffing अलग-अलग data source की तुलना कर सकता है, और difference highlighting तथा table view प्रदान करता है
Disassembly, YARA, hashing
- built-in disassembler Capstone द्वारा समर्थित सभी architectures को support करता है
- ARM32, ARM64, MIPS, x86 16/32/64-bit, PowerPC, SPARC, IBM SystemZ, xCORE, M68K, TMS320C64X, M680X, Ethereum, RISC-V, WebAssembly, MOS65XX, Berkeley Packet Filter
- अपने architecture के लिए custom disassembler लिखने का support भी है
- YARA Rule support से official yara rules के साथ file scan किया जा सकता है, match को hex editor में highlight किया जा सकता है, match पर jump किया जा सकता है, और कई rules एक साथ लागू किए जा सकते हैं
- hashing specific data region और arbitrary string दोनों पर किया जा सकता है
- supported hashes में CRC8/16/32, MD5, SHA-1/SHA-224/SHA-256/SHA-384/SHA-512, Adler32, Murmur, SipHash, XXHash, Tiger, Blake2B, Blake2S आदि शामिल हैं
UI, theme, import/export
- theme में default dark mode उपलब्ध है और light mode भी उपयोग किया जा सकता है
- shareable theme file के ज़रिये सभी UI elements के रंग और style को customize किया जा सकता है, और custom font support भी है
- modern interface multiple workspaces, custom layouts और detachable windows को support करता है
- import/export में Base64 files, IPS/IPS32 patches, Markdown reports, और कई programming languages के लिए binary arrays शामिल हैं
- bookmarks custom name/color, hex editor के भीतर region highlight, jump, नए tab में bookmark content खोलना, और comment जोड़ना support करते हैं
- built-in content updater database से files को ImHex के अंदर ही download कर सकता है
- pattern files
- pattern language libraries
- magic files
- custom data processor nodes
- custom encodings
- custom themes
- Yara rules
Tools और onboarding
- Helpful tools में LLVM-आधारित Itanium, MSVC, Rust और D-Lang demangler शामिल हैं
- अन्य tools में ASCII table, regex replacer, mathematical expression evaluator, graphing calculator, hexadecimal color picker, base converter, byte swapper, UNIX permissions calculator, Wikipedia term definition finder आदि शामिल हैं
- file utilities में file splitter, file combiner और file shredder उपलब्ध हैं
- TCP Client/Server, HTTP Requests, IEEE754 Float visualizer और Euclidean algorithm calculator भी शामिल हैं
- शुरुआत में मदद के लिए multilingual support, beginner के लिए simplified mode, extensive documentation, database के example files, achievements और interactive tutorials उपलब्ध हैं
System requirements और build conditions
- GPU के लिए सामान्यतः OpenGL 3.0 या उससे ऊपर की आवश्यकता होती है
-NoGPUsuffix release software rendered है, इसलिए यह GPU के बिना चल सकता है, लेकिन GPU accelerated version की तुलना में बहुत धीमा हो सकता है- जहाँ संभव हो, integrated GPU की जगह dedicated GPU का उपयोग करने की सलाह दी जाती है
- Windows के कुछ Intel HD GPU drivers graphical artifacts पैदा करने के लिए जाने जाते हैं
- OS support:
- Windows 7 या बाद का संस्करण, Windows 10/11 recommended
- macOS 15 Sequoia या बाद का संस्करण
- निचले version भी स्वयं compile करने पर चल सकते हैं, लेकिन GitHub पर macOS 15 से नीचे के लिए CI runner न होने के कारण release binary वहाँ काम नहीं करती
- macOS build signed नहीं है, इसलिए Security & Privacy settings में इसे manually allow करना होगा
- Linux के लिए Ubuntu/Debian, Fedora, RHEL/AlmaLinux, Arch Linux की official releases हैं; अन्य distro के लिए AppImage, Flatpak, Snap समर्थित हैं
- FreeBSD 14.3 पर tested
- CPU के लिए x86, AMD64, ARM64 आधिकारिक रूप से समर्थित हैं, और Little Endian CPU होने पर इसे काम करना चाहिए
- RAM लगभग 50MiB चाहिए, जबकि अधिक जटिल analysis के लिए ज़्यादा memory की आवश्यकता हो सकती है
- storage लगभग 100MiB चाहिए
- compilation के लिए C++23 या उससे ऊपर को support करने वाला GCC या Clang आवश्यक है
- Windows और Linux releases नवीनतम उपलब्ध GCC से build किए जाते हैं
- macOS release नवीनतम उपलब्ध LLVM Clang से build की जाती है
- MSVC और AppleClang समर्थित नहीं हैं
- installation और compilation documents:
Plugin development और license
- plugin development template project से शुरू किया जा सकता है, और
libimhex, ImHex API तथा Content Registry तक पहुँच के माध्यम से ImHex के साथ interact किया जा सकता है या नया content जोड़ा जा सकता है - plugin build करने के लिए SDK आवश्यक है
- local SDK build procedure:
cmake -G Ninja -DIMHEX_BUNDLE_PLUGIN_SDK=ON -B buildcd buildDESTDIR=install ninja install- SDK path
install/usr/local/share/imhex/sdkहोगा, औरIMHEX_SDK_PATHको उस absolute path पर set करना होगा
- GitHub Actions CI में imhex-download-sdk action के माध्यम से SDK को अपने-आप download किया जा सकता है
- plugin शुरू करने के लिए ImHex Plugin Template उपलब्ध है
- license अधिकांशतः GPLv2-only है
/lib/libimhexLGPLv2.1 है/plugins/uiLGPLv2.1 है- यह अपवाद proprietary plugin development की अनुमति देने के लिए है
- code signing policy के अनुसार, जब तक उपयोगकर्ता स्पष्ट रूप से अनुरोध न करे या installer/operator ऐसा न माँगे, तब तक यह अन्य network systems को जानकारी नहीं भेजता
1 टिप्पणियां
Hacker News की राय
ImHex अब तक इस्तेमाल किए गए hex editors में सबसे अच्छा लगा
इसके कई कारण हैं; दूसरे editors में इनमें से कुछ चीज़ें होती हैं, लेकिन सब एक साथ मिलना दुर्लभ है। यह file templates के ज़रिए ज्ञात file formats के sections को अपने-आप highlight करता है, चुने गए bytes को ज़्यादातर आम data types के रूप में एक साथ interpret करके दिखाता है, और बड़ी files संभालते समय दूसरे editors से कहीं तेज़ है
कमी यह है कि imgui UI में कभी-कभी bugs होते हैं, लेकिन इसने HexFiend या hexa जैसे दूसरे viewers की जगह ले ली है
सोच रहा हूँ कि क्या यह editor ASCII bytes को CP437 glyphs के रूप में दिखा सकता है
DOS पर binary files को इसी तरह पढ़ते हुए बड़ा हुआ, इसलिए उन hexadecimal values की तुलना में glyphs को बहुत तेज़ पढ़ सकता हूँ। उल्टा, non-printable characters को dots के रूप में दिखाने से ज़्यादा जानकारी नहीं मिलती
सूची में CP437 नहीं दिखा, लेकिन encoding file format सरल है, इसलिए mapping आसानी से बनाई जा सकती है
https://github.com/WerWolv/ImHex-Patterns/tree/master/encodi...
साथ ही कुछ characters ऐसे भी हैं जिनमें यह अस्पष्ट रहता है कि वे German sharp S हैं या beta
ImHex आज़माया, लेकिन जिन ज़्यादातर कामों के लिए मुझे चाहिए था, उनके लिए यह बहुत जटिल लगा
macOS पर मुझे अब भी Hex Fiend पसंद है। यह सरल और तेज़ है, और मेरा काम कर देता है। Windows पर अभी तक कोई perfect “simple” hex editor नहीं मिला
macOS पर Hex Fiend इस्तेमाल करता हूँ, लेकिन समझ नहीं आता कि window चौड़ी करने पर यह lines को फिर से flow क्यों कर देता है। visual distraction कम करने के लिए maximize करने पर भी line length 16 bytes या 32 bytes ही रखना चाहता हूँ, कोई अजीब size नहीं जो alignment बिगाड़ दे
ImHex भी थोड़ी देर आज़माया, और project का सच में सम्मान करता हूँ, लेकिन मेरे use case के लिए यह मक्खी मारने के लिए तोप चलाने जैसा लगा
फिलहाल मैं 010 Editor ही इस्तेमाल करता रहूँगा[1]। ज़िंदगी में इस्तेमाल किए गए hex editors में यह सबसे शानदार रहा है
इस नए project का GUI framework Dear ImGui मुझे बिल्कुल पसंद नहीं है। यह छोटे screens और बिना window manager वाले embedded systems के लिए ज़्यादा लगता है; full desktop environment में छोटे elements और UI integration की कमी के कारण काफी अटपटा है
[1] https://www.sweetscape.com/010editor/
लिखा है “ImHex requires a GPU with OpenGL 3.0 support in general”, लेकिन hex editor को OpenGL की ज़रूरत क्यों है? क्या इसी वजह से GPU भी चाहिए?
जानना चाहता हूँ कि OpenGL की कोई अच्छी वजह है, या बस fancy दिखने के लिए है
खासकर वह पुराना तरीका, जिसमें complex formatting pixel-level पर draw की जाती थी, साफ़ तौर पर धीमा है। उदाहरण के लिए यह लेख देखें
[1] https://www.sublimetext.com/blog/articles/hardware-accelerat...
हालांकि OpenGL requirement का मतलब ज़रूरी नहीं कि GPU ही हो। OpenGL के software implementations भी हैं, लेकिन performance आम तौर पर खास नहीं होती। साथ ही आजकल कई platforms मानकर चलते हैं कि किसी न किसी रूप में GPU मौजूद है। बिना GPU के GUI tool चाहिए हो, ऐसे cases दुर्लभ हैं, और ऐसे niche environment में hex editor और tools locally चलाने की संभावना भी कम है
सच में शानदार project है। Philips smartwatch के ROM से छेड़छाड़ करते हुए काफी मज़ा आया
इसमें Rust जैसा दिखने वाला built-in DSL है, और memory management नहीं है, इसलिए बहुत हल्का है, लेकिन इसके ज़रिए binary stream के structured data को visualize और extract किया जा सकता है। सच में मज़ेदार और बढ़िया
बिना code के simple calculations बनाने वाला visual editor भी है, लेकिन जब इस्तेमाल किया तो बहुत polished नहीं लगा। अजीब बात है कि DSL में code लिखना ज़्यादा intuitive और आसान लगा
संबंधित लेख:
ImHex – A Hex Editor - https://news.ycombinator.com/item?id=32287902 - जुलाई 2022, 70 comments
ImHex – A Hex Editor - https://news.ycombinator.com/item?id=25353965 - दिसंबर 2020, 78 comments
काफी अच्छा दिखता है। project के तौर पर hex editor develop करना अच्छा idea होगा क्या?
simple version इतना मुश्किल नहीं लगता, लेकिन executable images से लेकर Doom WAD और proprietary file formats तक तरह-तरह के file formats parse करने में practice की काफी गुंजाइश है। reverse engineering में मदद करने वाले tools बनाने की भी काफी जगह दिखती है
उसमें कहा गया था कि file handling, GUI, text layout, memory management वगैरह कई चीज़ों की practice एक साथ हो जाती है
अच्छा लग रहा है। आम तौर पर wildcard search की वजह से 010 Editor इस्तेमाल करता रहा हूँ, लेकिन ImHex भी यह feature और उससे ज़्यादा कर देता है, इसलिए मन बदल रहा है। थोड़ा और test करूँगा
इस तरफ़ की computer culture मुझे सच में पसंद है। reverse engineering, kernel modules लिखना, चीज़ें कैसे काम करती हैं यह समझना और उनसे ऐसे काम करवाना जिनके लिए वे originally design नहीं की गई थीं—सब आकर्षक है
हालांकि इसे कानूनी तौर पर करने के रास्ते बहुत ज़्यादा नहीं हैं, और इसमें बहुत समय और साथियों की मदद चाहिए
hobby के तौर पर, मेरे देश में अपनी ownership वाली चीज़ों को अपने system पर चलाने के उद्देश्य से reverse engineering साफ़ तौर पर legal है। जैसे Windows XP game को Windows 10 पर चलने लायक fix करना। यह exception काफी व्यापक है, इसलिए “legal होना चाहिए” जैसे ज़्यादातर मामलों में reverse engineering संभव हो जाती है
अपने real name से जुड़ा न होने वाला pseudonym इस्तेमाल करके publish करें, और DMCA takedown requests को ignore करने वाली dedicated communities इस्तेमाल करें। अगर इससे पैसे कमाने का इरादा नहीं है, तो worst case में target आपके काम को notice करेगा और अगले release में vmprotect लगा देगा
समझ आया कि fixed-length records हैं, और title के तुरंत बाद के 2 bytes app में दिखने वाले record number की hexadecimal value जैसे लगे। checkbox click करने पर एक byte 0x00 से 0x01 में बदल गया, और पर्याप्त experiments के बाद पूरी structure को code के structs में map करके ऐसी reports बना पाया जिन्हें original app support नहीं करता था
इसमें कुछ illegal नहीं था। vendor चाहता होगा कि हम report creation के लिए भुगतान करें, लेकिन legally रोक नहीं थी
कुछ बनाने या सीखने का मतलब यह नहीं कि उसे broadcast करते हुए बताना ज़रूरी है। सीखना अपने-आप में reward हो सकता है