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

code inject и пересчитать смещение call. как ?


budabum

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

есть у меня кусок кода который я копирую в alloc память

внутри перенесённого кода есть call. встал вопрос о пересчёте смещения внутри этого call. как наиболее бескровно это сделать?

E8 EE15FCFF           - call 14212CC10

попробовал в дебаггере сделать вручную - всё верно. а как это теперь сделать в AA или в LUA?

задача усложняется, что я не могу в AA написать call 14212CC10, чит делается совместимым с разными версиями и этот кол будет разным на разных версиях игры

 

я вижу, что надо будет сделать  как-то readasm и потом как-то readmem

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

После опкода Е8 дальше идет смещение до нужного адреса. Алгоритм будет примерно следующий
1. Взять адрес инструкции с этим оригинальным коллом

2. Прибавить к нему взятое опкодов смещение.

3. Записать куда-нибудь полученный адрес

4. Взять адрес инструкции колла в кодкейве (выделенной памяти)

5. Вычесть его из записанного на третьем шаге адреса

6. Записать полученное смещение в опкоды инструкции колла в кодкейве.

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

ну, т.е. сделать рассчёты вручную. 

я по наивности рассчитывал что есть что-то в движке самого CE.

 

если ничего другого нету, придётся пойит этим путём. 

спасибо. пока пошёл так делать.

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

пока думал как на коленке написать рассчёт адреса, как на глаза попалась AA инструкция reassemble.

в общем это и есть тот самый recalculate при переносе относительного кода.

 

reassemble(address)

 

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

Не знал про эту инструкцию. Запрятали

 

Спойлер

alloc(memTestMemory, 0x400)
registerSymbol(memTestMemory)

memTestMemory:
  reassemble("Tutorial-i386.exe"+24B25)
  reassemble("Tutorial-i386.exe"+24B29)
  reassemble("Tutorial-i386.exe"+24B2D)

//// Read Memory
// Tutorial-i386.exe+24B25 - 83 45 EC 01           - add dword ptr [ebp-14],01
// Tutorial-i386.exe+24B29 - 83 7D EC 64           - cmp dword ptr [ebp-14],64
// Tutorial-i386.exe+24B2D - 74 02                 - je Tutorial-i386.exe+24B31

//// Assembled Memory
// memTestMemory - 83 45 EC 01           - add dword ptr [ebp-14],01
// 003F0004      - 83 7D EC 64           - cmp dword ptr [ebp-14],64
// 003F0008      - 0F84 234B0300         - je Tutorial-i386.exe+24B31

 

 

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

23 часа назад, budabum сказал:

AA инструкция reassemble

Это все конечно круто, но я стараюсь обходиться только стандартными ассемблерными приемами, потому что их можно безболезненно перенести в код трейнера на любом подходящем языке.

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

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

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

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