Ну, раз любая помощь, то вот:
using System;
using System.IO;
class Program
{
static void Main()
{
string filePath = @"D:\BlueStacks\Client\Game.exe";
string searchHex = "1B300A009A00000080000011140A282F00000A72D52E0070188D140000012516286502000AA225177254560170A2289300000A286602000A0B0728A40D00060B0728C00D00060B0728A50D00061416282001000A16171616722D080070284504000A0C726A56017007289500000A286300000A728A56017008289500000A286300000A0828EF02000A0ADE180D72B4560170096F2A00000A289500000A281501000ADE00062A000001100000000002007E80001817000001";
string replacementHex = ""; // Здесь вы можете указать новое значение шестнадцатеричного кода
ReplaceHexInFile(filePath, searchHex, replacementHex);
Console.WriteLine("Замена завершена.");
Console.ReadLine();
}
static void ReplaceHexInFile(string filePath, string searchHex, string replacementHex)
{
byte[] searchBytes = StringToByteArray(searchHex);
byte[] replacementBytes = StringToByteArray(replacementHex);
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite))
{
using (BinaryWriter writer = new BinaryWriter(fileStream))
{
byte[] buffer = new byte[searchBytes.Length];
int bytesRead;
do
{
bytesRead = fileStream.Read(buffer, 0, buffer.Length);
if (ByteArrayEquals(buffer, searchBytes))
{
writer.Seek(-buffer.Length, SeekOrigin.Current);
writer.Write(replacementBytes);
return;
}
} while (bytesRead == buffer.Length);
}
}
throw new InvalidOperationException("Не удалось найти и заменить указанный шестнадцатеричный код.");
}
static byte[] StringToByteArray(string hex)
{
int numberChars = hex.Length / 2;
byte[] bytes = new byte[numberChars];
using (var sr = new StringReader(hex))
{
for (int i = 0; i < numberChars; i++)
bytes[i] = Convert.ToByte(new string(new char[2] { (char)sr.Read(), (char)sr.Read() }), 16);
}
return bytes;
}
static bool ByteArrayEquals(byte[] array1, byte[] array2)
{
if (array1 == null || array2 == null || array1.Length != array2.Length)
return false;
for (int i = 0; i < array1.Length; i++)
{
if (array1[i] != array2[i])
return false;
}
return true;
}
}
Обратите внимание, что в коде нужно указать путь к файлу Game.exe в переменной filePath, а новое значение шестнадцатеричного кода вы можете задать в переменной replacementHex.
После запуска программы она откроет файл, найдет указанный шестнадцатеричный код и заменит его на новое значение. Если шестнадцатеричный код не будет найден, программа выдаст исключение.
Убедитесь, что у вас есть права доступа к файлу, чтобы программа могла открыть его для чтения и записи.
Вот моя проблема. У меня есть файл, который я хочу отредактировать. Конечно, я могу использовать шестнадцатеричный редактор, чтобы отредактировать его, но мне нужно создать программу для редактирования этого конкретного файла. Предположим, что мне надо стереть байты "1B300A009A00000080000011140A282F00000A72D52E0070188D140000012516286502000AA225177254560170A2289300000A286602000A0B0728A40D00060B0728C00D00060B0728A50D00061416282001000A16171616722D080070284504000A0C726A56017007289500000A286300000A728A56017008289500000A286300000A0828EF02000A0ADE180D72B4560170096F2A00000A289500000A281501000ADE00062A000001100000000002007E80001817000001" в файле Game.exe по пути "D:\BlueStacks\Client\Game.exe". Как я могу создать программу, которая изменит значение этого шестнадцатеричного кода, и только этого кода, одним нажатием кнопки?
Я нашел ресурсы, которые говорят о похожих вещах, но я не могу найти помощь в точной проблеме.
Любая помощь будет оценена!