Hexo
- Active · last change 9-19-2026
- ★ 3 on GitHub
README
HEXO 1.2
Хекс редактор за форензика и обратно инженерство под Windows.
HEXO отваря файл, memory dump или цял физически диск и работи с него по един и същ начин — без да го зарежда в паметта и без да го променя, докато не кажеш. Носи на борда криптографски инструментариум: контролни суми, HMAC, симетрични шифри, RSA и търсене на криптографски константи. Не изисква нито един външен DLL.
Практически няма ограничение в размера. Всички офсети са 64-битови, тоест таванът е 8 екзабайта — величина, която няма да срещнеш. Няма значение дали файлът е 4 KB или 800 GB: отварянето отнема същото време, защото нищо не се чете предварително. Няма „зареждане", няма лента на изчакване, няма момент, в който програмата да откаже файл, защото не се побира в паметта. Скролът до края на 1 TB устройство е също толкова бърз, колкото до края на текстов файл — четат се само десетината реда, които в момента се виждат на екрана.
Какво отваря
Файлове — от няколко байта до стотици гигабайти, без разлика в поведението. 2 GB memory dump се отваря моментално, защото не се чете нищо освен видимото. Няма горна граница, до която да опреш на практика — адресирането е 64-битово.
Физически устройства — цял диск, дял или флашка, директно. Виж следващата точка.
Много файлове наведнъж — всеки в собствен таб със собствена история на редакциите. Табът показва звездичка, когато има незаписани промени, и пита при затваряне.
Директно върху физическото устройство
Това е основната работа на HEXO и тя не минава през междинен файл.
Файл → Отвори устройство показва какво има на машината — не иска да помниш пътища:
| Физически дискове | PhysicalDrive0, PhysicalDrive1, ... с модел, шина (SATA, NVMe, USB, SD...), размер, признак за сменяем носител и кои букви седят на всеки диск |
| Томове | C:, D:, ... с етикет, файлова система и размер |
| Образ на диск | бутонът Файл... отваря .dd, .img или какъвто и да е файл през същия суров път |
| Ръчен път | полето отдолу приема всичко, което Windows разбира — включително \\.\PhysicalDrive7 за екзотични случаи |
Списъкът се съставя, без да се чете нито байт от носителите: дисковете се отварят с манипулатор без никакви права за достъп, което не иска администратор и все пак стига за въпросите „колко си голям", „какъв модел си" и „кои дялове са върху теб". Бутонът Обнови прочита списъка наново — за диск, включен междувременно.
Цял диск значи цял диск, както си е: MBR/GPT, всички дялове, неразпределеното пространство между тях. Отваря се моментално, независимо че е терабайт: не се прави имидж, не се копира нищо, не се чака. Отиваш на сектор 0 и гледаш таблицата с дялове след секунда, а не след три часа dd.
Четенето е секторно подравнено, както Windows изисква за суров достъп, а размерът се взима от самото устройство, не се гадае.
Режим на отваряне
След избора програмата пита как да отвори устройството:
- Само за четене — по подразбиране, и бутонът, върху който стои фокусът. Записът е физически невъзможен: манипулаторът е отворен без право на запис.
- Четене и ЗАПИС — съзнателен избор, с предупреждение на екрана. Дяловете се оставят както са.
- Запис + заключване на дяловете — за редакция вътре в монтиран дял; заключва и размонтира томовете, за да не ти клобби файловата система секторите.
Табът показва [RO], [RW] или [RW+L], а статус лентата пише ДИСК: ЗАПИС РАЗРЕШЕН, докато работиш в режим на запис. Не може да се обърка кое устройство в кой режим е отворено.
Суровият достъп иска програмата да е стартирана като администратор. Без права Windows отказва още при отварянето (грешка 5) и HEXO предлага да се пусне наново с права.
Редактиране на живия диск
В режим за запис дискът се редактира като файл: пишеш в хекс или в символната колона, прилагаш блокови операции върху селекция, връщаш дешифрован блок от крипто диалога, ползваш undo и redo.
Дължината е закована. Устройството не може да расте или да се смалява, затова вмъкването и изтриването са изключени, а режимът е само презапис (INS не се включва). Презапис, който би излязъл извън края, се отрязва. Така една случайна подредба на байтовете не може да размести целия диск.
Нищо не стига до диска, докато не запишеш. Промените живеят в паметта; редактираните байтове се показват в друг цвят, табът получава звездичка. Дотук дискът е непокътнат.
Записът пита два пъти
Файл → Запиши (Ctrl+S) минава през две отделни врати.
Първа. Показва се точно какво ще се случи: кое устройство, колко диапазона, колко байта общо и списък с офсетите — от кой до кой адрес, по колко байта всеки. Предупреждението казва, че действието е необратимо и че след записа няма undo. Фокусът стои върху Отказ, не върху Продължи — едно натискане на Enter по инерция отменя, а не записва.
Втора. Иска се да напишеш думата ЗАПИШИ и да натиснеш OK. Празно поле, друга дума, Отказ — нищо не се записва и програмата го казва. Тази врата не се минава с рефлекс.
Чак тогава се пише. И то само променените байтове: за всеки диапазон се прочита сектора, в който попада, сменят се точно тези байтове и секторът се връща обратно. Останалото съдържание на сектора остава както си е било.
Записът е небуфериран и през диска (FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH), а размерът на сектора се пита самото устройство, вместо да се приема 512 — иначе на 4K дискове и на част от флашките нищо не се получава.
Дяловете не се пипат по подразбиране. Заключиш ли том и после го пуснеш, Windows го монтира наново — и при това монтиране връща старото съдържание върху зони извън тома, най-вече празнината преди първия дял. Записът изглежда успешен, вижда се от всеки отворен манипулатор, а изчезва в мига, в който последният се затвори. Затова обичайният режим за запис оставя дяловете както са.
Когато редакцията наистина е вътре в монтиран дял, има отделен режим при отваряне — Запис + заключване на дяловете — който заключва и размонтира томовете, за да не ти клобби файловата система секторите. Табът показва [RW+L] вместо [RW], за да се вижда в кой режим работиш. Ако пишеш вътре в монтиран дял без заключване, първото потвърждение те предупреждава.
И накрая проверява — през нов манипулатор. След записа всеки променен диапазон се прочита наново, с манипулатор, отворен специално за проверката и без буфериране, и се сравнява байт по байт с това, което трябваше да легне. Така нито Windows, нито контролерът на самото устройство може да отговори от кеша си вместо от носителя — а точно това прави една умираща или фалшива флашка: потвърждава записа, връща го при веднага следващо четене, и го губи. Ако устройството върне старите байтове — защитена от запис флашка, сектор, който Windows не дава, липсващи права — програмата не казва „готово": показва на кой офсет проверката се е скъсала и какво вероятно го причинява, а редакциите остават в паметта, за да не се загубят. Запис, който само изглежда успешен, е по-лош от отказ.
След потвърден запис историята за undo се изчиства — редакциите вече са на устройството, няма какво да се връща — и програмата казва колко байта в колко диапазона е записала.
Диагностика
Екстри → Диагностика на записа минава по целия път и отчита всяка стъпка поотделно: размер на сектора, какво е станало с всеки дял (заключен, размонтиран, оставен), после записва един байт и го чете обратно по три начина — през същия манипулатор, през нов манипулатор и отново след пауза. След това повтаря през WriteAt (пътя на самия запис) веднъж с осем байта и веднъж с осем отделни записа в същия сектор, и накрая пуска всички манипулатори и отваря наново. Тестът връща оригиналните байтове и го показва.
Отчетът има бутон Копирай — това е текстът, който върши работа при доклад за проблем.
Когато носителят лъже
Проверката след записа гарантира, че байтовете са стигнали до устройството — не че са стигнали до флаш паметта. Умираща флашка потвърждава записа, връща го при всяко четене, докато е захранена, и го губи в мига, в който я извадиш. Никаква проверка от страна на компютъра не може да види разликата, защото контролерът отговаря вместо носителя.
Затова при сменяем носител последната дума има изваждането. Екстри → Безопасно изваждане на устройството спира устройството точно както иконката на Windows, тоест го принуждава да изпише всичко, което още държи. Ако след това извадиш флашката, сложиш я пак и байтовете ги няма — носителят е отказал и това не е софтуерен проблем.
Практично
Суровият достъп до физически диск под Windows иска програмата да е стартирана като администратор. Без права Windows връща грешка 5 още при отварянето и HEXO предлага да се пусне наново с администраторски права. За работа с файлове не трябва нищо специално — затова програмата не иска права при всяко пускане.
Windows заключва секторите на монтирани дялове. HEXO се опитва да заключи дяловете на избраното устройство, но ако някоя програма ги държи заети, това не успява — и тогава записът в тези сектори може да бъде отказан или тихо изгубен. Точно затова има проверка след записа: каквото и да откаже системата, ще го видиш, а не ще го научиш по-късно.
Запиши като не важи за устройство — цял диск не се изсипва във файл. За изваждане на парче се маркира диапазон и се ползва експортът.
Преглед
Класическа хекс мрежа: офсети вляво, байтове в средата, символи вдясно. Курсорът и селекцията се движат синхронно в двата панела.
- Байтове на ред — 8, 16 или 32, превключва се от
Изглед - UTF-8 панел — символната колона може да чете UTF-8 вместо суров ASCII
- Статус лента — текуща позиция, размер, брой селектирани байтове, режим (INS/OVR) и индикатор за променен файл
Редактиране
Редакциите не пипат файла на диска. Работи се с piece-table: оригиналът остава непокътнат, промените живеят в буфер в паметта и се сливат чак при запис.
- Презапис и вмъкване — Insert превключва OVR / INS
- Изтриване на селекция
- Неограничен undo / redo — всяка операция е една стъпка назад, включително блоковите операции върху цяла селекция
- Запис върху оригинала или Запис като нов файл
При устройство, отворено за запис, важи същото с една разлика: дължината е закована, тоест вмъкване и изтриване няма, а самият запис минава през двете потвърждения, описани по-горе.
Операции върху селекция
Прилагат се наведнъж върху целия маркиран блок и се отменят с едно undo.
| група | операции |
|---|---|
| логически | NOT, AND, OR, XOR |
| аритметични | ADD, SUB, MUL, DIV, MOD, смяна на знака |
| битови | SHL, SHR, ROL, ROR (1–7 бита) |
| подредба | обръщане на байтовете (byte flip) |
| текстови | горен регистър, долен регистър, обръщане на регистъра |
| запълване | Fill с даден байт |
За операциите с операнд програмата пита за стойността преди да приложи.
Търсене и навигация
- Търсене по хекс шаблон —
DE AD BE EF, с интервали или без - Търсене по текст (UTF-8)
- Следващо съвпадение с F3
- Отиване на офсет — приема
1A2Bили0x1A2B
Копиране и експорт
Селекцията се копира в клипборда като хекс (с или без интервали между байтовете — превключва се) или като текст.
Експорт във файл:
- суров двоичен — точно байтовете от селекцията
- C / C++ масив — с име на променливата по избор
- Pascal масив — с име на константата по избор
Контекстно меню
Десен бутон върху селекцията праща данните направо където трябва, без ръчно копиране:
- копирай като хекс / като текст
- в Крипто — като ключ или като IV
- в RSA — като Base, Modulus или Exponent
- контролна сума на селекцията
Калкулатор (F2)
Програмистки калкулатор, който стои над редактора.
Четирите представяния — HEX, DEC, OCT, BIN — се виждат едновременно и се обновяват при всяко натискане. Ширината се избира: BYTE 8, WORD 16, DWORD 32, QWORD 64, и резултатът се отрязва според нея.
Операции: +, −, *, /, MOD, AND, OR, XOR, NOT, <<, >>.
Бутонът Send → Goto праща текущата стойност като офсет в редактора и скача там.
Контролни суми и хешове (F6)
Смятат се наведнъж, в едно минаване през данните — върху селекцията, а без селекция върху целия файл или устройство.
| CRC16 (CCITT), CRC32 (IEEE), CRC64 (ECMA-182) | собствена имплементация |
| MD5, SHA1, SHA256, SHA384, SHA512 | Windows CNG |
| HMAC-MD5 / SHA1 / SHA256 / SHA384 / SHA512 | Windows CNG, с ключ в хекс |
Прозорецът се отваря веднага и показва колко е диапазонът, преди да започне каквото и да е четене. Под 64 MB тръгва сам; над това чака да натиснеш Изчисли — защото „целият файл" при отворен физически диск значи терабайт. Докато смята, върви лента с прогрес, текуща скорост и оставащо време, а Отказ наистина спира.
Ако четенето прекъсне по-рано (лош сектор, устройство, което свършва неочаквано), програмата го казва и показва колко байта реално са покрити, вместо да подаде хеш, който изглежда редовен.
Бутон Копирай всичко слага целия списък в клипборда наведнъж.
Симетрична криптография (F7)
Шифроване и дешифроване на маркирания блок през Windows CNG.
- Шифри: AES, 3DES, DES, RC4
- Режими: ECB, CBC, CFB, GCM (GCM само за AES)
- PKCS7 подпълване — включва се и се изключва; дължината се променя съответно
- AES-GCM — nonce в полето за IV, автентикационен Tag: при шифроване се попълва, при дешифроване се проверява. Провалена проверка се съобщава, а не се премълчава.
- PBKDF2 (HMAC-SHA256) — извежда ключ от парола и сол направо в полето за ключ
Резултатът първо се показва в хекс. Записването му обратно е отделен бутон — „Върни във файла" — и е една стъпка undo. Затова върху устройство, отворено само за четене, инструментът пак върши работа: смяташ и гледаш, без да пипаш нищо. Върху устройство, отворено за запис, връщането влиза в редакциите и стига до диска чак при запис, през двете потвърждения.
RSA (F4)
base ^ exp mod n върху операнди с произволна дължина, въведени в хекс. Отдолу стои собствена аритметика за големи числа. Проверено срещу референтни стойности до 4096 бита, включително истински RSA-2048 подпис и проверка.
Операндите се пълнят и с десен бутон върху селекция в редактора.
Търсене на криптографски константи (F8)
Порт на базата със сигнатури FindCrypt2 — 79 сигнатури за 36 алгоритъма: AES/Rijndael, DES, Blowfish, Twofish, Camellia, SHA-1/256/512, MD5, Whirlpool, GOST и други.
Открива както непрекъснати блокове с константи, така и разпръснати константи, които компилаторът е разхвърлял из кода.
Понеже сканирането на всички сигнатури през многогигабайтов файл няма смисъл, се избират един или няколко конкретни алгоритъма — при един алгоритъм сканирането е около 10 пъти по-бързо.
При непроменен файл сканирането върви в отделна нишка със собствен файлов манипулатор, за да не се бие с четенето на прегледа; при устройство или редактиран изглед минава по основната нишка, но пак с жив интерфейс. И в двата случая има лента с прогрес и Отказ. Двойно щракване върху намереното скача на офсета и го маркира.
Език на интерфейса
Целият интерфейс се чете от външен файл hexview.lng до изпълнимия файл — прост текстов формат ключ=стойност в UTF-8. Идват готови български и английски превод; преименуваш желания на hexview.lng.
От менюто може да се запише шаблон с всички текстове, които програмата ползва в момента, да се редактира и да се презареди.
Относно (F1)
Показва версията, точния строеж на работещото копие (версия на компилатора, целева платформа, дата на компилация), размера на базата със сигнатури и кредитите. Бутон Копирай информацията слага целия технически блок в клипборда — това е текстът, който върши работа при докладване на проблем.
Клавиши
| Ctrl+O | отвори файл |
| Ctrl+S / Ctrl+Shift+S | запиши / запиши като |
| Ctrl+W | затвори таба |
| Ctrl+Z / Ctrl+Y | undo / redo |
| Insert | превключи вмъкване / презапис |
| Ctrl+Delete | изтрий селекцията |
| Ctrl+C | копирай като хекс |
| Ctrl+F / F3 | търси хекс / следващо |
| Ctrl+G | отиди на офсет |
| F1 | Относно |
| F2 | калкулатор |
| F4 | RSA |
| F6 | контролна сума / хеш |
| F7 | симетрична криптография |
| F8 | търсене на криптографски константи |
Под Екстри има и Диагностика на записа и Безопасно изваждане на устройството — и двете работят върху отвореното устройство.
Бележки
Криптографията минава през bcrypt.dll — системен компонент на Windows — с директна връзка към него, написана специално за този проект и съдържаща само точките, които той вика. Няма OpenSSL, няма външни библиотеки, няма чужди units, няма какво да се доставя покрай изпълнимия файл.
Извън Windows CRC-тата и търсенето на константи работят; хешовете през CNG и симетричната криптография не са налични.
Интерфейсът е изцяло в код — няма нито един .lfm файл.

