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

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

Уважаемые знатоки и профессионалы. Помогите пожалуйста. Конкретную игру не привожу так как эта инструкция встречается часто и в многих играх. Инструкция такая, на примере: mov [eax],ebx. Проблема: как найти и вычеслить смещение. Опишите пожалуйста принцип пошагово. Можно в разных вариациях.

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

  • Ответов 63
  • Создана
  • Последний ответ

Топ авторов темы

Спасибо, но ранее я смотрел все эти видео, но этого не достаточно, не совсем всё понимаю. Или вы имеете в виду метод проб и ошибок ?

Нет, это не нулевое смещение. Такая инструкция работает с кучей адресов и под инструкций. Например мне нужно найти смещение адреса x предмета, как это сделать?

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

*** мне нужно найти смещение адреса x предмета, как это сделать?

смещение в подобном случае понимается как +38 в ниже представленном примере

add eax,[rbx+38]

Но я кажется понял о чем ты спросил. Хотя, как правило, в структуре обязательно будет и ID и само название предмета просто нужно раскрывать и читать указатели выше-ниже по структуре...

1.Попробуй отсортировать адрес предмета через сравнение регистров, по содержимому стека и т.д.

2.Попробуй использовать анализ кода/структур, найди выше 2,3 и выше указатель затем инструкцию которая с ним работает,запиши на бумажку смещение от найденого указателя до требуемого адреса,затем делай инжект на инструкцию обновления указателя, сортируй там по регистру и читай/пиши по смещению.

3. Сравнением значения "экранного" и обаратываемого адреса.

4. Попробуй найти инструкцию чтения указателей инвентаря...

5. то как я еще не догадался

Способов тысячи, подобное часто встречается в "затаблеченных" играх. Всетаки укажи на название твоей мишени. Будет время поможем.

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

Да, это мне частично понятно, но для начала мне интересно вот что,это начало структуры таких инструкций как (mov [eax],ebx )и т.д, как писал Sergant : смещение = 0. Так вот это и будет начало структуры каждого адреса находящигося в этой инструкции ? Если нет, то как мне выйти на начало её ?

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

Вот напримере, если поставить бряк на число зелья, при срабатавании можно ли в стеке найти то что работает с этим предметом, например эффект, время его действия ?

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

Огромное спасибо за верное наставление, только вот еще проблемка. Смещение нашел, а теперь как бы её записать правильно что бы работала. Смещение 12c, инструкция: mov xmm0,[rax+rbx]

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

Такой вариант не работает, а как будет вариант с фильтром, с переходом ? Напримере как : cmp [rax+12c],?

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

Это смещение по анализу структур, вышел на него через по регистру rbx,на его начало. Эта интрукция постоянно обращается к адресу. Но вот как лучше внедрить в игру правильный код незнаю, игра сворачивается. Сама игра наз. Zombie ... Дальше не помню

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

newmem:

cmp rbx,12C

je instruction

jmp originalcode

 

instruction: // сюда если rbx(смещение равно 12С)

mov [rax+rbx],(float)100 //к примеру

mov xmm0,[rax+rbx]

jmp returnhere

 

originalcode: //сюда во всех остальных случаях

mov xmm0,[rax+rbx]

jmp returnhere

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

Ок. Спасибо. Подскажи пожайлуста как вычислить погрешность критического урона.(инструкции), скорость атаки. Проблема с игрой Nevewinter night 2, не как не получается найти скорость атаки и действия игрока, перепробовал все что на ум приходило. Дело в том что находит кучу адресов которые не поддаются заморозки. Все что хотел сделал, а это ни как. Нашел время способностей через сравнение регистров(60сек), т.е исходное начало таймера, единственное что получилось с временем. Оч сложна она.

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

newmem:

cmp rbx,12C

je instruction

jmp originalcode

 

instruction: // сюда если rbx(смещение равно 12С)

mov [rax+rbx],(float)100 //к примеру

mov xmm0,[rax+rbx]

jmp returnhere

 

originalcode: //сюда во всех остальных случаях

mov xmm0,[rax+rbx]

jmp returnhere

Что то не получается такой вариант, может я что делаю нет так . Пробовал не нескольких играх, не сработало, игры сворачиваются. На примере игра Dragon Age 2, Ищу смещение на скорость Атаки(адрес 203E7F94). Ставя чтение на доступ на этот адрес Вылезает инструкция ( fld dword ptr [esi+04]  ). Затем ставя бряк на Адрес срабатывают такие регистры как :

eax 005AE690

ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе  203E7F94
ecx 203E7F90
edx 00BF5C1C
esi 203E7F90
edi 203D45F0
ebp 205895D0
По нему нахожу постоянное смещение (D84)
Вот Скрипт который я делал newMem:
cmp [ebx],d84
mov  [esi+04],или [esi+d84] (float)100
je @f
@@:
fld dword ptr [esi+04]
mov ecx,[esi+14]
jmp returnHere
 
DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:
jmp newMem
nop
returnHere:
 
[DISABLE]
DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:
fld dword ptr [esi+04]
mov ecx,[esi+14]
 
dealloc(newMem)
что я делаю не так ?
Изменено пользователем Жажда Знаний
Ссылка на комментарий
Поделиться на другие сайты

Data Breakpoint не пробовал ставить? Как у меня в видео? Но для этого нужно, чтобы игра была в оконном режиме, иначе не свернешь, при срабатывании бряка.

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

