Предположим, я выделил адрес, на котором размещена моя кодовая пещера, используя VirtualAllocEx
(он возвращает адрес), и я записываю свой код на этот адрес, используя WriteProcessMemory()
.
Вот вопрос:
Как мне написать прыжок в мою кодекаву? Я знаю, что скачки начинаются с "E9
", но как мне преобразовать адрес, возвращаемый VirtualAllocEx
, в правильный UInt32 (dword), чтобы отладчик / компилятор понял инструкцию?
Например:
Я нахожусь по адресу 00402020
(OEP собственного приложения). Пишу переход на 004028CF
(пустое место) "JMP 004028CF
". Инструкция в байтах выглядит так:
CPU Disasm
Address Hex dump Command Comments
00402020 E9 AA080000 JMP 004028CF
«E9
» - это то, как мы обозначаем JMP. Что насчет "AA080000
", как мне его сгенерировать?
Мне нужно сделать что-то подобное, чтобы я мог инициализировать JMP для моей кодекавы, которая будет расположена по адресу, возвращаемому VirtualAllocEx()
.
Любая помощь будет принята с благодарностью!
Заранее спасибо.