RockHammer Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 Реверсю полудохлого фонаря. Игра вышла всего 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"... Оно бесит!!!Как более грамотно "подпортить" эту инструкцию?Спасибо что дочитали до этого места Добра всем) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 Цитата movss [rbx+44],xmm6Move Scalar Single - то есть, скопировать число с точкой одинарной точности (float). А еще, если почитать описание, там сказано, что операндом может быть либо регистр, либо адрес в памяти, но никак не какое-то число.Соответственно, можешь сделать так приблизительно (часть кода опустил, ибо не суть):[ENABLE]label(chislo)...."blbla.exe"+1234:movss xmm6,[chislo]movss [rbx+44],xmm6......jmp returnherechislo:dd (float)50...Код приблизительный и отнюдь не претендует на стопроцентную правильно, так как задачей было показать принцип работы, а не создать полноценный скрипт. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 (изменено) В 31.01.2015 в 06:21, RockHamer сказал: ...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 опередил) Изменено 31 января, 2015 пользователем A1t0r 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 31 января, 2015 Автор Поделиться Опубликовано 31 января, 2015 Все понял) Спасибо вам) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 Показать контент [ENABLE]alloc(newmem, 1024)label(returnhere)newmem:movss [rbx+44],xmm6mov [rbx+44],(float)100 // менять значение, после срабатывания оригинальной инструкции jmp returnhere"адрес":jmp newmemnop(если надо)[DISABLE]... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 Не поможет. Я выше писал, что movss не позволяет задавать числовые значения. Он позволяет работать только с регистром или адресом в памяти. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 (изменено) В 31.01.2015 в 07:01, A1t0r сказал: Как должен примерно выглядеть код[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]... В 31.01.2015 в 07:33, Xipho сказал: Не поможет. Я выше писал, что movss не позволяет задавать числовые значения. Он позволяет работать только с регистром или адресом в памяти.Я же вроде movss и не трогаю, а после присваиваю новое значение. Изменено 31 января, 2015 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 А, да, все правильно. При беглом взгляде показалось, что у тебя там тоже movss. А если просто mov - да, можно. И, кстати, так будет даже удобнее. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 В 31.01.2015 в 07:28, RockHamer сказал: Все понял) Спасибо вам)Попробуй пожалуйста все скрипты и отпишись - интересно. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 31 января, 2015 Поделиться Опубликовано 31 января, 2015 В 31.01.2015 в 07:36, 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, что обратил внимание Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 31 января, 2015 Автор Поделиться Опубликовано 31 января, 2015 В 31.01.2015 в 07:41, garik66 сказал: Попробуй пожалуйста все скрипты и отпишись - интересно.No problems) Сегодня, надеюсь, попробую) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения