TheErel Опубликовано 1 марта, 2022 Поделиться Опубликовано 1 марта, 2022 Здравствуйте, столкнулся с тем что мне нужно использовать указатель в АА, если делать push,pop всё работает но когда я перемещаюсь по локациям в игре происходит краш. Поэтому нужно как-то загрузить указатель в символ без пуша. Вот пример кода. Спойлер define(address,"UnityPlayer.dll"+1459FB0) define(bytes,8B 02 89 41 20 8B 42 04 89 41 24 8B 42 08 89 41 28 8B 42 0C 89 41 2C 8B 42 10 89 41 30 8B 42 14 89 41 34 8B 42 18 89 41 38 48 8B 49 08 48 85 C9 0F 85 2A 26 01 00 C3) [ENABLE] assert(address,bytes) alloc(newmem,$1000,"UnityPlayer.dll"+1459FB0) label(code) label(return) label(spawnX) label(spawnY) label(spawnZ) label(playerBase) registersymbol(playerBase) registersymbol(spawnX) registersymbol(spawnY) registersymbol(spawnZ) newmem: code: push rbp mov rbp,["UserAssembly.dll"+0ADF1498] cmp rbp,0 je return mov rbp,[rbp+A0] cmp rbp,0 je return mov rbp,[rbp+0] cmp rbp,0 je return mov rbp,[rbp+F8] cmp rbp,0 je return mov rbp,[rbp+2D8] cmp rbp,0 je return mov rbp,[rbp+10] cmp rbp,0 je return mov rbp,[rbp+68] cmp rbp,0 je return mov rbp,[rbp+70] cmp rbp,0 je return mov [playerBase],rbp cmp [playerBase],0 je return cmp rcx,[playerBase] je return mov eax,[rdx] mov [rcx+20],eax mov eax,[rdx+04] mov [rcx+24],eax mov eax,[rdx+08] mov [rcx+28],eax mov eax,[rdx+0C] mov [rcx+2C],eax mov eax,[rdx+10] mov [rcx+30],eax mov eax,[rdx+14] mov [rcx+34],eax mov eax,[rdx+18] mov [rcx+38],eax mov rcx,[rcx+08] test rcx,rcx nop nop nop nop nop nop ret playerBase: dd 0 spawnX: dd (float)1.0 spawnY: dd (float)0.5 spawnZ: dd (float)2.7 address: jmp newmem nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop return: [DISABLE] address: db bytes dealloc(*) unregistersymbol(*) Было бы хорошо делать как-то так: [[[[[[["UserAssembly.dll"+0ADF1498]+A0]+0]+F8]+2D8]+10]+68]+70 но не знаю как сделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 марта, 2022 Поделиться Опубликовано 1 марта, 2022 4 часа назад, TheErel сказал: Было бы хорошо делать как-то так: регистр взят от балды mov eax,["UserAssembly.dll"+0ADF1498] mov eax,[eax+A0] mov eax,[eax] mov eax,[eax+F8] ... Ссылка на комментарий Поделиться на другие сайты Поделиться
TheErel Опубликовано 1 марта, 2022 Автор Поделиться Опубликовано 1 марта, 2022 Это не подходит, я же показывал код, я делаю так же только с проверкой, можно и без нее, сути не меняет. Я попробовал так же как вы предложили. Это не помогает игра крашит, он работает как и мой код но если телепорт то краш, если бы оно не загружало в регистр который вроде как пустой но при телепорте он наверное заполняется, игра вылетает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 марта, 2022 Поделиться Опубликовано 1 марта, 2022 Так используй другой регистр, в чем проблема? Скорее всего, при перемещении по локациям у тебя проблема в том, что адрес, который ты сохранил ранее, используется чем-то другим. Или через эту инструкцию проскакивает что-то еще. Впрочем, без игры сложно утверждать. UPDATE: Елки-палки, ты зачем rbp используешь??? rbp и rsp - служебные регистры, используемые для указания на вершину стека и базовый поинтер для текущего метода. Никогда не используй эти регистры. Ссылка на комментарий Поделиться на другие сайты Поделиться
TheErel Опубликовано 1 марта, 2022 Автор Поделиться Опубликовано 1 марта, 2022 8 минут назад, Xipho сказал: Так используй другой регистр, в чем проблема? Скорее всего, при перемещении по локациям у тебя проблема в том, что адрес, который ты сохранил ранее, используется чем-то другим. Или через эту инструкцию проскакивает что-то еще. Впрочем, без игры сложно утверждать. UPDATE: Елки-палки, ты зачем rbp используешь??? rbp и rsp - служебные регистры, используемые для указания на вершину стека и базовый поинтер для текущего метода. Никогда не используй эти регистры. Это был пустой регистр, все остальные заняты. Игра Геншин Импакт. Вот скрин регистров mov [rcx+30],eax - rcx+30 координата Х в еах находится тоже координата Х Какой тогда регистр использовать? Благодарю что отвечаете на вопрос. Я бы хотел не выключать каждый раз функцию при перемещении из локации в локацию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 1 марта, 2022 Поделиться Опубликовано 1 марта, 2022 Как я думаю, краш происходит в момент выполнения "mov rbp,["UserAssembly.dll"+0ADF1498]" инструкции. Либо далее, где происходит подобная попытка считывания возможного невалидного адреса в регистр. Адреса, у которого значение ????. "cmp rbp,0" - проверяет значении на наличие указателя уже после краша. Когда-то давно я сталкивался с подобной проблемой. Но не помню как решил. push rbp mov rbp,["UserAssembly.dll"+0ADF1498] cmp rbp,0 Ссылка на комментарий Поделиться на другие сайты Поделиться
TheErel Опубликовано 1 марта, 2022 Автор Поделиться Опубликовано 1 марта, 2022 1 минуту назад, Antonshka сказал: Как я думаю, краш происходит в момент выполнения "mov rbp,["UserAssembly.dll"+0ADF1498]" инструкции. Либо далее, где происходит подобная попытка считывания возможного невалидного адреса в регистр. Адреса, у которого значение ????. "cmp rbp,0" - проверяет значении на наличие указателя уже после краша. Когда-то давно я сталкивался с подобной проблемой. Но не помню как решил. push rbp mov rbp,["UserAssembly.dll"+0ADF1498] cmp rbp,0 Да, в момент ТП происходит это ??? но как исправить то это?) Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 1 марта, 2022 Поделиться Опубликовано 1 марта, 2022 Очень просто, надо найти на каком этапе перехода по указателям он ведёт в несуществующиее место, например нулевой, тему закрываю, потому что ответ на вопрос в заголовке дан, а дальнейшие вопросы в этой теме уже по онлайн игре Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 1 марта, 2022 Поделиться Опубликовано 1 марта, 2022 8 часов назад, TheErel сказал: Вот пример кода. У меня вопрос: Зачем взято под инъекцию столько байт? Если бы было с логами, то было бы более понятно, может там где то краш игры и происходит. (к примеру прыжок какой нить попал в инъекцию и т.д.) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения