I want to take a binary file (exe, msi, dll, whatever) and be able to actually "see" the binary code or whatever base I'd like (hexadecimal whatever). Figured the easiest way would be just to output the code into a txt so I can examine it.
Whats the best and easiest way to do this? Basically I am looking to convert the binary code into a picture for a project of mine.
Similarly, it would be nice if I could take some binary code, and then convert it into a binary file.
What are your methods for doing this, I listed C, C++, and C# because these seem to be the fastest programming languages and I figured this may take some time. I guess I am more interested in an answer in C, but I am mostly looking for some logic behind this.
Here's a way to pack the bytes into an image... the fun part is if you record the original file length and use a lossless image format you could safely extract the binary data later.
Packed as 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);
}
Packed as Black & White Binary...
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);
}
... and yeah, it looks like noise
I'm not quite sure what you are trying to do, but it sounds a bit like you're looking for a hex editor.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With