LINUX.ORG.RU
ФорумTalks

FileColor - программа для визуализирования содержимого бинарных файлов

 ,


2

2

Ссылка на код (Free Pascal): https://drive.google.com/open?id=0B21fx2NRbanxbVJ4QjQxQVVMcWs

Ссылка на бинарник(Linux 80386): https://drive.google.com/open?id=0B21fx2NRbanxNTMyT1ZmMXpjblk

Хочу поделиться своей студенческой подделкой FileColor. Программе скармливается некий произвольный(не в смысле случайный, а в смысле любой) файл размером от 2-х мегабайт и более. После этого выводятся первые 2 мегабайта онного файла(при желании можно перейти на следующие 2 мегабайта с помощью прокрутки). Создается окошко 1024 на 768 пикселей и 65536 цветами. В онном окошке цвет каждого пикселя определяется по двум байтам файла. То есть значения каждых двух байт отображаются через цвет соответствующего пикселя.

Теоретически если содержимое файло случайно, то должно получиться белое мессиво а-ля «телевизор потерял сигнал» (Вроде этого:https://i.imgur.com/6zBZaEx.jpg). Также подобный эффект дадут: хороший генератор псевдослучайных чисел, хороший алгоритм шифрования, хороший алгоритм сжатия.

В противном случае мы сможем визуально найти какие-то закономерности в картинке, какие-то паттерны. А люди, кстати говоря, по природе своей хорошо умеют находить визуальные паттерны.

Вот примеры картинок с паттернами полученными после анализа системного раздела и файла подкачки: https://imgur.com/a/UTMGn

Программа запускается из консоли и управление пролистыванием (клавиша Left - назад, любая другая - вперёд) от туда же. Для удобного просмотра советую сделать созданное программой графическое окошко «Поверх всех», а в сторонке от него поставить окошко консоли, которое потом сделать активным. Если достигнут конец файла, то программа выведет «синие жалюзи»(ХЗ почему возникает такой эффект, я специально его НЕ делал).

Программа сырая и далека от совершенства, приводится главным образом как Proof of concept. Плюс может быть вы захотите поделиться друг с другом полученными картинками =)

P.S.

Буду признателен если кто-нибудь объяснит мне почему программа выводит «синие жалюзи» при окончании файла.

Deleted

Шифрожат

Вот поэтому когда у меня на ЭВМ стояло шифрование, то я даже раздел подкачки держал шифрованым.

Кстати, вы не могли бы сделать визуализацию для раздела на который сначала записали случайных данных, потом создали LUKS и файловую систему с чем-то осмысленным? Будет ли видно, что LUKS не совсем похож на случайные данные?

Camel ★★★★★ ()

Идейка отличная. Приходит к тебе непонятный файл, а ты его раз и «посмотрел» и сразу ясно, что это. Запилить бы это в стандартный файловый манагер, цены бы не было.

yax123 ★★★★ ()

А почему имеено от 2х мегабайт? Есть ли возможность с меньшими файлами делать такое? Есть ли отображение адреса? В общем, щас гляну, если не сложно ставится

sehellion ★★★★★ ()
Ответ на: комментарий от sehellion

Какие оно требует библиотеки?

./FileColor: error while loading shared libraries: libXrandr.so.2: cannot open shared object file: No such file or directory

sehellion ★★★★★ ()
Ответ на: комментарий от sehellion

По идее просто перекомпилировать, при этом ничего в коде не меняя.

Deleted ()
Ответ на: комментарий от sehellion

А почему имеено от 2х мегабайт?

Потом что картинка выводится в режиме 1024 на 768 с 65536 цветами. На каждый пиксель требуется два байта.

Deleted ()
Ответ на: комментарий от yax123

Не понял? Вроде бы обычно у юзера не стоит задачи определить насколько присланый файл похож на рэндомный.

Deleted ()
Ответ на: Шифрожат от Camel

Вы это уж как-нибудь сами.

Мне больше импонирует идея сравнить алгоритмы сжатия данных путём визуального анализа копий одного файла сжатого разными алгоритмами. Тот у кого найдено меньше паттернов - лучше сжимает.

P.s. Кстати, что значит «шифрожат»?

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)

Создается окошко 1024 на 768 пикселей и 65536 цветами.

В стародавние времена тоже баловался этой идеей с 2 отличиями: размер окошка был регулируемым (кратным степени 2 не только по строке, но и по кадру), а цвет пиксела — переключаемым на монохромную яркость (цвет иногда мешает выявить структуру).

quickquest ★★★★★ ()

ТС, как выйти из сабжа? убивать терминал?
не, терминал не закрылся, буду запускать htop

sehellion ★★★★★ ()

1) график энтропии есть в binwalk

2) 5 строчек на Python сделать то же самое

