【问题标题】:Read bytes only after EOF markup in c#仅在 c# 中的 EOF 标记之后读取字节
【发布时间】:2016-12-10 22:59:07
【问题描述】:

所以我正在玩一些隐写术,在文本/图像/声音/视频之后,我试图对可执行文件进行一些操作。有一种已知的方法可以在这些文件中的 EOF 之后放置隐藏消息。它在某种程度上对我有用,但我想知道我是否只能在 EOF 之后才开始阅读隐藏消息,而不是所有字节。

我有将 .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个字符,这样你就不需要阅读找到您的消息的所有字符,您就知道消息的位置和长度。
  • 哦,这实际上是个好主意,放置表示隐藏消息长度的数字。我将把它应用到代码中。这样我就不需要以低成本(比如消息末尾的 32 位数字的 4 个额外字节)遍历所有字节(对于 exe 文件,它通常是很多字节)。

标签: c# eof steganography


【解决方案1】:

所以我决定采用Gerardo Grignoli 的想法,并在保存消息的可执行文件末尾写入隐藏消息的长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多