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

时间:2018-02-16 17:57:58

标签: c# .net patch

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

1 个答案:

答案 0 :(得分:3)

它是一个exe并不重要(除了你可能没有权限写入Program Files目录,或者因为它正在运行而无法写入可执行文件)。只需将其视为二进制文件即可。

使用IO.File.ReadAllBytesIO.File.WriteAllBytes

已经回答了在字节数组中查找字节序列的问题。 byte[] array pattern search