а зачем в ebx ковырятся? то есть по вашему логика фильтра получается такая

значение по адресу [ebx] то есть в вашем случае  [203D47E4] равно d84. То есть по адресу лежит ЗНАЧЕНИЕ d84.

Надо сравнивать значения а не смещения. К примеру.

Вот ваша инструкция

fld dword ptr [esi+04] анализируем

[esi+04] = [203E7F90+4] то есть адрес по нему некое значение.

где 203E7F90=esi=базовый адрес этой инструкции

+04 смещение от базового адреса то есть  203E7F94

 

в инструкции типа [esx+ebx]

тут как раз в регистре ebx хранится смещение и поэтому по нему можно писать фильтр.

 

А то что вы понаписали сверху я вообще не вкурил...

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

Data Breakpoint не пробовал ставить? Как у меня в видео? Но для этого нужно, чтобы игра была в оконном режиме, иначе не свернешь, при срабатывании бряка.

Я именно так и делал.

а зачем в ebx ковырятся? то есть по вашему логика фильтра получается такая

значение по адресу [ebx] то есть в вашем случае [203D47E4] равно d84. То есть по адресу лежит ЗНАЧЕНИЕ d84.

Надо сравнивать значения а не смещения. К примеру.

Вот ваша инструкция

fld dword ptr [esi+04] анализируем

[esi+04] = [203E7F90+4] то есть адрес по нему некое значение.

где 203E7F90=esi=базовый адрес этой инструкции

+04 смещение от базового адреса то есть 203E7F94

А то что вы понаписали сверху я вообще не вкурил...

Если брать смещение -04,то любой адрес с этой инструкции будет на одном и том же смещении. На смещении ( 04 )

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

Нет,найти правильное смещение и внедрить его в код.

В ebx'е искать, потому что при бряке идет выгрузка регистров с самого нижнего, заканчивая eax. Ebx больше подходит на начало структуры.

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

Проблема: как найти и вычеслить смещение. Опишите пожалуйста принцип пошагово. Можно в разных вариациях.

 

Че, блин?

Ну ты хоть теорию почитай. Или уроки посмотри у кодера или Михаила Ремизова (keng) - они понятно объясняют.

В моем понимании - смещение это отклонение регистра от нуля на указанное количество байт. Смещение и адреса всегда в hex (16-ричная система исчистления).

К примеру, из записи  mov [eax+18],xmm0   мы можем видеть, что eax - регистр, а 18 - смещение.

Однако, лайф хак: чтобы в анализе структур увидеть значение регистра уже со смещением - просто возьми начальный адрес регистра и прибавь смещение. 

К примеру, если адрес регистра eax - 485E24A5 то в анализе структур запиши 485E24A5+18, где 18 - наше смещение. Тогда нулевой адрес будет наш адрес, уже со смещением.

Так же, из записи mov [eax+18],xmm0  мы можем видеть, что регистр xmm0 копируется в смещение [eax+18]. 

Т.е:

  • На первом месте идет глагол. То, что мы делаем с инструкцией. К примеру: mov - записать (сдвинуть) смещение, dec - вычесть 1, inc - прибавить 1, cmp - сравнение (используется в бессмертии и OHK)
  • На втором месте идет "подопытный". То, с чем мы проводим операцию. В нашем случае - это смещение. Однако "подопытным" может быть и адрес и многое другое.
  • На третьем месте идет "виновник торжества". Объект нашего действия. Он будет выполнять действие, указанное на первом месте, с тем, что указано на втором месте. Формулировка мутная, но думаю ты поймешь

P.s. Я вижу тут тебе уже помогли, но малоли... Может все же будет полезно.

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

Че, блин?

Ну ты хоть теорию почитай. Или уроки посмотри у кодера или Михаила Ремизова (keng) - они понятно объясняют.

В моем понимании - смещение это отклонение регистра от нуля на указанное количество байт. Смещение и адреса всегда в hex (16-ричная система исчистления).

К примеру, из записи mov [eax+18],xmm0 мы можем видеть, что eax - регистр, а 18 - смещение.

Однако, лайф хак: чтобы в анализе структур увидеть значение регистра уже со смещением - просто возьми начальный адрес регистра и прибавь смещение.

К примеру, если адрес регистра eax - 485E24A5 то в анализе структур запиши 485E24A5+18, где 18 - наше смещение. Тогда нулевой адрес будет наш адрес, уже со смещением.

Так же, из записи mov [eax+18],xmm0 мы можем видеть, что регистр xmm0 копируется в смещение [eax+18].

Т.е:

  • На первом месте идет глагол. То, что мы делаем с инструкцией. К примеру: mov - записать (сдвинуть) смещение, dec - вычесть 1, inc - прибавить 1, cmp - сравнение (используется в бессмертии и OHK)
  • На втором месте идет "подопытный". То, с чем мы проводим операцию. В нашем случае - это смещение. Однако "подопытным" может быть и адрес и многое другое.
  • На третьем месте идет "виновник торжества". Объект нашего действия. Он будет выполнять действие, указанное на первом месте, с тем, что указано на втором месте. Формулировка мутная, но думаю ты поймешь
P.s. Я вижу тут тебе уже помогли, но малоли... Может все же будет полезно.

Благодарю за разьяснение, но это я все уже знал давно и нового не извлёк. Такое впечатление что ни кто не понимает о чем тут речь. Ни кто не помогал, разобрался сам.

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

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

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

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