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

jmp на 8 байтовый адрес


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

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

 

В этой теме http://forum.gamehacklab.ru/topic/4234-problema-s-adresom-v-x64-igre-c/ посоветовали занести в регистр, а потом прыгать на регистр... Но из-за этого игра просто крашится...

 

Код оригинальных инструкций:

1d3fcdbd5fa36d65354a71560e701f17.png

 

Код после инъекции:

 669ef1be3bf12b63b5599b3a2704f9ab.png

 

Сам код инъекции:

newmem:originalcode://mov R13, ["server.dll"+01C508B8]//mov R13, [R13]//mov R13, [R13+48]//mov R13, rbx//add R13, 590//cmp rbx, [R13]//je exitmovss [rbx+000007EC],xmm7exit:movss xmm1, [rbx+7EC]jmp returnhere"server.dll"+884A2A:push RDImov RDI, newmemjmp RDInopnopreturnhere:pop RDI
Ссылка на комментарий
Поделиться на другие сайты

Правильнее будет сказать...сделать прыжок на 8-битную инструкцию.

Для начала зайди в отладчик -> Просмотр -> Показывать метки, и убери галочку с неё. Что бы модуль нормально отображался в отладчике, далее выбираешь брякнутую инструкцию и делаешь АА на неё.

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

Показывать метки

Может быть модульную адресацию? "Показать метки и так отключена".

 

выбираешь брякнутую инструкцию и делаешь АА на неё

Не понял...

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

Поставь процесс игры на паузу из CE (смотри горячие клавиши)

Включи скрипт

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

Далее отпускай паузу процесса и сделай так чтобы выполнилась инструкция с инъекцией 

Затем F7 и по шагам смотри где ошибка (игра вылетает)

Там где ошибка, там догадаешься как исправить.

 

Эти действия можно использовать в любой ситуации, когда игра закрывается из-за ошибки.

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

АА это автоассемблер...сделать скрипт на эту инструкцию movss [rbx+000007EC],xmm7, то есть выбираешь её в отладчике жмёшь на:

"Инструменты -> автоассемблер -> Появится окно далее шаблон -> Вставить секции -> Инъекция кода.

Ну а там уже можешь скриптить\делать внедрения своего кода в эту инструкцию movss [rbx+000007EC],xmm7

 

Странно как то твой модуль отображается в отладчике...учитывая что твоя метка отключена:

В отладчике отображается так: "server.-crt_debugger_hook+2D668A"

В скрипте выглядит так: "server.dll"+884A2A

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

АА это автоассемблер...сделать скрипт на эту инструкцию movss [rbx+000007EC],xmm7, то есть выбираешь её в отладчике жмёшь на:

"Инструменты -> автоассемблер -> Появится окно далее шаблон -> Вставить секции -> Инъекция кода.

Ну а там уже можешь скриптить\делать внедрения своего кода в эту инструкцию movss [rbx+000007EC],xmm7

 

Странно как то твой модуль отображается в отладчике...учитывая что твоя метка отключена:

В отладчике отображается так: "server.-crt_debugger_hook+2D668A"

В скрипте выглядит так: "server.dll"+884A2A

Ну я так и делал, просто потом мне надо будет внедрять это все в память через c#... И там нету асмблеровсой вставки, все по хексу...  А делать dll на c++ не вариант.  

В четинейдже прыгает на 8 байтный адрес с помощю 4 байтов (отниманием "куда прыжок" от "откуда прыжок" и "колово байт на прыжок" -  не помогает - прыгает на неверный адрес), я уже пробовал по разному, самый лучший вариант - поместить 8 байтный адрес в регистр, а потом прыгать не регистр, но при таком раскладе игра крашится...

 

"server.-crt_debugger_hook+2D668A" - это в доте так...

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

ну так сделай прыг назад через регистр

alloc(originalcode,4096)originalcode://mov R13, ["server.dll"+01C508B8]//mov R13, [R13]//mov R13, [R13+48]//mov R13, rbx//add R13, 590//cmp rbx, [R13]//je exitmovss [rbx+000007EC],xmm7//exit:movss xmm1,[rbx+7EC]mov rcx,returnherejmp rcx"server.dll"+884A2A:push rcxmov rcx,originalcodejmp rcxnopnopreturnhere:pop rcx

+тебе не обязательно сохр регистр, посмотри какие там ниже не юзаются и выбери временный из RAX RCX RDX R8 R9 R10 R11

+лучше оформи через call [xxxxx]

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

+тебе не обязательно сохр регистр, посмотри какие там ниже не юзаются и выбери временный из RAX RCX RDX R8 R9 R10 R11

+лучше оформи через call [xxxxx]

Можете показать пример через call? Изменено пользователем DarkPower2
Ссылка на комментарий
Поделиться на другие сайты

пробуй:

lea rcx,[InfiniteNitroHook]mov word[rax],0x15FF ;call qword[xxx]mov dword[rax+2],0x2 ;skip jmpmov word[rax+6],0x0AEB ;jmp word+qword+trashmov [rax+8],rcx

там после movss xmm1,[rbx+7EC] поставишь 0xC3 ака ret

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

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

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

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