Tersine mühendisler için hex editör: ImHex
(github.com/WerWolv)- 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;
-NoGPUyazı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/libimhexve/plugins/uiLGPLv2.1 ile sunulur ve proprietary eklenti geliştirmeye izin verir
ImHex’in sunduğu temel rol
- ImHex, tersine mühendisler, programcılar ve sabahın 3’ünde çalışırken gözü daha az yoran bir araç isteyenler için bir hex editördür
- En son sürüm indirme, nightly pre-release, web sürümü ve dokümantasyon ayrı olarak sunulur
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:
- Pattern Language Source Code
- Pattern Language Documentation
- ImHex-Patterns: format patterns, libraries, magic ve constant files deposu
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
-NoGPUsuffix’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 buildcd buildDESTDIR=install ninja install- SDK yolu
install/usr/local/share/imhex/sdkolur veIMHEX_SDK_PATHbunun 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/libimhexLGPLv2.1’dir/plugins/uiLGPLv2.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
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ı
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
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...
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
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
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
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/
“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
Ö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...
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
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ı
İ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
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
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
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
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
Bir şey yaptınız ya da öğrendiniz diye bunu mutlaka yayın yapar gibi duyurmanız gerekmez. Öğrenmenin kendisi ödül olabilir