четверг, 10 мая 2012 г.

Текстовая стеганография: Метод изменения порядка следования маркеров конца строки


Метод изменения порядка следования маркеров конца строки CR/LF использует индифферентность подавляющего числа средств отображения текстовой информации к порядку следования символов перевода строки (CR) и возврата каретки (LF), ограничивающих строку текста. Традиционный порядок следования CR/LF соответствует 0, а инвертированный LF/CR означает 1.
Описанный алгоритм скрытия данных реализует фрагмент программы:

if (encoding)
{
currentLine = currentLine.TrimEnd('\n', '\r');

// получаем сладший бит текущего символа стего
if ((c & 1) == 1)
// будем кодировать "единицу"
currentLine += "\n\r"; // два пробела в конце строки кодирует единицу
else
// будем кодировать "ноль"
currentLine += "\r\n"; // один пробел в конце строки кодирует ноль

// переходим к следующему биту
c = c >> 1;
}

Абонент-получатель сможет извлечь скрытые данные:

// раскодируем бит
if (clLen >= 2) // возможно строка содержит кодированный бит стего (а именно один или два пробела)
{
if (currentLine[clLen - 2] == '\n' && currentLine[clLen - 1] == '\r')
{
// раскодируем единицу
c = c | 0x80; // 1000 0000
decoding = true;
}
else if (currentLine[clLen - 2] == '\r' && currentLine[clLen - 1] == '\n')
{
// раскодируем ноль
c = c & 0x7F; // 0111 1111
decoding = true;
}
else
decoding = false;
}


// переходим к следующему биту
c = c >> 1;

            Пропускная способность метода достигает 0.15% (аналогично методу хвостовых пробелов). Этот метод успешно работает, если противник пользуется для просмотра файлов командой type режима командной строки или просмотром текстовых файлов в программах Norton Commander, Far или Windows Commander. Однако, большинство текстовых редакторов Windows (например WordPad) некорректно обрабатывают измененный порядок следования маркеров конца строки. Несмотря на отмеченный недостаток, метод очень неплох, и может быть использован при сокрытии данных для их секретной передачи.

2 комментария:

  1. Анонимный13 мая 2012 г., 3:31

    Доброго времени суток! Подскажите, пожалуйста, CR/LF сохраняются если текст из файла отображается в Memo и считывается оттуда? или надо считывать строки из файла? или самим приписать? и как их можно увидеть??

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      В MEMO поле я думаю последовательность CR/LF сохраняется, поскольку там по сути содержится обычная строка. Тем не менее следует помнить что некоторые терминалы (и их эмуляторы) могут также проводить различные преобразования символов (например, LF → CR+LF, CR → CR+LF) при вводе и выводе текста.
      При работе с файлами безусловно таких проблем нет, терминал может только подправить вывод файла на экран (например при помощи команды cat), но не меняет содержимого файла. Также следует помнить что в Unix-подобных системах используется только символ LF, символ CR отображается как служебный.
      Увидеть эти символы можно при двоичном просмотре, в ASCII CR имеет код 0x0D LF - 0x0A.

      Удалить