我正在尝试创建一个修补某个应用程序的C#应用程序。作为一个例子,我有8个文件,所有8个文件都需要以类似的方式进行修补(它们具有相同的十六进制值来替换,但是在不同的偏移量下)。我需要我的程序来找到这些十六进制值的位置,并替换它们。我无法想办法让我的程序搜索十六进制值。任何帮助将不胜感激。目前,此是我的代码:
private const string SoftwareDirectory = @"C:\Program Files\ExampleSoftware";
private const string HexCode = "C8 49 73 B9";
private const string IgnoreEXE = "ignoreMe.exe";
static void Main(string[] args)
{
List<string> allTheFiles = FindFiles(SoftwareDirectory, "*.exe", SearchOption.AllDirectories, IgnoreEXE);
allTheFiles.ForEach((string s) =>
{
// Find and replace hex value here, Hex value defined by HexCode, and modified version is C7 49 73 C6, as an example
});
Console.ReadLine();
}
static List<string> FindFiles(string directory, string searchPattern, SearchOption searchOption, string ignoreFiles = null)
{
List<string> files = new List<string>();
foreach (string file in Directory.EnumerateFiles(directory, searchPattern, searchOption))
{
if (!file.Contains(ignoreFiles))
{
files.Add(file);
}
}
return files;
}
答案 0 :(得分:3)
它是一个exe并不重要(除了你可能没有权限写入Program Files目录,或者因为它正在运行而无法写入可执行文件)。只需将其视为二进制文件即可。
使用IO.File.ReadAllBytes
和IO.File.WriteAllBytes
。
已经回答了在字节数组中查找字节序列的问题。 byte[] array pattern search