Как скрываются файлы в jpeg файле
Я читал статью, объясняющую Как скрыть файлы в файлах JPEG.
Мне интересно, как файл может содержать как jpeg-данные, так и rar файл без каких-либо видимых искажений либо для изображения, либо для сжатого файла.
Я предполагаю, что это имеет какое-то отношение к тому, как сжатый файл или файл jpeg представлен в двоичной форме, но я понятия не имею, как это работает.
Может ли кто-нибудь уточнить это?
Ответы
Ответ 1
Все, что происходит, это добавить архив в конец потока JPEG. Затем вы надеетесь, что ваш JPEG-декодер не будет считывать маркер EOI, найти там данные и сказать, что что-то не так.
Изображение в формате JPEG представляет собой поток байтов, начинающийся с маркера SOI и заканчивающийся маркером EOI.
ZIP и RAR - это потоки байтов. Поток ZIP начинается с 50 4B. RAR-поток начинается с 52 61 72 21 1A 07.
Метод, описанный в ссылке выше, берет двоичную копию (несколько) потока JPEG и добавляет к нему поток ZIP или RAR.
Декодеры RAR/ZIP сканируют поток до тех пор, пока не найдут подпись для RAR или ZIP (игнорируя поток JPEG).
Ответ 2
Этот ответ не учитывает точный случай в указанной вами ссылке, но предоставляет другой способ скрытия данных:
Было бы также теоретически возможно скрыть файл внутри самого изображения JPEG, но вам понадобится сложная программа для записи закодированных данных и последующего ее повторного чтения.
В принципе, фотография в формате JPEG содержит много информации, которая, если она изменится, не будет заметна для человеческого глаза. Представьте, что у вас есть фотография человека в синей рубашке. Если вы нажмете на эту рубашку, вы увидите, что она не является даже синим цветом, но состоит из множества оттенков цвета, большинство из которых голубоватый (но некоторые могут быть и другими цветами). Вы можете легко изменить некоторые из этих пятен на несколько иной тон, и это не станет очевидным различием изображения.
Умная программа может вставлять код на фотографию, тонко меняя пиксели на шаблон, представляющий данные. Очень простой пример: если "оттенок" (то есть цветовой тон) представлен числом от 0 до 255, пиксели четного оттенка могут представлять бит "0", а пиксели с нечетным оттенком - бит "1". Человеческому глазу было бы трудно обнаружить такую разницу в картине.
Это старая идея, и в этой статье обсуждается, как можно скрыть данные таким образом: Сжатие данных высокой емкости в JPEG-сжатых изображениях (2004)
Ответ 3
В общем, скрытие файла в другом файле - это практика, известная как Steganography. Метод, описанный в приведенной вами ссылке, просто объединяет .rar
в конец .jpg
с помощью оператора +
, используя различные заголовки каждого типа файла. @user3344003 отлично справляется с объяснением, почему это работает в его/ее ответе. Это не искажает изображение, потому что данные изображения остаются неизменными.
Другим распространенным методом скрытия файла в изображении является использование младшего значащего бита (LSB) каждого байта. Способ, которым это выполняется, - заменить каждый 8-й бит в битовом потоке изображения следующим битом файла, который вы хотите скрыть. Это работает, потому что цвета изображения могут быть искажены незначительно, не будучи легко воспринятыми человеческим глазом. При таком подходе размер изображения на диске не будет расти, как в методе из вашей ссылки. Это свидетельствует о том, что скрытый файл намного сложнее обнаружить. Подробный обзор этого и других методов Стеганографии см. В этой статье Брет Данбар.
Ответ 4
есть простой алгоритм, который я реализовал с помощью matlab. если вы разделите изображение на 8 бит. самый старший бит имеет самую ценную информацию, и вы можете удалить бит 0 и бит 1 без каких-либо изменений на исходном изображении. поэтому вы можете поместить свой файл вместо бит 0 и 1. Я видел этот алгоритм в книге anil.k.jain.