Вердикт: не нужно

derlafff ★★★★★ ()
Ответ на: комментарий от derlafff

Да. И учиться не нужно. Ведь всё уже сделано/написано.

mandala ★★★★ ()
Ответ на: комментарий от mandala

Я не говорил, что писать не нужно не нужно. Результат не нужен

derlafff ★★★★★ ()
Ответ на: комментарий от sehellion

Обычно хватает убить терминал. Однако я замечал, что иногда приходится использовать xkill для убийства графического окошка, ибо оно может пережить убийство терминала.

Deleted ()

Где-то я такое уже видел, но никак не могу вспомнить где именно.

aidaho ★★★★★ ()

Кстати, может кто-нибудь мне раскроет тайну синих жалюзей? Почему при достижении конца файла возникает такой эффект?

Deleted ()
This file is big enough to be analyzed.
This file stores 1067752 WORD variables
 We need 1310720 WORD variables
Resolution:1280x1024 MaxColor:65535
An unhandled exception occurred at $0000000000402B07:
                                                     EInOutError: Read past end of file
                                                                                         $0000000000402B07
        $0000000000403359

и так на каждом

ossa ★★ ()
Ответ на: комментарий от ossa

Resolution:1280x1024 MaxColor:65535

Подозреваю собака зарыта здесь. Должно быть «Resolution:1024x768 MaxColor:65535». У Вас по каким-то причинам картинка выводится в большем разрешении чем я планировал.

Deleted ()
Ответ на: комментарий от Deleted

Я сильно подозреваю, что по внешнему виду можно точно определить что это за файл. У разных форматов будут разные патерны причем без относительно конкретного содержания. Типа текст за всегда отличишь от картинки и т.д. причем я подозреваю что можно будет отличить растр от вектора, кодировку текста, язык. На ваших скриншотах явно выделяются разные типы файлов. Как минимум видно бинарь в котором массив структур.

yax123 ★★★★ ()

Была где то ссылка на hackaday там такой софт был + 3d ... надо погуглить... все время её теряю

DR_SL ★★★★★ ()
Ответ на: комментарий от derlafff

Не любопытно.

Ну как минимум мне было любопытно. Я ни разу в жизни не видел ничего подобного.

Deleted ()
Ответ на: комментарий от derlafff

Это не то. Счётчик энтропии это конечно хорошо, но возможность своими глазами видеть паттерны данных файла - совершенно другой уровень.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от ossa

Посмотрел, у меня такая же ошибка выводится при попытке открыть маленькие файлы. Попытайтесь открыть файлы размером в 2 мегабайта и более.

Deleted ()
Ответ на: комментарий от derlafff

на баше

собственно, вот

convert -size 2048x2048 xc:white in.bmp; (dd if=in.bmp bs=1 count=138; dd if=/dev/urandom bs=2048 count=$((2048*3))) > out.bmp; convert out.bmp out.png; rm in.bmp out.bmp; nomacs out.png

еще можно картинки гнать таким образом в .wav, применять аудио-эффекты sox'ом — и обратно в картинку

derlafff ★★★★★ ()
Ответ на: комментарий от derlafff

И чё? Я когда FileColor писал, то у меня функция random в качестве заглушки стояла, когда он у меня ещё не умел файлы читать. Так что рисование рэндомных картинок это уже пройденый этап.

Deleted ()
Ответ на: комментарий от Deleted

И чё? Я когда FileColor писал, то у меня функция random в качестве заглушки стояла, когда он у меня ещё не умел файлы читать. Так что рисование рэндомных картинок это уже пройденый этап.

Чо и чо? Бросай свой недопаскаль, 200 строчек которого можно заменить 400 символами на баше. Полезнее будет.

derlafff ★★★★★ ()
Ответ на: комментарий от derlafff

Батенька, Вы идиот или просто притворяетесь?

Во-первых, программа convert частью Баша никак не является. С таким же успехом я мог бы написать модуль Паскаля для скажем расчёта траектории баллистических ракет, вызвать его, а потом сказать «бросайте свой недо[вставить сюда название любого языка]», я эту же задачу решил на Паскале всего N символами, где N очень маленькое число по сравнению с размером кода без использования онного модуля.

Во-вторых, замены я тоже что-то не увидел. Насколько я понял Ваш скрипт генерирует картинки по рэндомным данным. Как я уже говорил, для моей программы это уже пройденный этап.

В-третьих, мне Паскаль нужен для учёбы в институте. Я его не выбирал. А создал FileColor я в ходе шлифовки своих навыков владения онным языком.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Какая гордая птица. Не та программа хороша, у которой название есть и автор понтуется. Хороша, та программа, которая cat file > /dev/fb0.

t184256 ★★★★★ ()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от yax123

Потом можно научиться читать файл как Матрицу))

