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

Готика 3: Вопрос


wiz2vip

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

Ребят, вот решил вспомнить детство и соответственно сломать игру. Так вот в чем весь интерес. Нашел инструкцию которая отвечает за Жизни Ману и Силу ( одновременно ), решил проверить кто к ней обращается, побегал возле мобов, жизни всех мобов появились, начинаю когонить бить все видно что уходит, также и меня если бьют. Решил сначала бесмертие сделать( для всех ), а оказалось что я бесмертен а они с одного удара падают, дальше подробней...

Когда ломал, вышел один адрес, который отвечает за жизни ману и энергию.

Прошел по нему и увидел это.


Game.gCAttribute::ApplyDefaults+2E - CC - int 3
Game.gCAttribute::ApplyDefaults+2F - CC - int 3
Game.gCAttribute::GetValue - 8B 41 14 - mov eax,[ecx+14] <-------Тут все решается...
Game.gCAttribute::GetValue+3 - 03 41 10 - add eax,[ecx+10]
Game.gCAttribute::GetValue+6 - C3 - ret
Game.gCAttribute::GetValue+7 - CC - int 3
Game.gCAttribute::GetValue+8 - CC - int 3
Game.gCAttribute::ApplyDefaults+2D - CC					- int 3

Дальше чето мозг решил попробовать такую комбинацию.


alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
originalcode:
push [ecx+18] //<---------------- Добавил // MAX
pop [ecx+14] //<---------------- Добавил // Real
mov eax,[ecx+14]
add eax,[ecx+10]
exit:
jmp returnhere
"Game.dll"+1BC0C0:
jmp newmem
nop
returnhere:



[DISABLE]
dealloc(newmem)
"Game.dll"+1BC0C0:
mov eax,[ecx+14]
add eax,[ecx+10]
//Alt: db 8B 41 14 03 41 10
[ENABLE]

И после этого, я почемуто стал бесмертным а они падают с 1 удара и причем без фильтров, которых я ожидал наделать после... )))

По идее я просто взял максимальную жизнь и перевел в реальную....

Вот это очень интересно, что функция отвечающаяя за жизни всех, реагирует на скрипт так...

Вот собственно и вопрос...

Забыл дописать, Все дружественные юниты тоже бесмертны.

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

Для лучшего понимания можно проверить сколько здоровья у врага до удара по нему и сможешь определить либо удар слишком сильный, либо здоровье врага слишком мало изначально

Теоритически на бряке инструкции можно найти зацепку в какой момент выполнять оригинальный код, а не новый. Если не нашёл, то искать другие зацепки используя анализ структур, трейссер CE + пошаговую отладку.

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

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

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

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