4 puan yazan GN⁺ 2024-06-30 | 1 yorum | WhatsApp'ta paylaş
  • ImHex, tersine mühendisler, programcılar ve gece geç saatlerde çalışanlar için tasarlanmış bir hex editördür; dosya içeriğini analiz etme, düzenleme ve görselleştirme işlevlerini tek araçta birleştirir
  • Temel özelliği, C benzeri pattern dili ile yapı ve veri tiplerini tanımlayarak dosya içeriğini ayrıştırıp vurgulaması ve MIME type ile magic değerlerine dayalı otomatik yüklemeyi desteklemesidir
  • Yerel dosyalar, raw disk, GDB Server, UDP paketleri, süreç belleği, SSH/SFTP uzak dosyaları gibi çeşitli veri kaynaklarını açabilir; ayrıca Capstone tabanlı bir disassembler ve YARA rule taraması da içerir
  • Kullanım koşulu olarak varsayılan gereksinim OpenGL 3.0 veya üzeri GPU’dur; -NoGPU yazılım render’lı sürüm GPU olmadan kullanılabilir, ancak GPU hızlandırmalı sürümden çok daha yavaş olabilir
  • Eklentiler libimhex, ImHex API ve Content Registry üzerinden geliştirilir; çoğu bileşen GPLv2-only olsa da /lib/libimhex ve /plugins/ui LGPLv2.1 ile sunulur ve proprietary eklenti geliştirmeye izin verir

ImHex’in sunduğu temel rol

Hex görünümü ve veri düzenleme

  • Hex görünümü, byte patching, patch management ve sınırsız undo/redo desteği sunar
  • Byte kopyalama birden çok biçimde yapılabilir
    • bytes
    • hex string
    • C, C++, C#, Rust, Python, Java, JavaScript dizileri
    • ASCII-Art hex view
    • HTML self-contained div
  • Arama ve gitme işlevleri; basit string/hex search ile başlangıç, son ve mevcut imleç konumuna göre goto seçeneklerini içerir
  • Vurgulama; ön plan kuralları tanımlama ile pattern, arama sonuçları ve bookmark tabanlı arka plan vurgulamayı destekler
  • Veri gösterimi birçok tipi destekler
    • 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 olarak ASCII ve kullanıcı tanımlı encoding’leri işler; UTF-8, UTF-16, ShiftJIS ve çoğu Windows encoding’i varsayılan olarak destekler
  • paged data view sunar

Pattern dili ve veri yapısı yorumlama

  • Pattern Language, ImHex için geliştirilmiş tamamen özelleştirilebilir bir programlama dilidir
  • C’ye benzer söz dizimiyle yapı ve veri tipleri tanımlanabilir; bunlar kullanılarak dosya içeriği ayrıştırılabilir ve vurgulanabilir
  • Pattern dili, MIME type ve magic değerlerine dayalı otomatik yüklemeyi destekler
  • Desteklenen öğeler arasında arrays, pointers, structs, unions, enums, bitfields, namespaces, little/big endian ve conditionals bulunur
  • Hata mesajları, syntax highlighting ve error marking sunar
  • Veri görselleştirme hedefleri arasında images, audio, 3D models, coordinates ve time stamps yer alır
  • İlgili kaynaklar:

Veri inceleme, ön işleme ve arama

  • Data Inspector, veriyi endianness, decimal, hexadecimal, octal ve bit inversion dahil olmak üzere çeşitli tiplerde yorumlar
    • unsigned/signed integer: 8/16/24/32/48/64 bit
    • float: 16/32/64 bit
    • signed/unsigned LEB128
    • ASCII, Wide, UTF-8 karakterler ve dizgiler
    • time32_t, time64_t, DOS date/time
    • GUID, RGBA8, RGB65 colors
  • Inspector üzerinden byte kopyalama ve düzenleme yapılabilir; pattern diliyle yeni veri tipleri eklenebilir
  • node-based data pre-processor, veri hex editörde gösterilmeden önce değiştirme, şifre çözme ve decode etme işlemleri yapabilir
    • underlying source’a dokunmadan veriyi değiştirmek mümkündür
    • custom node ekleme desteği vardır
  • Veri arama tüm dosyada veya seçili bölgede yapılabilir
    • string çıkarma için minimum uzunluk, karakter kümesi ve encoding seçenekleri sunulur
    • sequence search, byte veya karakter dizilerini bulur ve büyük/küçük harf duyarsız seçeneği sunar
    • regex search, binary pattern wildcard search ve numeric value/range search desteklenir
    • numeric search; size, endianness ve hizasız değerleri yok sayma seçeneklerini içerir

