Перейти к содержанию

Проблема С Трейнером На C#.


Рекомендуемые сообщения

Я пишу трейнер на C#, он должен сделать иньекцию кода, но когда я записываю JMP ( 0xE9 ) и адрес куда прыгнуть ( 0x004121E2 ) , то записывается в MemoryViewer нужный адрес, а на самом деле прыгает в совершенно другой адрес.

Подскажите как правильно записывать адреса в память.

Изменено пользователем Pentester
Картинки надо уменьшать перед заливкой на форум и прятать под спойлер.
Ссылка на комментарий
Поделиться на другие сайты

Я пишу трейнер на C#, он должен сделать иньекцию кода, но когда я записываю JMP ( 0xE9 ) и адрес куда прыгнуть ( 0x004121E2 ) , то записывается в MemoryViewer нужный адрес, а на самом деле прыгает в совершенно другой адрес.

Подскажите как правильно записывать адреса в память.

 

 

 

Всё зависит от первого байта команды. Ты используешь E9 - это близкий ОТНОСИТЕЛЬНЫЙ переход, смещение 4-байтовое. В этом случае опкоды для перехода на 0x004121E2 такие:

E9 F6 FF FF FF 

Если указать смещение 00 00 00 00, то будет произведён переход на след. инструкцию. Смещение считается от последнего байта данной инструкции, т. е. 004121EB. Чтобы перейти на E2 нужно сделать: от последнего байта инструкции до первого 4 шага(будем на E7) + 5 шагов до E2. Смещение FF FF FF FF указывает на последний байт команды (004121EB). 

Итого: (FF - 4) - 5 = FB - 5 = F6.

 

Для экономии места лучше использовать короткий прыжок (Short 0xEB) со смещением -128 +127. Опкоды такие

EB F9

А если ты хочешь писать абсолютный адрес, тогда прыжок имеет код 0xEA(jmp FAR). Опкод

EA E2 21 41 00

Если хочешь почитать, например, здесь, начиная с раздела "Команда безусловного перехода JMP(Переход, прыжок =”JUMP”)"

Изменено пользователем Xipho
Длинные посты не нужно цитировать целиком, достаточно первых несколько строк, чтобы было понятно, к кому обращаешься.
Ссылка на комментарий
Поделиться на другие сайты

В случае с E9 - прыжок записывается как разница между текущим адресом и адресом, куда надо прыгнуть.

Согласен, только разница между последним байтом инструкции и куда прыгнуть, а длина инструкции прыжка 5 байт. Если вперед, то всё просто, назад - нужно учитывать эти 5 байт. Проверено на себе)

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.