DarkPower2 Опубликовано 7 января, 2016 Поделиться Опубликовано 7 января, 2016 Проблема в том, что если использовать переход на прямую jmp .................., то прыжок будет на 4 байта, а следующие 4 байта записывается в следующую команду. В этой теме http://forum.gamehacklab.ru/topic/4234-problema-s-adresom-v-x64-igre-c/ посоветовали занести в регистр, а потом прыгать на регистр... Но из-за этого игра просто крашится... Код оригинальных инструкций: Код после инъекции: Сам код инъекции: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 Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 7 января, 2016 Поделиться Опубликовано 7 января, 2016 Правильнее будет сказать...сделать прыжок на 8-битную инструкцию.Для начала зайди в отладчик -> Просмотр -> Показывать метки, и убери галочку с неё. Что бы модуль нормально отображался в отладчике, далее выбираешь брякнутую инструкцию и делаешь АА на неё. Ссылка на комментарий Поделиться на другие сайты Поделиться
DarkPower2 Опубликовано 7 января, 2016 Автор Поделиться Опубликовано 7 января, 2016 Показывать меткиМожет быть модульную адресацию? "Показать метки и так отключена". выбираешь брякнутую инструкцию и делаешь АА на неёНе понял... Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 7 января, 2016 Поделиться Опубликовано 7 января, 2016 Поставь процесс игры на паузу из CE (смотри горячие клавиши)Включи скриптПоставь бряк в дизассемблере на прыжке F5Далее отпускай паузу процесса и сделай так чтобы выполнилась инструкция с инъекцией Затем F7 и по шагам смотри где ошибка (игра вылетает)Там где ошибка, там догадаешься как исправить. Эти действия можно использовать в любой ситуации, когда игра закрывается из-за ошибки. Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 8 января, 2016 Поделиться Опубликовано 8 января, 2016 (изменено) АА это автоассемблер...сделать скрипт на эту инструкцию movss [rbx+000007EC],xmm7, то есть выбираешь её в отладчике жмёшь на:"Инструменты -> автоассемблер -> Появится окно далее шаблон -> Вставить секции -> Инъекция кода.Ну а там уже можешь скриптить\делать внедрения своего кода в эту инструкцию movss [rbx+000007EC],xmm7 Странно как то твой модуль отображается в отладчике...учитывая что твоя метка отключена:В отладчике отображается так: "server.-crt_debugger_hook+2D668A"В скрипте выглядит так: "server.dll"+884A2A Изменено 8 января, 2016 пользователем krocki Ссылка на комментарий Поделиться на другие сайты Поделиться
DarkPower2 Опубликовано 8 января, 2016 Автор Поделиться Опубликовано 8 января, 2016 (изменено) АА это автоассемблер...сделать скрипт на эту инструкцию 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" - это в доте так... Изменено 8 января, 2016 пользователем DarkPower2 Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 8 января, 2016 Поделиться Опубликовано 8 января, 2016 ну так сделай прыг назад через регистр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] Ссылка на комментарий Поделиться на другие сайты Поделиться
DarkPower2 Опубликовано 8 января, 2016 Автор Поделиться Опубликовано 8 января, 2016 (изменено) +тебе не обязательно сохр регистр, посмотри какие там ниже не юзаются и выбери временный из RAX RCX RDX R8 R9 R10 R11 +лучше оформи через call [xxxxx]Можете показать пример через call? Изменено 8 января, 2016 пользователем DarkPower2 Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 8 января, 2016 Поделиться Опубликовано 8 января, 2016 (изменено) пробуй: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 Изменено 8 января, 2016 пользователем gmz Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения