Новый проект

Программа «Энтропийный просмотрщик» № 1027

Переделать программу

Старое задание

Задание программы № 1027

ТЕХНИЧЕСКОЕ ЗАДАНИЕ: ЭНТРОПИЙНЫЙ ПРОСМОТРЩИК ФАЙЛОВ 1. НАЗНАЧЕНИЕ Оконная программа для визуального и численного сравнения энтропии произвольного файла (в первую очередь исполняемого) с эталоном случайного шума. Программа: - показывает эталон — случайное изображение с энтропией выше 7.7 бит/байт; - показывает содержимое загруженного файла постранично в виде изображения; - считает энтропию текущей страницы и всего файла. Сравнение позволяет находить участки файла, похожие на шум: сжатые, упакованные или зашифрованные данные. 2. ТЕРМИНЫ Энтропия — энтропия Шеннона по распределению значений байтов: H = -сумма(p_i * log2(p_i)), i = 0..255, p_i = n_i / N, где n_i — число байтов со значением i, N — общее число байтов. Единицы — бит/байт, диапазон 0..8. Значения p_i = 0 не учитываются. Страница — непрерывный фрагмент файла длиной 65 536 байт (0x10000), начинающийся со смещения, кратного 0x10000. Поле — изображение 256x256 пикселей, 1 пиксель = 1 байт. Эталон — поле, заполненное случайными байтами, с энтропией выше 7.7 бит/байт. Смещение — позиция байта от начала файла, отображается в шестнадцатеричном виде, 8 цифр (например, 0x00021A40). 3. ОБЩАЯ КОМПОНОВКА ОКНА 3.1. Окно фиксированного размера. Заголовок — «Энтропийный просмотрщик». 3.2. В верхней части два поля рядом по горизонтали: слева эталон, справа файл. 3.3. Между полями промежуток 24 пикселя. Разделительная линия не рисуется. 3.4. Каждое поле обведено тонкой рамкой (1 пиксель) нейтрального серого цвета #808080. Чёрная рамка не допускается. 3.5. Под каждым полем — подписи с энтропией (раздел 7). 3.6. Все элементы управления расположены под полями, на всю ширину окна, сверху вниз: - кнопка «Загрузить файл программы», имя и размер файла; - кнопки листания, номер страницы, диапазон смещений; - ползунок; - полоса энтропии всех страниц; - поле «Перейти к смещению» с кнопкой «Перейти»; - строка состояния с информацией под курсором. 3.7. Числа и смещения выводятся моноширинным шрифтом. Схема: +---------------------------------------------------------------+ | [Поле: эталон] <24 px> [Поле: файл] | | Энтропия эталона: 7.997 [*] Энтропия страницы: 6.412 [*] | | Энтропия файла: 6.105 [*] | | 12 345 байт из 65 536 | |---------------------------------------------------------------| | [Загрузить файл программы] sample.exe — 1 234 567 байт | | [<<] [<] Страница 3 из 16 0x00020000–0x0002FFFF [>] [>>] | | [====================== ползунок ======================] | | [================ полоса энтропии страниц ===============] | | Перейти к смещению: [__________] [Перейти] | | Смещение 0x00021A40, байт 0x8B (139) | +---------------------------------------------------------------+ 4. ОТОБРАЖЕНИЕ БАЙТОВ В ИЗОБРАЖЕНИЕ 4.1. Каждый байт — один пиксель в градациях серого: красный = зелёный = синий = значение байта. 0x00 — чёрный, 0xFF — белый. 4.2. Заполнение построчно: слева направо, сверху вниз. Ширина строки — 256 пикселей, одна строка = 0x100 байт. 4.3. Пиксель с координатами (x, y) на странице с номером p (нумерация с нуля) соответствует смещению p * 0x10000 + y * 0x100 + x. 4.4. Одно и то же правило применяется к эталону и к файлу. 4.5. Поля выводятся на экран в масштабе x2 (512x512 пикселей на экране). Увеличение без сглаживания: каждый пиксель данных — квадрат 2x2 одного цвета. 5. ЭТАЛОН (ЛЕВОЕ ПОЛЕ) 5.1. Создаётся сразу при запуске, до показа окна пользователю. 5.2. Заполняется 65 536 криптографически случайными байтами. 5.3. После генерации считается энтропия. Если она не больше 7.7, данные генерируются заново, пока условие не выполнится. 5.4. Эталон не меняется до закрытия программы. 5.5. Под полем выводится: «Энтропия эталона: X.XXX бит/байт» и цветовой индикатор. 6. ПОЛЕ ФАЙЛА (ПРАВОЕ ПОЛЕ) 6.1. Начальное состояние - Правое поле пустое: залито цветом пустой области (п. 6.4), по центру надпись «Файл не загружен». - Подписи энтропии показывают «—». - Кнопки листания, ползунок, полоса энтропии и переход по смещению неактивны. 6.2. Загрузка файла - Кнопка «Загрузить файл программы» (и сочетание Ctrl+O) открывает стандартный диалог выбора файла с фильтрами: «Исполняемые файлы» — *.exe *.dll *.sys *.ocx *.scr *.cpl *.so *.elf *.bin; «Все файлы» — *.*. - Отмена диалога ничего не меняет. - Файл читается в двоичном виде, без какой-либо интерпретации или декодирования. - Файл не загружается в память целиком: каждая страница читается с нужного смещения отдельно. - После выбора файла: показывается страница 1; считается энтропия этой страницы; запускается фоновый расчёт энтропии всех страниц и всего файла (раздел 9). - Рядом с кнопкой выводится имя файла без пути и размер: «sample.exe — 1 234 567 байт (0x12D687)». - Повторная загрузка другого файла полностью заменяет текущий: прерывает фоновый расчёт, сбрасывает навигацию на первую страницу, очищает полосу энтропии. 6.3. Ошибки загрузки Каждая ошибка показывается отдельным окном сообщения. После ошибки сохраняется предыдущее состояние программы (ранее загруженный файл, если он был, остаётся открытым). - Файл не найден — «Файл не найден: <путь>». - Нет прав на чтение — «Нет доступа к файлу: <путь>». - Файл пустой (0 байт) — «Файл пустой, отображать нечего». - Прочая ошибка чтения — «Ошибка чтения файла: <текст ошибки>». Ошибка чтения во время листания или фонового расчёта обрабатывается так же; фоновый расчёт при этом останавливается. 6.4. Неполная страница (файл меньше 64 КБ или последняя страница файла) - Пустая часть поля не заполняется повторами данных и не дополняется нулями. - Пиксели за концом файла заливаются цветом вне серой палитры: #4B2E83 (тёмно-фиолетовый). Чёрный и любые оттенки серого не допускаются, так как совпадают с байтами данных. - Под полем выводится фактический объём: «12 345 байт из 65 536». Для полной страницы эта строка не выводится. - Энтропия страницы считается только по фактически прочитанным байтам. 7. ЭНТРОПИЯ: РАСЧЁТ И ВЫВОД 7.1. Расчёт — по формуле из раздела 2, на основе подсчёта частот всех 256 значений байта. 7.2. Если байтов нет (N = 0), энтропия не считается, выводится «—». 7.3. Формат числа — 3 знака после запятой, единицы «бит/байт». 7.4. Выводимые значения: - под левым полем: «Энтропия эталона: X.XXX бит/байт»; - под правым полем: «Энтропия страницы: X.XXX бит/байт» — по байтам текущей страницы; - под правым полем: «Энтропия файла: X.XXX бит/байт» — по всему файлу. До окончания фонового расчёта: «Энтропия файла: расчёт… NN %». 7.5. Цветовой индикатор — квадрат 12x12 пикселей слева от числа: - H > 7.7 — красный #D62728 (похоже на шум: сжатие, упаковка, шифрование); - 6.0 < H <= 7.7 — жёлтый #E0B000; - H <= 6.0 — зелёный #2CA02C. 7.6. Пороги 6.0 и 7.7 задаются константами в одном месте программы. 8. НАВИГАЦИЯ 8.1. Кнопки и подписи - Кнопки: «<<» — первая страница, «<» — предыдущая, «>» — следующая, «>>» — последняя. - На первой странице неактивны «<<» и «<», на последней — «>» и «>>». - Между кнопками выводится: «Страница P из T» (нумерация для пользователя с 1); диапазон смещений текущей страницы: «0x00020000–0x0002FFFF». Для последней неполной страницы конец диапазона — последний байт файла. - Число страниц T = размер файла / 65 536 с округлением вверх. 8.2. Ползунок - Горизонтальный, на всю ширину области управления, диапазон — от первой до последней страницы. - Позиция всегда привязана к целой странице: при отпускании ползунок встаёт на ближайшую страницу. - Во время перетаскивания обновляются только номер страницы и диапазон смещений. Чтение страницы, построение изображения и расчёт энтропии выполняются после отпускания кнопки мыши или через 150 мс после остановки ползунка. - Если в файле одна страница, ползунок неактивен. - Кнопки, клавиши, ползунок, полоса энтропии и переход по смещению синхронизированы: любое изменение страницы обновляет положение ползунка, номер страницы и метку на полосе. Принятые решения (автор не уточнял): Пустое поле файла заливается цветом #4B2E83. Надпись «Файл не загружен» выводится по центру правого поля шрифтом системного размера. Кнопка «Загрузить файл программы» активна всегда, включая состояние без файла. Поле «Перейти к смещению» принимает ввод в виде шестнадцатеричного числа с префиксом 0x или без него, а также десятичного числа. При вводе некорректного значения в поле перехода показывается сообщение «Некорректное смещение» и состояние не меняется. Смещение больше размера файла минус один приводит к переходу на последнюю страницу. Полоса энтропии всех страниц отображает по одному столбцу на страницу, окрашенному по правилам п. 7.5. Метка текущей страницы на полосе энтропии выделяется белой вертикальной линией шириной 1 пиксель. Строка состояния при отсутствии курсора над полем файла показывает «—». Строка состояния при курсоре над эталоном показывает «Эталон, байт 0xXX (NNN)». Строка состояния при курсоре над областью вне файла показывает «Вне файла». Прогресс фонового расчёта обновляется не реже одного раза в 100 мс.

Опишите, что изменить. 7gpt поправит задание и бесплатно создаст новую программу по изменённому заданию, исходная программа останется как есть.

Задание и готовая программа будут видны всем. Не пишите имена, телефоны, адреса и другие личные данные — текст обрабатывает нейросеть.

Изменение вносится один раз, дальше 7gpt при необходимости задаст вопросы.