Veri kaynakları ve analiz işlevleri

  • ImHex, çeşitli veri kaynaklarından veri yükleyebilir
    • Yerel dosyalar: büyük dosyalar için hızlı ve verimli yükleme desteği
    • raw disks: raw disk ve partition yükleme
    • GDB Server: çalışan süreçlerin veya embedded device RAM’ine erişim
    • Intel Hex, Motorola SREC
    • Base64 encoded data
    • UDP packets
    • process memory: çalışan bir sürecin tüm address space’ini inceleme
    • SSH/SFTP uzak dosyaları
  • Veri analizi ve görselleştirme, file magic tabanlı file parser ve MIME type database içerir
  • Grafikler ve istatistikler; byte type distribution, entropy graph, en yüksek/ortalama entropy, digram ve layered distribution graph sunar
  • encrypted/compressed file detection özelliği vardır
  • diffing, farklı veri kaynaklarını karşılaştırır; fark vurgulama ve table view sunar

Disassembly, YARA ve hash

  • Dahili disassembler, Capstone tarafından desteklenen tüm mimarileri destekler
    • ARM32, ARM64, MIPS, x86 16/32/64-bit, PowerPC, SPARC, IBM SystemZ, xCORE, M68K, TMS320C64X, M680X, Ethereum, RISC-V, WebAssembly, MOS65XX, Berkeley Packet Filter
  • Kendi mimariniz için custom disassembler yazımı da desteklenir
  • YARA Rule desteği; dosyaları official yara rules ile tarayabilir, eşleşmeleri hex editörde vurgulayabilir, eşleşmeye atlayabilir ve birden fazla rule’ü aynı anda uygulayabilir
  • Hash hesaplama, belirli veri bölgeleri ve rastgele dizgiler üzerinde yapılabilir
  • Desteklenen hash’ler arasında CRC8/16/32, MD5, SHA-1/SHA-224/SHA-256/SHA-384/SHA-512, Adler32, Murmur, SipHash, XXHash, Tiger, Blake2B ve Blake2S bulunur

Arayüz, temalar, içe/dışa aktarma

  • Temalar, varsayılan olarak dark mode sunar; light mode da kullanılabilir
  • Paylaşılabilir theme file ile tüm UI öğelerinin renkleri ve stilleri özelleştirilebilir; custom font desteği vardır
  • Modern arayüz; multiple workspaces, custom layouts ve detachable windows destekler
  • Import/export; Base64 files, IPS/IPS32 patches, Markdown reports ve çeşitli programlama dilleri için binary arrays destekler
  • Bookmarks; custom name/color, hex editör içinde bölge vurgulama, atlama, bookmark içeriğini yeni sekmede açma ve comment ekleme desteği sunar
  • Dahili content updater, veritabanındaki dosyaları ImHex içinden indirebilir
    • pattern files
    • pattern language libraries
    • magic files
    • custom data processor nodes
    • custom encodings
    • custom themes
    • Yara rules

Araçlar ve başlangıç desteği

  • Helpful tools arasında LLVM tabanlı Itanium, MSVC, Rust ve D-Lang demangler bulunur
  • Diğer araçlar arasında ASCII table, regex replacer, mathematical expression evaluator, graphing calculator, hexadecimal color picker, base converter, byte swapper, UNIX permissions calculator ve Wikipedia term definition finder yer alır
  • File utilities olarak file splitter, file combiner ve file shredder sunulur
  • TCP Client/Server, HTTP Requests, IEEE754 Float visualizer ve Euclidean algorithm calculator da dahildir
  • Başlangıcı kolaylaştıran özellikler arasında çoklu dil desteği, yeni başlayanlar için simplified mode, kapsamlı dokümantasyon, veritabanındaki example files, achievements ve interactive tutorials bulunur

