如何在已编译的 exe 中查找和替换某些十六进制值

How to find and replace certain hex value within a compiled exe

我正在尝试创建一个将修补特定应用程序的 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;
    }

它是一个 exe 并不重要(除了您可能没有写入 Program Files 目录的权限,或者可能无法写入可执行文件,因为它是 运行).把它当作一个二进制文件就可以了。

使用IO.File.ReadAllBytesIO.File.WriteAllBytes

在字节数组中查找字节序列的问题已得到解答。 byte[] array pattern search