Стеганография в изображении

Пока что я открыл изображение в шестнадцатеричном редакторе и посмотрел байты. Тем не менее, по жизни я не могу определить звук. Я провел дни над этим. Я даже попытался открыть файл (как "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);
}

Другие вопросы по тегам