Стеганография в изображении
Пока что я открыл изображение в шестнадцатеричном редакторе и посмотрел байты. Тем не менее, по жизни я не могу определить звук. Я провел дни над этим. Я даже попытался открыть файл (как "Raw Data") в Audacity и воспроизвести его. Ничего, кроме "шума". Пытался создать гистограмму / анализ частоты, но ничего.
Любая помощь будет оценена.
1 ответ
Стеганография обычно работает, скрывая второе изображение или некоторые данные в младших битах другого изображения. Эти значения становятся очень незначительными в целом и оказывают незначительное влияние на визуальный вид изображения.
Чтобы раскрыть эти вторые данные, вы маскируете верхние биты, а затем обычно увеличиваете оставшиеся значения.
Тем не менее, вы должны знать заранее:
- Сколько младших битов используется (два очень распространены для вторичных изображений)
- Как организованы оставшиеся данные (если не изображение):
- Это (немного) масштабируется, сколько
- в каком порядке (линии сканирования по горизонтали, вертикали...).
- Все ли цветовые компоненты используются? Какой и как данные распределяются по компонентам...
- Это аудиофайл или аудиоданные
- Являются ли полученные данные сжатыми, зашифрованными,...
- Для аудио требуются значения со знаком, значения, подписанные в данных, они сдвинуты... (это крадет один бит, что означает, что байты, вероятно, должны быть упакованы, чтобы произвести что-то слышимое)
и т.п.
Без этой информации это довольно бесполезно (вы можете попробовать вероятные предположения, но они будут предположениями, и вы можете делать это в течение очень долгого времени).
В любом случае, я предоставил основание ниже, показывающее процесс, но то, что остается, и если оно извлечено правильно, практически "невозможно" определить, не зная, как организованы исходные данные:
Вот результат этого процесса с использованием изображения, которое известно заранее, чтобы скрыть другое изображение (кошку) в младших 2 битах:
var img = new Image;
img.onload = unstegano;
img.crossOrigin = "";
img.src = "//i.imgur.com/DkCZMJN.png"; // contains a hidden image
document.body.appendChild(img);
function unstegano() {
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d");
canvas.width = this.naturalWidth;
canvas.height = this.naturalHeight;
ctx.drawImage(this, 0, 0);
// get pixels
var idata = ctx.getImageData(0, 0, canvas.width, canvas.height),
data = idata.data, i = 0, len = data.length;
while(i < len) {
data[i] = (data[i++] & 3)<<6; // masks two first bits, shifts it to scale it
data[i] = (data[i++] & 3)<<6;
data[i] = (data[i++] & 3)<<6;
i++
}
ctx.putImageData(idata, 0 ,0);
document.body.appendChild(canvas);
}
С помощью прилагаемого изображения вы получите нечто, похожее на шум, но это не так важно, поскольку аудиоданные в любом случае будут создавать шумовое изображение - ваша задача сейчас состоит в том, чтобы что-то сделать из этого шума (или "шума"):
var img = new Image;
img.onload = unstegano;
img.crossOrigin = "";
img.src = "//i.imgur.com/IpaDzB4.png";
document.body.appendChild(img);
function unstegano() {
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d");
canvas.width = this.naturalWidth;
canvas.height = this.naturalHeight;
ctx.drawImage(this, 0, 0);
// get pixels
var idata = ctx.getImageData(0, 0, canvas.width, canvas.height),
data = idata.data, i = 0, len = data.length;
while(i < len) {
data[i] = (data[i++] & 1)<<7; // masks first bit, shifts it to scale it
data[i] = (data[i++] & 1)<<7;
data[i] = (data[i++] & 1)<<7;
i++
}
ctx.putImageData(idata, 0 ,0);
document.body.appendChild(canvas);
}