Sistem gereksinimleri ve derleme koşulları

  • GPU için genel gereksinim OpenGL 3.0 veya üzeridir
    • -NoGPU suffix’li sürüm software rendered olduğu için GPU olmadan çalışabilir, ancak GPU accelerated sürümden çok daha yavaş olabilir
    • Mümkünse integrated GPU yerine dedicated GPU kullanılması önerilir
    • Windows’taki bazı Intel HD GPU driver’larının graphical artifacts oluşturduğu bilinmektedir
  • OS desteği:
    • Windows 7 ve üzeri, Windows 10/11 önerilir
    • macOS 15 Sequoia ve üzeri
      • Daha düşük sürümler elle derlenirse çalışabilir, ancak GitHub’da macOS 15 altı için CI runner bulunmadığından release binary çalışmaz
      • macOS build signed değildir; bu nedenle Security & Privacy ayarlarından manuel izin verilmesi gerekir
    • Linux için Ubuntu/Debian, Fedora, RHEL/AlmaLinux ve Arch Linux resmi sürümleri vardır; diğer distro’lar AppImage, Flatpak ve Snap ile desteklenir
    • FreeBSD 14.3 üzerinde test edilmiştir
  • CPU olarak x86, AMD64 ve ARM64 resmen desteklenir; Little Endian bir CPU ise çalışması gerekir
  • Yaklaşık 50MiB RAM gerekir; daha karmaşık analizler için daha fazla bellek gerekebilir
  • Yaklaşık 100MiB depolama alanı gerekir
  • Derleme için C++23 veya üzerini destekleyen GCC ya da Clang gerekir
    • Windows ve Linux sürümleri mevcut en güncel GCC ile derlenir
    • macOS sürümleri mevcut en güncel LLVM Clang ile derlenir
    • MSVC ve AppleClang desteklenmez
  • Kurulum ve derleme belgeleri:

Eklenti geliştirme ve lisans

  • Eklenti geliştirme, bir template project ile başlayabilir; libimhex, ImHex API ve Content Registry’ye erişerek ImHex ile etkileşim kurulabilir veya yeni content eklenebilir
  • Eklenti derlemek için SDK gereklidir
  • Yerel SDK derleme adımları:
    • cmake -G Ninja -DIMHEX_BUNDLE_PLUGIN_SDK=ON -B build
    • cd build
    • DESTDIR=install ninja install
    • SDK yolu install/usr/local/share/imhex/sdk olur ve IMHEX_SDK_PATH bunun absolute path değeri olarak ayarlanmalıdır
  • GitHub Actions CI içinde imhex-download-sdk action’ı ile SDK otomatik indirilebilir
  • Eklentiye başlamak için ImHex Plugin Template sunulur
  • Lisansın büyük kısmı GPLv2-only’dir
    • /lib/libimhex LGPLv2.1’dir
    • /plugins/ui LGPLv2.1’dir
    • Bu istisna, proprietary plugin geliştirmeye izin vermek içindir
  • Code signing policy, kullanıcı açıkça istemedikçe veya kurulum/işletim yöneticisi talep etmedikçe başka ağ sistemlerine bilgi gönderilmediğini belirtir

