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

Xipho

Администраторы
  • Постов

    4 022
  • Зарегистрирован

  • Победитель дней

    42

Весь контент Xipho

  1. Всегда проще обвинить кого-то, чем признать, что допустил оплошность в формулировке вопроса )))
  2. Каждое изменение здоровья (срабатывание инструкции) связано с какими-либо действиями. Если прореверсить код в обратную сторону от инструкции, которая пишет в адрес здоровье, можно найти инструкции, которые вычисляют урон, наносимый игроку/неписю. Универсального рецепта нет, для каждой игры/движка это реверсится индивидуально. Главное - понимание, что новое значение здоровья должно как-то вычислиться. В случае нанесения урона это значения вычисляется вычитанием величины урона из текущего уровня здоровья. Найдя это вычитание (на самом деле там может быть не только вычитание, это лишь пример), ты найдешь величину урона. Исследуя код, как формируется величина урона, ты найдешь инструкцию, где можно будет подставить свой множитель. Ну или, найдя, где из здоровья вычитается урон, в том месте урон многократно увеличить - этого будет вполне достаточно для OHK.
  3. Вопрос был "есть ли возможность". Ответ был "есть". Каков вопрос, таков ответ...
  4. Ну так вот так и написать. Выделить память через alloc, назначить метку, в эту метку прописать значение, как мы прописывали в куче уроков, только вместо числа будет что-то вроде db 'Text',0. А дальше либо mov edi, offset label, либо lea edi, [label]
  5. Привет, в регистре EDI не может храниться текст. В нем может храниться только указатель на адрес памяти, где лежит текст. Соответственно, ты можешь записать свой текст в память, и в EDI записать адрес твоего текста.
  6. Блиттинг с серой маской. Или средневзвешенное значение цвета. Правда, может дать непредсказуемый результат Но самое быстрое и эффективное - применение формулы выше для картинки, загруженной в DIB секцию. Впрочем, картинку необязательно грузить в вышеупомянутую секцию, так как есть WinAPI функции для получения битов картинки в массив для последующей быстрой обработки
  7. Ошибка чтения из адреса. Что-то ты делаешь с ним не так. Делай по-другому.
  8. Нужно предпринять какие-то действия, чтобы ошибка не возникала. Увы, это всё, что я могу подсказать, исходя из объема предоставленной тобой информации.
  9. Есть урок по поиску шифрованных значений, там через экранное я выхожу на истинное. И есть еще несколько уроков по отделению игрока от врага. В одном из них тоже есть прием выхода на истинное через экранное значение.
  10. Нет, это так не работает. Да и рыть кучу инфы тебя никто не заставляет. У нас на канале и в группе ВК есть плейлист "Взлом игр от А до Я". В нем сжато рассказываются почти все аспекты взлома игр и написания скриптов в СЕ.
  11. Проведи несколько экспериментов с разными дистанциями и разными пропорциями. Выведи формулу, опиши ее в коде.
  12. Выглядит как будто эта пропорция должна высчитываться программно, а не быть константой.
  13. Значит, придется изучить СЕ и ассемблер до полного понимания, что делается в скрипте. Когда будет понимание, тогда сразу станет понятно, что брать, чтобы вписать в код на шарпе.
  14. Навскидку - приведение к int с отбросом дробной части может привести к погрешности
  15. Без понимания, как это работает - никак не починишь. Массив, что ты указал, это определенный набор байтов, который характерен для определенных инструкций процессора. Поскольку после обновления игры ты не можешь найти этот массив, мы можем говорить о том, что код изменился. А это, в свою очередь означает, что нужно с нуля находить нужный код. Ну или попробовать взять часть массива, которая отвечает за коды инструкций без конкретных адресов, и поискать с маской. Но, опять же, без понимания, что это, и как делается, шансов очень мало.
  16. Конкретизирую: 1. Берешь игру (любую сингловую) 2. Ставишь перед собой цель (сделать в игре бессмертие, бесконечный прыжок, бесконечные патроны, бесконечные характеристики, что угодно) 3. Реверсишь. 4. Реализуешь цель. 5. PROFIT!!!
  17. Выглядит вроде верно. Может, в игре надо какое-то действие сделать, чтобы через эту инструкцию нужный адрес проскочил?
  18. А какова вероятность, что в игре будет такое же значение? В общем, почитай теорию про хранение чисел с плавающей точке в памяти компьютера, не буду спорить, не вижу смысла одно и то же обсуждать. Это не значит, что ты делала это правильно, если ты сравнивала с помощью cmp. cmp допустим ТОЛЬКО если сравнение на больше/меньше делается. Но никак не на равенство.
  19. Почитай про точность чисел с плавающей точкой, далее почитай про хранение и интерпретацию таких чисел в процессоре, далее почитай, почему может внезапно получиться при записи в переменную 50.00, а при чтении уже 50.0000000000000000000000000000000002, и затем почитай, как в этом случае сработает сравнение cmp
  20. Используй любой из методов, который будет работать у тебя в твоем конкретном случае. Числа с плавающей точкой двойной точности, как и обычные числа с плавающей точкой (float) надо сравнивать через определенные инструкции FPU или XMM. Инструкция cmp подходит только для целых чисел. Ты можешь попытаться сравнить hex представление, но, учитывая способ хранения типов double и float, вероятность срабатывания такого сравнения невелика.
  21. Не ковыряясь в игре сложно давать конкретные советы. Но попробую еще раз. Тебе надо искать не сам массив, а одну из структур этого массива. То есть, конректно самую низкоуровневую структуру, содержащую искомую строку. И от этой структуры уже выходить вверх по уровням. Так и построишь указатель.
×
×
  • Создать...

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

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