ImHex, editor heks untuk reverse engineer
(github.com/WerWolv)- ImHex adalah editor heks untuk reverse engineer, programmer, dan mereka yang bekerja sampai larut malam, yang menggabungkan fungsi analisis, modifikasi, dan visualisasi isi file dalam satu alat
- Fitur intinya adalah bahasa pola mirip C untuk mendefinisikan struktur dan tipe data agar isi file bisa diparse dan di-highlight, serta mendukung pemuatan otomatis berdasarkan tipe MIME dan nilai magic
- Dapat membuka berbagai sumber data seperti file lokal, raw disk, GDB Server, paket UDP, memori proses, dan file jarak jauh via SSH/SFTP, serta menyertakan disassembler berbasis Capstone dan pemindaian rule YARA
- Syarat penggunaan dasarnya adalah GPU dengan OpenGL 3.0 atau lebih tinggi, dan rilis software rendering
-NoGPUbisa digunakan tanpa GPU tetapi bisa jauh lebih lambat dibanding versi dengan akselerasi GPU - Plugin dikembangkan melalui
libimhex, ImHex API, dan Content Registry; sebagian besar berlisensi GPLv2-only, tetapi/lib/libimhexdan/plugins/uidisediakan dengan LGPLv2.1 sehingga memungkinkan pengembangan plugin proprietary
Peran dasar yang disediakan ImHex
- ImHex adalah editor heks untuk reverse engineer, programmer, dan siapa pun yang menginginkan alat yang tidak terlalu melelahkan mata bahkan saat bekerja pukul 3 pagi
- Tersedia unduhan rilis terbaru, nightly pre-release, versi web, dan dokumentasi secara terpisah
Tampilan heks dan pengeditan data
- Hex view mendukung byte patching, patch management, dan undo/redo tanpa batas
- Penyalinan byte dapat dilakukan dalam berbagai format
- bytes
- hex string
- array C, C++, C#, Rust, Python, Java, JavaScript
- tampilan heks ASCII-Art
- div HTML self-contained
- Fitur pencarian dan navigasi mencakup pencarian string/heks sederhana, serta goto berdasarkan awal, akhir, atau posisi kursor saat ini
- Highlight mendukung pengaturan aturan foreground, serta highlight background berdasarkan pola, hasil pencarian, dan bookmark
- Tampilan data mendukung berbagai tipe
- integer heksadesimal 8/16/32/64-bit
- integer desimal signed/unsigned 8/16/32/64-bit
- float 16/32/64-bit
- warna RGBA8, HexII, biner
- Encoding menangani ASCII dan encoding kustom, serta mendukung UTF-8, UTF-16, ShiftJIS, dan sebagian besar encoding Windows secara bawaan
- Menyediakan paged data view
Bahasa pola dan interpretasi struktur data
- Pattern Language adalah bahasa pemrograman kustom lengkap yang dikembangkan untuk ImHex
- Dengan sintaks mirip C, pengguna dapat mendefinisikan struktur dan tipe data, lalu menggunakannya untuk mem-parse dan me-highlight isi file
- Bahasa pola mendukung pemuatan otomatis berdasarkan tipe MIME dan nilai magic
- Elemen yang didukung meliputi arrays, pointers, structs, unions, enums, bitfields, namespaces, little/big endian, conditionals, dan lainnya
- Menyediakan error message, syntax highlighting, dan error marking
- Target visualisasi data mencakup images, audio, 3D models, coordinates, time stamps, dan lainnya
- Materi terkait:
- Pattern Language Source Code
- Pattern Language Documentation
- ImHex-Patterns: repositori untuk format patterns, libraries, magic, dan constant files
Inspeksi, prapemrosesan, dan pencarian data
- Data Inspector menafsirkan data ke berbagai tipe, termasuk endianness, decimal, hexadecimal, octal, dan bit inversion
- integer unsigned/signed: 8/16/24/32/48/64-bit
- float: 16/32/64-bit
- signed/unsigned LEB128
- karakter dan string ASCII, Wide, UTF-8
time32_t,time64_t, tanggal/waktu DOS- GUID, warna RGBA8, RGB65
- Melalui inspector, byte bisa disalin dan dimodifikasi, dan tipe data baru dapat ditambahkan dengan bahasa pola
- Node-based data pre-processor dapat memodifikasi, mendekripsi, atau mendekode data sebelum ditampilkan di editor heks
- dapat memodifikasi data tanpa menyentuh sumber aslinya
- mendukung penambahan node kustom
- Pencarian data dapat dilakukan pada seluruh file atau area yang dipilih
- ekstraksi string menyediakan opsi panjang minimum, set karakter, dan encoding
- sequence search mencari urutan byte atau karakter dan menyediakan opsi abaikan huruf besar/kecil
- mendukung regex search, binary pattern wildcard search, serta pencarian nilai/rentang numerik
- numeric search mencakup opsi ukuran, endianness, dan mengabaikan nilai unaligned
Sumber data dan fitur analisis
- ImHex dapat memuat data dari berbagai sumber data
- file lokal: mendukung pemuatan cepat dan efisien untuk file besar
- raw disks: memuat raw disk dan partisi
- GDB Server: mengakses RAM dari proses yang sedang berjalan atau embedded device
- Intel Hex, Motorola SREC
- data yang dienkode Base64
- paket UDP
- process memory: memeriksa seluruh address space dari proses yang sedang berjalan
- file jarak jauh via SSH/SFTP
- Analisis dan visualisasi data mencakup file parser berbasis file magic dan database tipe MIME
- Grafik dan statistik menyediakan distribusi tipe byte, entropy graph, entropy tertinggi/rata-rata, digram, dan layered distribution graph
- Terdapat fitur deteksi file terenkripsi/terkompresi
- Diffing memungkinkan perbandingan antar sumber data yang berbeda, dengan highlight perbedaan dan table view
Disassembly, YARA, dan hash
- Disassembler bawaan mendukung semua arsitektur yang didukung Capstone
- ARM32, ARM64, MIPS, x86 16/32/64-bit, PowerPC, SPARC, IBM SystemZ, xCORE, M68K, TMS320C64X, M680X, Ethereum, RISC-V, WebAssembly, MOS65XX, Berkeley Packet Filter
- Mendukung penulisan custom disassembler untuk arsitektur sendiri
- Dukungan YARA Rule memungkinkan pemindaian file dengan official yara rules, highlight hasil match di editor heks, lompat ke match, dan menerapkan banyak rule sekaligus
- Hashing dapat dilakukan pada area data tertentu maupun string arbitrer
- Hash yang didukung mencakup CRC8/16/32, MD5, SHA-1/SHA-224/SHA-256/SHA-384/SHA-512, Adler32, Murmur, SipHash, XXHash, Tiger, Blake2B, Blake2S, dan lainnya
UI, tema, impor/ekspor
- Tema menyediakan dark mode sebagai bawaan, dan light mode juga dapat digunakan
- Dengan theme file yang dapat dibagikan, warna dan gaya semua elemen UI bisa dikustomisasi, dan custom font juga didukung
- Antarmuka modern mendukung multiple workspaces, custom layouts, dan detachable windows
- Impor/ekspor mendukung Base64 files, patch IPS/IPS32, laporan Markdown, dan binary arrays untuk berbagai bahasa pemrograman
- Bookmark mendukung nama/warna kustom, highlight region di editor heks, jump, membuka isi bookmark di tab baru, dan penambahan komentar
- Content updater bawaan dapat mengunduh file dari database langsung dari dalam ImHex
- pattern files
- pattern language libraries
- magic files
- custom data processor nodes
- custom encodings
- custom themes
- Yara rules
Alat bantu dan onboarding
- Helpful tools mencakup demangler berbasis LLVM untuk Itanium, MSVC, Rust, dan D-Lang
- Alat lainnya meliputi ASCII table, regex replacer, evaluator ekspresi matematika, graphing calculator, hexadecimal color picker, base converter, byte swapper, kalkulator permission UNIX, dan pencari definisi istilah Wikipedia
- File utilities menyediakan file splitter, file combiner, dan file shredder
- Juga mencakup TCP Client/Server, HTTP Requests, IEEE754 Float visualizer, dan kalkulator algoritma Euclidean
- Fitur yang membantu memulai mencakup dukungan multibahasa, simplified mode untuk pemula, dokumentasi yang ekstensif, example files dari database, achievements, dan interactive tutorials
Persyaratan sistem dan kondisi build
- GPU umumnya memerlukan OpenGL 3.0 atau lebih tinggi
- Rilis dengan suffix
-NoGPUmenggunakan software rendering sehingga dapat berjalan tanpa GPU, tetapi bisa jauh lebih lambat daripada versi dengan akselerasi GPU - Jika memungkinkan, disarankan memakai dedicated GPU daripada integrated GPU
- Beberapa driver Intel HD GPU di Windows diketahui dapat menimbulkan graphical artifacts
- Rilis dengan suffix
- Dukungan OS:
- Windows 7 atau lebih baru, direkomendasikan Windows 10/11
- macOS 15 Sequoia atau lebih baru
- Versi lebih rendah juga bisa berjalan jika dikompilasi sendiri, tetapi karena tidak ada CI runner macOS 15 ke bawah di GitHub, release binary tidak akan berjalan
- Build macOS tidak dalam keadaan signed, sehingga perlu diizinkan secara manual di pengaturan Security & Privacy
- Linux memiliki rilis resmi untuk Ubuntu/Debian, Fedora, RHEL/AlmaLinux, dan Arch Linux; distro lain didukung melalui AppImage, Flatpak, dan Snap
- Diuji pada FreeBSD 14.3
- CPU secara resmi mendukung x86, AMD64, dan ARM64, dan seharusnya dapat berjalan pada CPU Little Endian
- RAM yang dibutuhkan sekitar 50MiB, dan analisis yang lebih kompleks memerlukan memori tambahan
- Ruang penyimpanan yang dibutuhkan sekitar 100MiB
- Untuk kompilasi dibutuhkan GCC atau Clang yang mendukung C++23 atau lebih baru
- Rilis Windows dan Linux dibangun dengan GCC terbaru yang tersedia
- Rilis macOS dibangun dengan LLVM Clang terbaru yang tersedia
- MSVC dan AppleClang tidak didukung
- Dokumentasi instalasi dan kompilasi:
Pengembangan plugin dan lisensi
- Pengembangan plugin dapat dimulai dari template project, dan dapat mengakses
libimhex, ImHex API, serta Content Registry untuk berinteraksi dengan ImHex atau menambahkan content baru - Untuk membangun plugin dibutuhkan SDK
- Prosedur build SDK lokal:
cmake -G Ninja -DIMHEX_BUNDLE_PLUGIN_SDK=ON -B buildcd buildDESTDIR=install ninja install- Path SDK akan menjadi
install/usr/local/share/imhex/sdk, danIMHEX_SDK_PATHharus disetel ke absolute path tersebut
- Di GitHub Actions CI, SDK dapat diunduh otomatis dengan action imhex-download-sdk
- ImHex Plugin Template disediakan sebagai titik awal plugin
- Lisensinya sebagian besar adalah GPLv2-only
/lib/libimhexmenggunakan LGPLv2.1/plugins/uimenggunakan LGPLv2.1- Pengecualian ini dimaksudkan untuk memungkinkan pengembangan plugin proprietary
- Kebijakan code signing menyatakan bahwa informasi tidak akan dikirim ke sistem jaringan lain kecuali pengguna secara eksplisit memintanya atau pemasang/operator memintanya
1 komentar
Opini Hacker News
ImHex adalah editor hex terbaik yang pernah saya pakai sejauh ini
Ada beberapa alasan; sebagian ada di editor lain, tetapi jarang yang punya semuanya sekaligus. Ia otomatis menyorot bagian-bagian format file yang dikenal lewat file template, menafsirkan byte yang dipilih secara bersamaan sebagai sebagian besar tipe data umum, dan jauh lebih cepat daripada editor lain saat menangani file besar
Kekurangannya, UI imgui kadang buggy, tetapi ini akhirnya menggantikan viewer lain seperti HexFiend atau hexa
Saya penasaran apakah editor ini bisa menampilkan byte ASCII sebagai glyph CP437
Saya tumbuh dengan membaca file biner di DOS seperti itu, jadi saya bisa membaca glyph jauh lebih cepat daripada nilai heksadesimalnya. Sebaliknya, menampilkan karakter yang tidak bisa dicetak sebagai titik tidak banyak memberi informasi
Saya tidak melihat CP437 di daftarnya, tetapi format file encoding tampaknya sederhana, jadi mapping-nya seharusnya mudah dibuat
https://github.com/WerWolv/ImHex-Patterns/tree/master/encodi...
Ada juga karakter yang ambigu, apakah itu sharp S bahasa Jerman atau beta
Saya pernah mencoba ImHex, tetapi terlalu rumit untuk sebagian besar pekerjaan yang ingin saya lakukan
Di macOS, saya masih suka Hex Fiend. Sederhana, cepat, dan melakukan yang saya butuhkan. Di Windows, saya masih belum menemukan editor hex “sederhana” yang sempurna
Di macOS saya memakai Hex Fiend, tetapi saya tidak mengerti mengapa saat jendelanya diperlebar, barisnya ikut di-flow ulang. Saya ingin panjang baris tetap 16 byte atau 32 byte meskipun dimaksimalkan untuk mengurangi gangguan visual, bukan ukuran aneh yang merusak alignment
Saya juga sempat mencoba ImHex dan sangat menghormati proyeknya, tetapi untuk kebutuhan saya rasanya seperti memakai meriam untuk membunuh lalat
Untuk sementara saya akan tetap memakai 010 Editor[1]. Itu editor hex terbaik yang pernah saya pakai sepanjang hidup
Saya sama sekali tidak suka Dear ImGui, framework GUI yang dipakai proyek baru ini. Rasanya lebih cocok untuk sistem embedded dengan layar kecil dan tanpa window manager, bukan untuk lingkungan desktop penuh; elemen-elemennya kecil dan tidak ada integrasi UI sehingga cukup canggung
[1] https://www.sweetscape.com/010editor/
Tertulis “ImHex requires a GPU with OpenGL 3.0 support in general”; mengapa editor hex membutuhkan OpenGL? Jadi perlu GPU juga?
Saya penasaran apakah ada alasan bagus membutuhkan OpenGL, atau sekadar supaya terlihat keren
Terutama pendekatan lama menggambar pemformatan kompleks piksel demi piksel terasa jelas lambat. Misalnya lihat tulisan ini
[1] https://www.sublimetext.com/blog/articles/hardware-accelerat...
Namun kebutuhan OpenGL tidak selalu berarti GPU. Ada juga implementasi software untuk OpenGL, tetapi performanya umumnya kurang bagus. Selain itu, banyak platform modern mengasumsikan adanya GPU dalam bentuk tertentu. Kasus membutuhkan tool GUI tanpa GPU jarang terjadi, dan di lingkungan niche seperti itu kemungkinan menjalankan editor hex dan tool secara lokal juga kecil
Ini proyek yang benar-benar hebat. Saya cukup bersenang-senang mengutak-atik ROM jam tangan pintar Philips
Ada DSL bawaan yang terlihat seperti Rust, dan karena tidak ada manajemen memori, ia sangat ringan, tetapi dengannya Anda bisa memvisualisasikan dan mengekstrak data terstruktur dari stream biner. Benar-benar menyenangkan dan keren
Ada juga editor visual untuk membuat kalkulasi sederhana tanpa kode, tetapi saat saya coba rasanya belum terlalu matang. Anehnya, menulis kode dengan DSL justru lebih intuitif dan mudah
Tulisan terkait:
ImHex – A Hex Editor - https://news.ycombinator.com/item?id=32287902 - Juli 2022, 70 komentar
ImHex – A Hex Editor - https://news.ycombinator.com/item?id=25353965 - Desember 2020, 78 komentar
Kelihatannya cukup bagus. Apakah mengembangkan editor hex sebagai proyek adalah ide yang bagus?
Versi sederhananya tampak tidak terlalu sulit, tetapi kalau harus mem-parse segala macam format file, dari image executable hingga Doom WAD dan format file proprietari, ada banyak ruang untuk berlatih. Tampaknya juga ada banyak ruang untuk membuat tool yang membantu reverse engineering
Katanya bisa melatih banyak hal sekaligus, seperti pemrosesan file, GUI, tata letak teks, manajemen memori, dan sebagainya
Kelihatannya bagus. Biasanya saya tetap memakai 010 Editor karena pencarian wildcard, tetapi ImHex juga melakukan itu dan lebih banyak lagi, jadi saya mulai tertarik. Saya akan mengujinya lebih lanjut
Saya sangat suka budaya komputer di sisi ini. Reverse engineering, menulis modul kernel, memahami cara sesuatu bekerja dan membuatnya melakukan hal yang tidak dirancang sejak awal—semuanya menarik
Namun jalur untuk melakukannya secara legal tidak banyak, dan butuh waktu luar biasa serta bantuan rekan-rekan
Sebagai hobi, di negara tempat saya tinggal, reverse engineering atas sesuatu yang Anda miliki untuk membuatnya berjalan di sistem Anda sendiri secara eksplisit legal. Misalnya memperbaiki game Windows XP agar berjalan di Windows 10. Pengecualian ini cukup luas sehingga reverse engineering menjadi mungkin dalam sebagian besar kasus yang “seharusnya legal”
Cukup publikasikan dengan pseudonim yang tidak terhubung ke nama asli, dan gunakan komunitas khusus yang mengabaikan permintaan takedown DMCA. Jika Anda tidak berniat menghasilkan uang dari itu, skenario terburuknya mungkin target menyadari karya Anda lalu menerapkan vmprotect pada rilis berikutnya
Saya sadar itu adalah record dengan panjang tetap, dan 2 byte tepat setelah judul tampak seperti nilai heksadesimal dari nomor record yang ditampilkan di aplikasi. Saat saya mengklik checkbox, satu byte berubah dari 0x00 menjadi 0x01, dan setelah cukup bereksperimen, saya bisa memetakan seluruh strukturnya ke struct dalam kode lalu membuat laporan yang tidak didukung aplikasi aslinya
Tidak ada yang ilegal di sana. Vendor mungkin ingin kami membayar biaya pembuatan laporan, tetapi secara hukum tidak ada hambatan
Hanya karena Anda membuat atau mempelajari sesuatu, bukan berarti Anda harus mengumumkannya seperti siaran. Pembelajaran itu sendiri bisa menjadi imbalannya