1 yorum

 
GN⁺ 2024-06-30
Hacker News yorumları
  • ImHex, şimdiye kadar kullandığım en iyi hex editördü
    Bunun birkaç nedeni var; başka editörlerde bunların bazıları var ama hepsini bir arada sunan nadir. Dosya şablonlarıyla bilinen dosya biçimlerinin bölümlerini otomatik vurguluyor, seçilen baytları yaygın veri türlerinin çoğu olarak aynı anda yorumlayıp gösteriyor ve büyük dosyalarla çalışırken diğer editörlerden çok daha hızlı
    Eksisi, imgui UI'ın ara sıra hatalı olması; yine de HexFiend veya hexa gibi diğer görüntüleyicilerin yerini aldı

    • 010 Editor da bu üç şartın hepsini karşılıyor. Buna karşılık ImHex, 010 Editor'ın aksine 150 dolar ödemenizi gerektirmiyor ve özgür açık kaynak olduğu için ihtiyaç duyduğunuz özellikleri kendiniz yamamak daha kolay
  • Bu editörün ASCII baytlarını CP437 glifleri olarak gösterebilip gösteremediğini merak ediyorum
    DOS'ta ikili dosyaları böyle okuyarak büyüdüğüm için glifleri ilgili onaltılık değerlerden çok daha hızlı okuyabiliyorum. Buna karşılık yazdırılamayan karakterleri nokta olarak göstermek pek bir şey anlatmıyor

    • Ayarlardan ek varlıkları indirip verileri birden fazla kodlama biçimiyle yorumlayabiliyorsunuz
      Listede CP437 görünmüyor ama kodlama dosyası biçimi basit olduğu için eşlemeyi kolayca oluşturmak mümkün gibi
      https://github.com/WerWolv/ImHex-Patterns/tree/master/encodi...
    • CP437'nin sorunu, FF, 00, 20 değerlerinin hepsinin boşluk olması ve aynı görünmesi
      Ayrıca Almanca sharp S mi beta mı olduğu belirsiz karakterler de var
  • ImHex'i denedim ama yapmaya çalıştığım çoğu iş için fazla karmaşıktı
    macOS'te hâlâ Hex Fiend'i seviyorum. Basit, hızlı ve istediğim işi yapıyor. Windows'ta ise hâlâ mükemmel bir “basit” hex editör bulamadım

    • Windows'taki HxD bence hex editörlerin zirvesine yakın ve macOS ya da Linux'ta gerçek bir karşılığı yok. Üzücü olan, Windows'u neredeyse hiç kullanmıyor olmam
      macOS'te Hex Fiend kullanıyorum ama pencereyi genişletince satırları neden yeniden akıttığını anlamıyorum. Görsel dağınıklığı azaltmak için maksimize etsem bile satır uzunluğunun 16 bayt ya da 32 bayt olarak kalmasını istiyorum; hizalamayı bozan tuhaf boyutlar istemiyorum
    • HexFiend'e bir oy. Şablon biçimi genişletmesi kolay olduğu için birçok dosya biçimini analiz etmekte kullandım
      ImHex'i de kısa süre denedim ve projenin kendisine gerçekten saygı duyuyorum ama benim kullanımım için sinek öldürmekte top kullanmak gibiydi
    • Hiew'i denediniz mi merak ediyorum
  • Bir süre daha 010 Editor kullanmaya devam etmeyi düşünüyorum[1]. Hayatım boyunca kullandığım en iyi hex editördü
    Bu yeni projenin kullandığı GUI framework'ü Dear ImGui'den hiç hoşlanmıyorum. Küçük ekranlar ve pencere yöneticisi olmayan gömülü sistemler için daha uygun; tam teşekküllü bir masaüstü ortamında küçük öğeler ve UI entegrasyonunun olmaması yüzünden epey tuhaf duruyor
    [1] https://www.sweetscape.com/010editor/

    • Sadece font rendering'in antialiasing yokmuş gibi görünmesi bile kullanmayı zorlaştırıyor
  • “ImHex requires a GPU with OpenGL 3.0 support in general” deniyor; bir hex editör neden OpenGL'e ihtiyaç duyar? Bu yüzden GPU da mı gerekiyor?
    OpenGL'e ihtiyaç duymak için iyi bir neden var mı, yoksa sadece havalı görünmek için mi merak ediyorum

    • Günümüz ekran çözünürlüklerinde herhangi bir editörün akıcı ve hızlı olması için donanım hızlandırmalı rendering gerekiyor
      Özellikle karmaşık biçimlendirmeyi piksel piksel çizdiğimiz dönemlerin yöntemi belirgin şekilde yavaş. Örneğin şu yazıya bakılabilir
      [1] https://www.sublimetext.com/blog/articles/hardware-accelerat...
    • UI'ın Imgui ile yapılmış olmasından. İsimdeki Im öneki de buradan geliyor; bilgisayar grafiği programları için bir UI framework'ü
      Ancak OpenGL gereksinimi mutlaka GPU anlamına gelmez. OpenGL'in yazılımsal uygulamaları da var ama performansları genelde pek iyi değildir. Ayrıca günümüzde birçok platform, bir şekilde GPU olduğunu varsayıyor. GPU olmadan GUI aracı gereken durumlar nadir; böyle niş ortamlarda bir hex editör ve araçları yerelde çalıştırma olasılığı da düşük
    • Proje README'sine göre GPU yoksa Windows ve macOS için yazılımsal rendering sürümleri sunuluyor
    • Muhtemelen imgui için sadece OpenGL renderer'ını seçmişlerdir
  • Gerçekten harika bir proje. Philips akıllı saatinin ROM'uyla uğraşırken epey keyifli vakit geçirdim
    Rust'a benzeyen yerleşik bir DSL var; bellek yönetimi yok, bu yüzden çok hafif, ama bununla ikili akışlardaki yapılandırılmış verileri görselleştirip çıkarabiliyorsunuz. Gerçekten eğlenceli ve güzel
    Kod yazmadan basit hesaplamalar oluşturmak için görsel bir editör de var, ama denediğimde çok cilalı hissettirmedi. Tuhaf biçimde DSL ile kod yazmak daha sezgisel ve kolaydı

    • O zaman Wireshark'ın protokol dissector'larına benzer bir şey gibi duruyor
  • İlgili yazılar:
    ImHex – A Hex Editor - https://news.ycombinator.com/item?id=32287902 - Temmuz 2022, 70 yorum
    ImHex – A Hex Editor - https://news.ycombinator.com/item?id=25353965 - Aralık 2020, 78 yorum

  • Epey iyi görünüyor. Bir proje olarak hex editör geliştirmeyi denemek iyi bir fikir mi?
    Basit bir sürüm çok zor görünmüyor ama yürütülebilir dosya imajlarından Doom WAD'lerine ve tescilli dosya biçimlerine kadar her türlü dosya biçimini parse etmek için bolca pratik alanı var. Tersine mühendisliğe yardımcı araçlar yapmak için de çok fırsat var gibi

    • Yeni bir dil öğrenirken ilk proje olarak hex editör implementasyonu yaptığını anlatan bir yazı okuduğumu hatırlıyorum
      Dosya işleme, GUI, metin yerleşimi, bellek yönetimi gibi pek çok konuyu tek seferde çalışmaya yarayacağını söylüyordu
  • İyi görünüyor. Genelde wildcard arama yüzünden 010 Editor kullanmaya devam ediyordum; ImHex de bu özelliği ve daha fazlasını sunduğu için ona kayıyorum. Biraz daha test edeceğim

  • Bu bilgisayar kültürünü gerçekten seviyorum. Tersine mühendislik, kernel modülü yazmak, şeylerin nasıl çalıştığını anlamak ve onları başlangıçta tasarlanmadıkları işleri yapar hâle getirmek çok çekici
    Ancak bunu yasal olarak yapabileceğiniz çok fazla yol yok ve muazzam zaman ile meslektaş desteği gerektiriyor

    • Meslek olarak tersine mühendislik yapıyorum ve dünya genelinde aynı işi yapan birçok meslektaşım var. Ana çalışma alanım zararlı yazılım analizi
      Hobi olarak ise yaşadığım ülkede, sahip olduğunuz bir şeyi kendi sisteminizde çalışır hâle getirmek amacıyla tersine mühendislik yapmak açıkça yasal. Örneğin bir Windows XP oyununu Windows 10'da çalışacak şekilde düzeltmek gibi. Bu istisna oldukça geniş; “yasal olmalı gibi görünen” çoğu durumda tersine mühendisliği mümkün kılıyor
    • Eğlenmek için bir projenin mutlaka “yasal” olması gerekmez
      Gerçek adınızla bağlantılı olmayan bir takma adla paylaşın ve DMCA kaldırma taleplerini yok sayan özel toplulukları kullanın. Bundan para kazanma niyetiniz yoksa en kötü durumda hedef taraf çalışmanızı fark eder ve sonraki sürümde vmprotect uygular
    • Dosya biçimi tersine mühendisliği gerçekten eğlenceli. Tescilli bir iş yönetimi uygulaması kullanan bir yerde çalışmıştım; bir gün canım sıkılınca veri dosyasına hex editörle bakarken uygulamadaki kayıt başlıklarının dosya içinde tam olarak X bayt aralıklarla durduğu bir örüntü fark ettim
      Bunun sabit uzunluklu kayıtlar olduğunu anladım; başlığın hemen ardından gelen 2 bayt da uygulamada görünen kayıt numarasının onaltılık değeri gibi görünüyordu. Bir onay kutusuna tıklayınca bir bayt 0x00'dan 0x01'e değişti ve yeterince deneme yaptıktan sonra tüm yapıyı koddaki struct'lara eşleyip asıl uygulamanın desteklemediği raporları üretebildim
      Bunda yasa dışı bir şey yoktu. Satıcı rapor üretimi için ücret ödememizi istemiş olabilir ama hukuken engellenmiş değildi
    • Kamuya açıklamazsanız genelde her şeyi yapabilirsiniz
      Bir şey yaptınız ya da öğrendiniz diye bunu mutlaka yayın yapar gibi duyurmanız gerekmez. Öğrenmenin kendisi ödül olabilir