Как изменить файл .exe в С#?

Я хочу изменить 4 байта по определенному адресу .exe. Я пробовал это:

string path = @"C:\test\mod.exe";

if (File.Exists(path))
{
    using (BinaryWriter stream = new BinaryWriter(File.Open(path, FileMode.Open)))
    {
        stream.BaseStream.Position = 0x0032D837; 
        stream.Write(StringToByteArray("00050000"), 0, 4);
    }
}

StringToByteArray() делается так:

public static byte[] StringToByteArray(string hex)
        {
            return Enumerable.Range(0, hex.Length)
                             .Where(x => x % 2 == 0)
                             .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                             .ToArray();
        }

Он находит exe, но ничего не меняется, так как же правильно? Также хочу добавить, что я могу легко изменить его вручную в шестнадцатеричном редакторе HxD, но мне нужна была программа для этого.


person Anonymous55    schedule 25.07.2016    source источник
comment
Пока ничего не работает Есть ли ошибка, просто ничего не меняется?   -  person Khalil Khalaf    schedule 25.07.2016
comment
В exe ничего не меняется   -  person Anonymous55    schedule 25.07.2016
comment
@ Anonymous55: Вы активно следите за адресами исполняемых файлов, чтобы убедиться, что они на самом деле не меняются? Как вы проверяете, что ничего не меняется?   -  person Ingenioushax    schedule 25.07.2016
comment
я использовал dabugger после того, как я запустил программу, и ее все еще те же байты по этому смещению   -  person Anonymous55    schedule 25.07.2016
comment
обновленный вопрос, попробовал с BinaryWriter, как было предложено, и все равно ничего не изменилось...   -  person Anonymous55    schedule 25.07.2016
comment
Это может показаться глупым, но вы пробовали отключить антивирус &&|| Защита от вредоносных программ?   -  person Kevin B Burns    schedule 25.07.2016
comment
да у меня даже сейчас ни один не работает   -  person Anonymous55    schedule 25.07.2016
comment
Кроме того, попробуйте прочитать .exe в байт [], измените его, а затем запишите либо в отдельный файл, либо с помощью File.Create и посмотрите, имеет ли это значение.   -  person Kevin B Burns    schedule 25.07.2016
comment
Можете ли вы показать мне пример, который соответствует моему коду, пожалуйста?   -  person Anonymous55    schedule 25.07.2016
comment
@ Anonymous55 это маловероятно, но вы не забыли вызвать метод .close()? Он не сохранится, если он не будет вызван.   -  person Jeremy Kato    schedule 25.07.2016
comment
@ Anonymous55 Исполняемый файл не загружается напрямую в память 1: 1. Таким образом, адрес, который вы найдете во время выполнения, не сохраняется в адресе в файле .exe. Также, если файл запакован, вы можете даже не найти тот самый aob в .exe файле.   -  person Xiaoy312    schedule 25.07.2016
comment
@ Xiaoy312 Xiaoy312 да, я знаю, смещение правильное, я могу изменить его в любом шестнадцатеричном редакторе.   -  person Anonymous55    schedule 25.07.2016


Ответы (1)


Фиксированный! На самом деле оказывается, что защитник Windows вызывал беспорядок :(

person Anonymous55    schedule 25.07.2016