如何在已编译的 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.ReadAllBytes
和IO.File.WriteAllBytes
。
在字节数组中查找字节序列的问题已得到解答。 byte[] array pattern search
我正在尝试创建一个将修补特定应用程序的 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.ReadAllBytes
和IO.File.WriteAllBytes
。
在字节数组中查找字节序列的问题已得到解答。 byte[] array pattern search