Так что я немного играю со стеганографией, а после текста/изображений/звука/видео я пытаюсь сделать что-то с исполняемыми файлами. Известный способ размещения скрытого сообщения после 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]», а затем после прочтения всех байтов только начать конвертирование символов после этого кода. Но я бы хотел этого избежать!
Не избегайте этого. Сделай это. Или, в самом конце сообщения, добавьте 32-битное число с точной длиной сообщения. Затем прочитайте только то количество байт с конца. –
Мое лучшее предложение состоит в том, чтобы добавить длину сообщения в конце файла в качестве примера 45, тогда вы бы прочитали 45 символов из последней позиции, так что вам не нужно читать все символы, чтобы найти ваше сообщение , вы знаете, где находится ваше сообщение и как долго оно находится. – Marko
О, это на самом деле действительно хорошая идея, чтобы поместить число, указывающее длину скрытого сообщения. Я применим его к коду. Таким образом, мне не нужно проходить через все байты (и для exe-файлов, которые часто используются для них) с низкой стоимостью (например, 4 дополнительных байта для 32-битного номера в конце сообщения). –