partoftheworlD Опубликовано 18 марта, 2019 Поделиться Опубликовано 18 марта, 2019 2 часа назад, Sergey99 сказал: непонятно зачем там нужен оператор смещения >>) 11 часов назад, partoftheworlD сказал: Бинарное умножение на 16 2 часа назад, Sergey99 сказал: как вы нашли этот параметр Магия реверса, по строкам находишь функцию регистрирующую команды, которая принимает как аргументы Имя команды "g_speed " Минимальное значение "190 " Маска 1 "0x80000000 " Маска 2 "0x7F7FFFFF " Максимальное значение "192 " Описание "bla-bla-bla" Дальше входишь в эту функцию, и смотришь куда ведет тебя имя команды и минимальное значение, входишь снова в функцию, которая принимает эти значения. Так как можно предположить, что принимаемые аргументы не просто так прописаны, можно сделать вывод, что по имени команды каким-то образом вычисляется положение блока памяти, которое относится к передаваемой команде. А значит надо присмотреться к циклам и массивам. В этой статье что-то похожее рассматривал уже. Ссылка на комментарий Поделиться на другие сайты Поделиться
Sergey99 Опубликовано 18 марта, 2019 Автор Поделиться Опубликовано 18 марта, 2019 4 минуты назад, partoftheworlD сказал: Магия реверса, по строкам находишь функцию регистрирующую команды, которая принимает как аргументы Имя команды "g_speed " Минимальное значение "190 " Маска 1 "0x80000000 " Маска 2 "0x7F7FFFFF " Максимальное значение "192 " Описание "bla-bla-bla" Дальше входишь в эту функцию, и смотришь куда ведет тебя имя команды и минимальное значение, входишь снова в функцию, которая принимает эти значения. Так как можно предположить, что принимаемые аргументы не просто так прописаны, можно сделать вывод, что по имени команды каким-то образом вычисляется положение блока памяти, которое относится к передаваемой команде. А значит надо присмотреться к циклам и массивам. В этой статье что-то похожее рассматривал уже. А вот теперь если представить имеется игра с динамическим распределением памяти, у неё инструкции расположены по адресам, мне CE, показывает, например, инструкцию сохранения координат по такому адресу: game.exe+842432, где game.exe = 00400000 - базовый адрес модуля, а 842432 - смещение до адреса с инструкцией. Может ли меняться смещение (в моём случае 842432) при динамическом распределении памяти и при статическом? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 18 марта, 2019 Поделиться Опубликовано 18 марта, 2019 6 минут назад, Sergey99 сказал: Может ли меняться смещение (в моём случае 842432) при динамическом распределении памяти и при статическом? Нет, это значение является относительным виртуальным адресом, которое всегда будет равно этому значению на текущем патче. Цитата RVA - это сокращение от Relative Virtual Address, т.е. относительный виртуальный адрес. "Относительно чего?" - спросите вы. "Относительно Image Base" - отвечу я. Например, если какая-либо строка хранится в памяти по адресу 450000h, и Image Base = 400000h, то RVA этой строки равен 450000h - 400000h = 50000h Ссылка на комментарий Поделиться на другие сайты Поделиться
Sergey99 Опубликовано 18 марта, 2019 Автор Поделиться Опубликовано 18 марта, 2019 9 минут назад, partoftheworlD сказал: RVA - это сокращение от Relative Virtual Address, т.е. относительный виртуальный адрес. "Относительно чего?" - спросите вы. "Относительно Image Base" - отвечу я. Например, если какая-либо строка хранится в памяти по адресу 450000h, и Image Base = 400000h, то RVA этой строки равен 450000h - 400000h = 50000h Спасибо, это стоит запомнить 12 минут назад, partoftheworlD сказал: Нет, это значение является относительным виртуальным адресом, которое всегда будет равно этому значению на текущем патче. Просто в некоторых играх адреса инструкций в наглую меняются при перезапуске, возможно я не помню, но тогда CE мне показывал полный адрес без прибавления смещения к базовому адресу, может быть такое? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения