Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Обязательно на языке программирования c#!

Вай? Мастер (2026), на голосовании 1 год назад
Обязательно на языке программирования c#!

Вот моя проблема. У меня есть файл, который я хочу отредактировать. Конечно, я могу использовать шестнадцатеричный редактор, чтобы отредактировать его, но мне нужно создать программу для редактирования этого конкретного файла. Предположим, что мне надо стереть байты "1B300A009A00000080000011140A282F00000A72D52E0070188D140000012516286502000AA225177254560170A2289300000A286602000A0B0728A40D00060B0728C00D00060B0728A50D00061416282001000A16171616722D080070284504000A0C726A56017007289500000A286300000A728A56017008289500000A286300000A0828EF02000A0ADE180D72B4560170096F2A00000A289500000A281501000ADE00062A000001100000000002007E80001817000001" в файле Game.exe по пути "D:\BlueStacks\Client\Game.exe". Как я могу создать программу, которая изменит значение этого шестнадцатеричного кода, и только этого кода, одним нажатием кнопки?

Я нашел ресурсы, которые говорят о похожих вещах, но я не могу найти помощь в точной проблеме.

Любая помощь будет оценена!
Голосование за лучший ответ
enddes- Гуру (3281) 1 год назад
Ну, раз любая помощь, то вот:

 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.

После запуска программы она откроет файл, найдет указанный шестнадцатеричный код и заменит его на новое значение. Если шестнадцатеричный код не будет найден, программа выдаст исключение.

Убедитесь, что у вас есть права доступа к файлу, чтобы программа могла открыть его для чтения и записи.
Похожие вопросы