У меня есть проект класса, в котором нам нужно взять 32-битный исполняемый файл, написанный на C ++, разобрать его, изменить код сборки и затем снова собрать его. Мы должны делать что-то вроде хитрых читов в игре.
Я искал несколько часов, и я не могу найти программное обеспечение, которое будет делать это. Я посмотрел на Ollydbg и провел с ним около двух часов и не мог понять, как заставить его работать. Я использовал Cheat Engine, и это действительно сработало для меня — я смог изолировать код, изменяющий адреса, которые меня беспокоили, и заменить его кодом, чтобы оказать благоприятное влияние на игру, но насколько я могу судить, Cheat Engine не имеет возможности перекомпилировать измененный код.
Это довольно низкоуровневый курс по информатике, поэтому, пожалуйста, примите во внимание мой уровень способностей, но если есть какое-либо программное обеспечение или альтернативные способы, которые позволят мне сделать это, я был бы очень признателен. Спасибо!
Поскольку вы упомянули OllyDBG и Cheat Engine, я предполагаю, что вы используете Windows.
Во-первых, вы можете использовать OllyDBG для сохранения файла, но по какой-то причине я не могу найти эту опцию в OllyDBG 2, только в более старых версиях (например, 1.10). Вы можете щелкнуть правой кнопкой мыши на окне кода, а затем copy to executable > all modifications
, Откроется новое окно, щелкните правой кнопкой мыши на новом окне и выберите save file
,
Альтернатива, которая мне действительно нравится, x64dbg. это отладчик / дизассемблер с открытым исходным кодом и имеет возможность сохранять изменения через «патчи».
Другой вариант — применить изменения с помощью шестнадцатеричного редактора, который позволяет изменять любой файл (включая исполняемые файлы) в двоичном формате. Это, конечно, немного сложнее, поскольку вам нужно вручную перевести свои изменения в op-коды, но если ваши изменения не слишком велики или состоят только из изменения некоторых констант, это может быть более быстрым и простым решением. Есть много шестнадцатеричных редакторов, но мой любимый XVI32.
Что мне лично нравится делать, так это изменять память через код с помощью Windows API WriteProcessMemory а также ReadProcessMemory так как это позволяет вам делать это динамически.
Других решений пока нет …