如何将二进制文件转换为另一个二进制表示,如图像

Par*_*roX 5 c c# c++

我想要一个二进制文件(exe,msi,dll,无论如何),并能够实际"看到"二进制代码或我想要的任何基础(十六进制).想到最简单的方法就是将代码输出到txt中,这样我就可以检查它了.

什么是最好最简单的方法呢?基本上我希望将二进制代码转换为我的项目的图片.

同样,如果我可以采用一些二进制代码,然后将其转换为二进制文件,那将是很好的.

你有什么方法可以做到这一点,我列出了C,C++和C#,因为它们似乎是最快的编程语言,我认为这可能需要一些时间.我想我对C中的答案更感兴趣,但我主要是在寻找这背后的一些逻辑.

Mat*_*ted 13

这是一种将字节打包成图像的方法......有趣的是,如果您记录原始文件长度并使用无损图像格式,您可以安全地以后提取二进制数据.

打包为ARGB ......

var exefile = Directory.GetFiles(".", "*.exe").First();
var fi = new FileInfo(exefile);

var dimension = (int)Math.Sqrt((fi.Length + 1d) / 4);

using (var bitmap = new Bitmap(dimension, dimension + 2))
{
    //store the file length in the first pixel.
    bitmap.SetPixel(0, 0, Color.FromArgb((int)fi.Length));

    var buffer = new byte[fi.Length + 4 - fi.Length % 4];
    Array.Copy(File.ReadAllBytes(exefile), buffer, fi.Length);

    int x = 1, y = 0;
    for (var offset = 0; offset < buffer.Length; offset += 4)
    {
        var colorValue = BitConverter.ToInt32(buffer, offset);
        bitmap.SetPixel(x, y, Color.FromArgb(colorValue));

        x++;
        if (x >= dimension)
        {
            x = 0;
            y++;
        }
    }

    bitmap.Save(Path.ChangeExtension(exefile, ".png"), ImageFormat.Png);
}
Run Code Online (Sandbox Code Playgroud)

打包为黑白二进制......

var width = (int)Math.Sqrt(fi.Length * 8);
width = width + 8 - (width % 8);
var length = (int)(fi.Length * 8 / width);

Func<byte, int, Color> getcolor =
        (b, m) => (b & m) == m ? Color.Black : Color.White;

using (var bitmap = new Bitmap(width, length + 1))
{
    var buffer = File.ReadAllBytes(exefile);

    int x = 0, y = 0;
    foreach (var @byte in buffer)
    {
        bitmap.SetPixel(x + 0, y, getcolor(@byte, 0x80));
        bitmap.SetPixel(x + 1, y, getcolor(@byte, 0x40));
        bitmap.SetPixel(x + 2, y, getcolor(@byte, 0x20));
        bitmap.SetPixel(x + 3, y, getcolor(@byte, 0x10));

        bitmap.SetPixel(x + 4, y, getcolor(@byte, 0x8));
        bitmap.SetPixel(x + 5, y, getcolor(@byte, 0x4));
        bitmap.SetPixel(x + 6, y, getcolor(@byte, 0x2));
        bitmap.SetPixel(x + 7, y, getcolor(@byte, 0x1));

        x += 8;
        if (x >= width)
        {
            x = 0;
            y++;
        }
    }

    bitmap.Save(Path.ChangeExtension(exefile, ".tif"), ImageFormat.Tiff);
}
Run Code Online (Sandbox Code Playgroud)

......是的,它看起来像是噪音


Tho*_*mas 7

我不太确定你要做什么,但听起来有点像你正在寻找一个十六进制编辑器.

  • 你不能在头脑中从十六进制切换到二进制?这是十六进制的全部要点.这实际上是十六进制编辑器在生活中的全部目的,所以几乎可以肯定你想要的. (2认同)