Hallo.
Ist eigentlich ziemlich einfach. Ich habe dir ein Beispielprogramm geschrieben, ich denke so ists am verständlichsten. (Wenn du schon bissl C#/.net kannst vorrausgesetzt.)
Test-Datei Generator (generate_file.cs)
Code:
using System;
using System.IO;
public class Test
{
public static void Main()
{
Stream strm = File.Create("testfile.bin");
BinaryWriter writer = new BinaryWriter(strm);
Random rnd = new Random((int)DateTime.Now.Ticks);
for (int i = 0; i < 0xFFFF; i++)
writer.Write((byte)rnd.Next());
writer.Close();
strm.Close();
}
}
DateiWertÄnderer *g* (modify_file.cs)
Code:
using System;
using System.IO;
public class Modify
{
public static void Main(string[] args)
{
byte[] vals = new byte[args.Length-2];
for (int i = 0; i < vals.Length; i++)
vals[i] = byte.Parse(args[i+2],System.Globalization.NumberStyles.HexNumber);
new Modify(args[0], int.Parse(args[1],System.Globalization.NumberStyles.HexNumber), vals);
}
public Modify(string file, int offset, params byte[] vals)
{
Stream strm = File.Open(file, FileMode.Open);
Stream strm_new = File.Create("modified_" + file);
BinaryReader reader = new BinaryReader(strm);
BinaryWriter writer = new BinaryWriter(strm_new);
writer.Write(reader.ReadBytes(offset));
foreach (byte b in vals)
{
writer.Write(b);
}
reader.ReadBytes(vals.Length);
byte[] rest = reader.ReadBytes((int)(strm.Length - vals.Length));
writer.Write(rest);
writer.Close();
reader.Close();
strm.Close();
strm_new.Close();
}
}
Das ganze ist so zu benutzen.
Ich habs in die Dateien generate_file.exe und modify_file.exe kompiliert.
Zuerst 'generate_file' aufrufen, damit wir die Datei 'testfile.bin' haben.
Danach öffnete ich diese Datei mit einem Hex-Editor, suchte mir eine nette Stelle raus (also den Offset). In meinem Fall war das
23C
Dort stand folgende Byte-Folge:
.. 77 79 C3 97 DF 49 ..
Wir wollen also 6 Bytes überschreiben. Ich dachte mir damits gleich ersichtlich ist, schreibe ich einfach
FF FF FF FF FF FF drüber.
Also hab ich modify_file so aufgerufen:
modify_file.exe testfile.bin 23C FF FF FF FF FF FF
Wichtig in dem Fall ist, das die hinten wirklich die Bytes einzeln stehen, weil ich die ja in ein Byte-Array schreibe.
So.. Das Programm braucht nicht lange (kommt natürlich auf die Dateigröße an), also gleich mal die neu erstellte Datei geöffnet und nachgesehen. -> Funktioniert.
Ich hoffe du wirst schlau draus, wenn nicht - Frag nach.
MfG,
Weihnachtswiesel