Deleted ()
Ответ на: комментарий от Deleted

Потом что картинка выводится в режиме 1024 на 768 с 65536 цветами. На каждый пиксель требуется два байта.

Когда мне нужно было из одной своей спектрумовской игры достать спрайты (сорцы игры были утеряны за давностью лет), то я написал вьювер/экстрактор, который умел произвольную ширину и произвольную битность (для спека это было не важно, но решил реализовать).

Почему вы выбрали жесткие 1024?

andreyu ★★★★★ ()
Ответ на: комментарий от Deleted

Во-вторых, замены я тоже что-то не увидел. Насколько я понял Ваш скрипт генерирует картинки по рэндомным данным. Как я уже говорил, для моей программы это уже пройденный этап.

Пройденный этап, лол. Слишком толсто для замены dd if=/dev/urandom на dd if=/path/to/file

В-третьих, мне Паскаль нужен для учёбы в институте. Я его не выбирал. А создал FileColor я в ходе шлифовки своих навыков владения онным языком.

А ты выкидывай паскаль и/или этот недоуниверситет, а то и дальше будешь страдать какой-то ненужной фигней на ненужном языке.

Во-первых, программа convert частью Баша никак не является. С таким же успехом я мог бы написать модуль Паскаля для скажем расчёта траектории баллистических ракет, вызвать его, а потом сказать «бросайте свой недо[вставить сюда название любого языка]», я эту же задачу решил на Паскале всего N символами, где N очень маленькое число по сравнению с размером кода без использования онного модуля.

Ага, именно так. Тем не менее, я баш не к этому привел, а как PoC. В противопоставлению твоему ущербному коду я привел python, вообще-то.

derlafff ★★★★★ ()

Для вариантов

case логическое_выражение of
True: оператор;
end;

или

case логическое_выражение of
True: оператор1;
False: оператор2;
end;
существует оператор if:
if логическое_выражение then
  оператор;

или

if логическое_выражение then
  оператор1
else
  оператор2;

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от Deleted

Потом можно научиться читать файл как Матрицу))

именно так. тексты так вообще не проблема - запомнить, что значат 40 цветов и все.

yax123 ★★★★ ()

Для прохода в одну сторону вполне достаточно:

uses PtcGraph, Crt;
var
  gd, gm, r, x, y: Integer;
  f: file;
  d: array of Word;
begin {$I-}
  if ParamCount<1 then begin
    WriteLn('Usage: ',ParamStr(0),' filename');
    Halt;
  end;
  Assign(f,ParamStr(1)); Reset(f,2); r:=IOResult;
  if r<>0 then begin
    WriteLn('*** Error (',r,'): Can''t open file "',ParamStr(1),'"');
    Halt;
  end;
  gd:=Detect;
  InitGraph(gd,gm,'');
  r:=GraphResult;
  if r<>grOk then begin
    WriteLn('*** Error (',r,'): ',GraphErrorMsg(r));
    Close(f); Halt;
  end;
  if GetMaxColor<$FFFF then begin
    CloseGraph;
    WriteLn('*** Error: MaxColor < 65536');
    Close(f); Halt;
  end;
  SetLength(d,GetMaxX+1); y:=0;
  repeat
    BlockRead(f,d[0],Length(d),r);
    for x:=0 to r-1 do PutPixel(x,y,d[x]);
    Inc(y);
    if y>GetMaxY then begin
      y:=0; if ReadKey=#0 then ReadKey;
      ClearDevice;
    end;
  until r<GetMaxX-1;
  if ReadKey=#0 then ReadKey;
  CloseGraph;
end.

bormant ★★★★★ ()

Ему 32-битные либы нужны? Какие у него зависимости вообще?

Deleted ()
Ответ на: комментарий от andreyu

Я сейчас посмотрел код, я ошибался насчёт того что режим будет обязательно 1024 на 768. Там вообще-то стоит автомат, просто у меня этот автомат всегда выдаёт 1024 на 768.

Думаю теоретически можно было бы на старте давать юзеру выбрать желаемый видеорежим из списка возможных, однако у меня до этого элементарно не дошли руки.

Deleted ()
Ответ на: комментарий от bormant

Я это прекрасно знаю, это просто моя фишка. Я в своё время додумался до того, что IF это фактически частнй случай CASE.

Deleted ()

Запустил не указывая файл, оно мне открыло чёрное окно на весь экран, не реагирующее на закрытие и Ctrl+C, пришлось убивать через системный монитор. Не надо так.

Deleted ()

Что-то оно у меня не воспринимает указанный путь, показывает чёрный экран:

$ ./FileColor /media/mix/Video/Her.2013.BDRip.720p.mkv 
Please enter a path to a file that you want to analyze. Example: /tmp/reports.pdf
Terminated

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.