2016-08-04 10 views
2

Так что я немного играю со стеганографией, а после текста/изображений/звука/видео я пытаюсь сделать что-то с исполняемыми файлами. Известный способ размещения скрытого сообщения после EOF в этих файлах. Он работает для меня до определенного момента, но мне интересно, могу ли я начать чтение скрытого сообщения только после EOF, а не всех байтов.Чтение байтов только после разметки EOF в C#

У меня есть код, который читать EXE-файл в массив байтов и поместить дополнительные данные в этих байтах:

public byte[] CreateHiddenMessage(byte[] container, byte[] message) 
{ 
    byte[] newArray = new byte[container.Length + message.Length]; 

    //copy original bytes 
    for (int i = 0; i < container.Length; i++) 
    { 
     newArray[i] = container[i]; 
    } 

    //add hidden info 
    for (int i = 0; i < message.Length; i++) 
    { 
     newArray[i + container.Length] = message[i]; 
    } 

    return newArray; 
} 

Затем я сохранить эти байты без каких-либо проблем, как:

public static void WriteToFile(String name, byte[] bytesToSave) 
{ 
    System.IO.File.WriteAllBytes(name, bytesToSave); 
} 

И теперь это проблема, с которой я сталкиваюсь. Новый исполняемый файл отлично работает, у него есть эти дополнительные байты, но когда я пытаюсь найти скрытое сообщение, я должен пройти все эти байты и напечатать их в своем приложении (сначала будет множество случайных знаков, а затем фактическое сообщение).

Есть ли способ начать чтение этих скрытых байтов (и преобразование в символы) только после появления разметки EOF? Я знаю, что нет такой вещи, как «характер EOF», но все же, какие-то идеи?

Моя единственная идея заключалась в том, чтобы поместить какой-то код заголовка в начале сокрытия сообщения в исходном файле, например «## $$ ## [message]», а затем после прочтения всех байтов только начать конвертирование символов после этого кода. Но я бы хотел этого избежать!

+0

Не избегайте этого. Сделай это. Или, в самом конце сообщения, добавьте 32-битное число с точной длиной сообщения. Затем прочитайте только то количество байт с конца. –

+1

Мое лучшее предложение состоит в том, чтобы добавить длину сообщения в конце файла в качестве примера 45, тогда вы бы прочитали 45 символов из последней позиции, так что вам не нужно читать все символы, чтобы найти ваше сообщение , вы знаете, где находится ваше сообщение и как долго оно находится. – Marko

+0

О, это на самом деле действительно хорошая идея, чтобы поместить число, указывающее длину скрытого сообщения. Я применим его к коду. Таким образом, мне не нужно проходить через все байты (и для exe-файлов, которые часто используются для них) с низкой стоимостью (например, 4 дополнительных байта для 32-битного номера в конце сообщения). –

ответ

1

Итак, я решил пойти с идеей Gerardo Grignoli и написать длину скрытого сообщения в конце исполняемого файла, содержащего сообщение.