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

Dying Light - прочность оружия


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

Реверсю полудохлого фонаря. Игра вышла всего 3 дня назад, достаточно новая. Dying light.

В игре используется открытое кол-во опыта, ловкости и прочего. Т.е. в игре есть 3 ветки прокачки, все 3 возможны для прокачки. Очки выживаемости, ловкости... И третье что-то вроде боя или драк...

В общем, есть система уровней. У игрока (к примеру) 5000 опыта и при достижении 6000 опыта - новый уровень. Так вот, эти очки опыта (которые у игрока в данный момент) - открыто лежат рядышком с очками прокачки (прямо в главном меню игры). Но ни одно из этих трех значений почему-то не ищется.

Пытался зайти с другой стороны, искать очки улучшений (после достижения нового уровня - тебе дается очко улучшения), но эта схема тоже провалилась. Во-первых, нужно немало потрудится, чтобы апнутся на 2-3 уровня (отсеивать значение тоже надо) и потом начал чекать значения. Неудачно. 

Вообще не знаю что делать с этим делом. Реверсинг еще осложняется тем, что после смерти вне safe-зоны теряются очки выживаемости. Это плохо, учитывая что эти очки нужно зарабатывать.

//==================================================================================================

Есть и второй вопросик...

В игре присутствует система прочности оружия. Т.е. у оружия, к примеру, 50 прочности. У тебя есть 50 ударов по зомбакам. После того, как все 50 очков выйдут - оружие потеряет немного в характеристиках и вам нужно будет его либо отремонтировать (лут для этого нужно искать), либо выбросить (вообще не вариант).

Значение прочности не экранировано. Т.е. как есть 50 в игре - так и на деле в СЕ. Нашел. Значение во Float (что удивительно, ведь тут только целые числа) и нашел инструкцию, которая в нее пишет.

Она выглядит примерно так:

movss [rbx+44],xmm6 -- это примерная инструкция, точную сказать не могу. Какой-то вирус подпортил мне винду, пришлось снести. Благо, хоть проекты успел спасти флешкой с Касперским.
Я почувствовал себя хомяком, пытаясь ее взломать))

Во-первых, пытался убрать xmm6 и добавить #50 или просто 50, чтобы-таки оружие не ломалось. Не получилось. (ошибка при компиляции/или что-то СЕ возмущался)

Пытался добавить в начале 

mov xmm6, #50movss [rbx+44],xmm6
Не канает.

Пытался даже расстрелять эту инструкцию. В начале, казалось бы, сработало... Но не тут-то было. После ребута игры - у всего оружия прочность стала -1. Мне бы не было до этого дела, ведь оно не изменяется... Но... Это сообщение... "Ваше оружие сломано, отремонтируйте или замените его через Tab"... Оно бесит!!!

Как более грамотно "подпортить" эту инструкцию?

Спасибо что дочитали до этого места :) Добра всем)

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

movss [rbx+44],xmm6

Move Scalar Single - то есть, скопировать число с точкой одинарной точности (float). А еще, если почитать описание, там сказано, что операндом может быть либо регистр, либо адрес в памяти, но никак не какое-то число.

Соответственно, можешь сделать так приблизительно (часть кода опустил, ибо не суть):

[ENABLE]label(chislo)...."blbla.exe"+1234:movss xmm6,[chislo]movss [rbx+44],xmm6......jmp returnherechislo:dd (float)50...
Код приблизительный и отнюдь не претендует на стопроцентную правильно, так как задачей было показать принцип работы, а не создать полноценный скрипт.
Ссылка на комментарий
Поделиться на другие сайты

...

movss [rbx+44],xmm6 -- это примерная инструкция, точную сказать не могу. Какой-то вирус подпортил мне винду, пришлось снести. Благо, хоть проекты успел спасти флешкой с Касперским.

Я почувствовал себя хомяком, пытаясь ее взломать))

Во-первых, пытался убрать xmm6 и добавить #50 или просто 50, чтобы-таки оружие не ломалось. Не получилось. (ошибка при компиляции/или что-то СЕ возмущался)

Пытался добавить в начале 

mov xmm6, #50movss [rbx+44],xmm6

Не канает.

...

 

Доброго утра!

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

movss xmm6, (float)50

Запись в xmm возможна из другого xmm, либо из памяти 32-битного числа. Если делаешь кейв, то просто заведи метку, например, Iznos, запиши нужное значение 50 в данном случае в вещественном виде, и считывай его как из памяти.

Как должен примерно выглядеть код

[ENABLE]alloc(newmem, 1024)label(returnhere)label(Iznos)registersymbol(Iznos)newmem:movss xmm6,[Iznos] //исправленоmovss [rbx+44],xmm6jmp returnhereIznos:dd (float)50"адрес":jmp newmemnop(если надо)[DISABLE]...

Xipho опередил)

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

[ENABLE]alloc(newmem, 1024)label(returnhere)newmem:movss [rbx+44],xmm6mov [rbx+44],(float)100 // менять значение, после срабатывания оригинальной инструкции jmp returnhere"адрес":jmp newmemnop(если надо)[DISABLE]... 
Ссылка на комментарий
Поделиться на другие сайты

 

Как должен примерно выглядеть код

[ENABLE]alloc(newmem, 1024)label(returnhere)label(Iznos)registersymbol(Iznos)newmem:movss [rbx+44],xmm6jmp returnhereIznos:dd (float)50"адрес":jmp newmemnop(если надо)[DISABLE]...

Xipho опередил)

Ошибка, нужно так:

[ENABLE]alloc(newmem, 1024)label(returnhere)label(Iznos)registersymbol(Iznos)newmem:movss [rbx+44],Iznos // Iznos вместо xmm6jmp returnhereIznos:dd (float)50"адрес":jmp newmemnop(если надо)[DISABLE]... 

Не поможет. Я выше писал, что movss не позволяет задавать числовые значения. Он позволяет работать только с регистром или адресом в памяти.

Я же вроде movss и не трогаю, а после присваиваю новое значение.

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

Ошибка, нужно так:

[ENABLE]alloc(newmem, 1024)label(returnhere)label(Iznos)registersymbol(Iznos)newmem:movss [rbx+44],Iznos // Iznos вместо xmm6jmp returnhereIznos:dd (float)50"адрес":jmp newmemnop(если надо)[DISABLE]... 

 

Ой да, ступил)

Хотел написать так

movss xmm6,[Iznos]movss [rbx+44],xmm6

Спасибо, garik66, что обратил внимание

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

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

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

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