4 poin oleh GN⁺ 2024-06-30 | 1 komentar | Bagikan ke WhatsApp
  • 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 -NoGPU bisa 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/libimhex dan /plugins/ui disediakan dengan LGPLv2.1 sehingga memungkinkan pengembangan plugin proprietary

Peran dasar yang disediakan ImHex

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:

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 -NoGPU menggunakan 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
  • 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 build
    • cd build
    • DESTDIR=install ninja install
    • Path SDK akan menjadi install/usr/local/share/imhex/sdk, dan IMHEX_SDK_PATH harus 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/libimhex menggunakan LGPLv2.1
    • /plugins/ui menggunakan 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

 
GN⁺ 2024-06-30
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

    • 010 Editor juga memenuhi ketiganya. Namun berbeda dari 010 Editor, ImHex tidak mengharuskan membayar 150 dolar, dan karena bebas serta open source, fitur yang dibutuhkan lebih mudah dipatch sendiri
  • 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

    • Di pengaturan, Anda bisa mengunduh aset tambahan dan menafsirkan data dalam berbagai format encoding
      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...
    • Masalah CP437 adalah FF, 00, 20 semuanya berupa spasi kosong sehingga terlihat sama
      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

    • HxD di Windows terasa hampir seperti puncak editor hex, dan menurut saya tidak ada padanan sungguhan di macOS atau Linux. Sayangnya, saya hampir tidak pernah memakai Windows
      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
    • Satu suara untuk HexFiend. Format templatenya mudah diperluas, jadi saya sudah memakainya untuk menganalisis berbagai format file
      Saya juga sempat mencoba ImHex dan sangat menghormati proyeknya, tetapi untuk kebutuhan saya rasanya seperti memakai meriam untuk membunuh lalat
    • Penasaran apakah Anda pernah mencoba Hiew
  • 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/

    • Rendering font yang sepertinya tanpa antialiasing saja sudah membuatnya menyakitkan untuk dipakai
  • 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

    • Pada resolusi layar masa kini, editor apa pun membutuhkan rendering hardware agar mulus dan cepat
      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...
    • Karena UI-nya dibuat dengan Imgui. Prefiks Im pada namanya juga berasal dari sana, dan itu adalah framework UI untuk program grafika komputer
      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
    • Menurut README proyek, jika tidak ada GPU, tersedia rilis software rendering untuk Windows dan macOS
    • Kemungkinan mereka hanya memilih renderer OpenGL untuk imgui
  • 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

    • Jadi rasanya mirip protocol dissector di Wireshark ya
  • 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

    • Saya ingat pernah membaca tulisan yang menyarankan implementasi editor hex sebagai proyek pertama saat belajar bahasa baru
      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

    • Saya bekerja sebagai reverse engineer, dan ada banyak rekan di seluruh dunia yang melakukan hal yang sama. Bidang kerja utama kami adalah analisis malware
      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”
    • Sebuah proyek tidak harus “legal” untuk bisa dinikmati
      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
    • Reverse engineering format file benar-benar menyenangkan. Saya pernah bekerja di tempat yang memakai aplikasi manajemen kerja proprietari, dan suatu hari karena bosan saya melihat file datanya dengan editor hex lalu menemukan pola bahwa judul record di aplikasi muncul di dalam file dengan jarak persis X byte
      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
    • Jika tidak dipublikasikan, pada umumnya Anda bisa melakukan apa saja
      Hanya karena Anda membuat atau mempelajari sesuatu, bukan berarti Anda harus mengumumkannya seperti siaran. Pembelajaran itu sendiri bisa menjadi imbalannya