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

Adouken

Стажёры
  • Постов

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

  • Посещение

Сообщения, опубликованные Adouken

  1. Итоговые скрипты вышли такими, задача полностью решена:

     

    [ENABLE]aobscanmodule(INJECT,game.exe,83 79 68 01 0F 94 C0)alloc(newmem,$1000)label(code)label(return)newmem: //Меняем лежащие во флаге ноль и единицу местами при каждом нажатии кнопки.xor [flag],1jmp returncode: //Оригинальные инструкции, вылезающие при нажатии графической кнопки. Весь код нужен только чтобы "привязаться" к этим инструкциям. В данном случае будем привязывать флаг.  cmp dword ptr [ecx+68],01  sete al  jmp newmemINJECT:  jmp code  nop  nopreturn:registersymbol(INJECT)[DISABLE]dealloc(newmem)INJECT: db 83 79 68 01 0F 94 C0unregistersymbol(flag)unregistersymbol(INJECT)

    [ENABLE]aobscanmodule(INJECT_1,game.exe,89 42 08 E8 66 AB 00 00)alloc(code,$1000)label(return)label(flag)registersymbol(INJECT_1)registersymbol(flag)code:  cmp dword ptr [flag],#1  jne @F  mov [edx+08],eax // Оригинальная инструкция. Копирует новое кол-во ходов в адрес текущего кол-ва ходов@@:mov eax,[edx+08] // Моя инструкция, обратная оригинальной. Тем самым мы отключаем трату очков хода, т.к. пишется текущее значение в новое.  call game.exe+F26B0  jmp returnflag: dd 0INJECT_1:  jmp code  nop  nop  nopreturn:[DISABLE]dealloc(code)INJECT_1:db 89 42 08 E8 66 AB 00 00unregistersymbol(INJECT_1)
    • Плюс 1
  2. Почему глупость-то? Автор нашел инструкцию, которая выполняется при нажатии, туда заинжектить код активации скрипта, в чем проблема? Вот только я не могу подсказать автору как через label управлять читом, я через CE мало чего делал.

    Аналогично, у меня в голове полное и четкое представление идеи, а вот знаний языка не хватает, чтобы довести до ума как надо. Мучаю Xipho в личке, он помогает, может что-то и получится.

    Идея уже реализована на половину: после нажатия клавиши и "отлова" той инструкции, я уже прицепил к ней свой код, который просто пишет в адрес очков хода нужное мне значение ходов. Т.е. для одного персонажа я уже получил, что хотел. Но мне нужно прицепить туда не запись в адрес, а замену инструкции, которая вычитает очки хода. Чтобы это сделать, надо на нее как-то сослаться...указателем или сигнатуркой, я не знаю как с ними работать в ассемблере.

    Более чем уверен, что в Lua СЕ Эту задачу можно решить за 5 минут, т.к. там можно писать полноценные функции, обрабатывать указатели и смещения, а вот как провернуть на уровне ассемблера... 

    Я, честно говоря, тоже не понял, что автору конкретно нужно, но если то, о чем сказал Xipho, то не проще выделить и зарегистрировать в одном скрипте байт, а в другом - проверять его значение, и выполнять нужные действия?

    Ну, допустим, у нас есть два скрипта ("А" - где мы выделяем один байт под флаг, и "Б" - в котором должен проверяться флаг). Добавляем в таблицу адрес с нашим флагом, создаем на него две горячие клавиши:

    NumPad 1 - Установить значение на "1" (единицу)

    NumPad 2 - Установить значение на "0" (ноль)

    И в скрипте "Б" проверять, если флаг равен единице - условие истинно - выполняем нужные действия, если нет - считаем, что скрипт выключен, и ничего не делаем.

    Оба скрипта при этом должны быть активированы вместе - изначально, и не выключаться до завершения работы с ними, или с игрой.

    Я уже писал, что игра жестко хукает все клавиши, работают только альтаб и альтконтдел. Если бы можно было назначить хоткеи в СЕ, не родилось бы всей этой заморочки и я уже готовый код, активировал хоткеями))

    UPD. Всем спасибо кто участвовал, благодаря приложенному усердию поставленную задачу решил. ОГРОМНОЕ спасибо Xipho  за помощь, без него ни за что бы не вышло.

  3. Я так понимаю автор хочет, уже нарисованной разработчиками кнопкой в игре вкл/выкл чит? Если это так, то необходимо искать код, который выполняется при ее нажатии. Опишите что за кнопка, за что отвечает? Меняется ли какой-то параметр при её нажатии?

    . Выделить байт на индикацию вкл/выкл чита, и менять его, когда нажимается кнопка.

    Ну или создать поток и там вызывать GetAsyncKeyState www.cheatengine.org/keypresstut.php

    Вы все верно поняли. Кнопка отвечает за изменение стойки персонажа бег/шаг. При нажатии кнопки меняется "дальность хода" персонажа при одинаковых очках хода. Поиском неизвестного значения, переключая кнопкой стойки я отсеивал пока не нашел нужный адрес, далее на этот адрес ставлю бряк на запись и снова нажимаю кнопку - выскакивает инструкция. Вот появление этой инструкции в моем плане и должно служить активацией написанному коду.

  4. А если чекбокс на активацию поставить ??? ну раз игра сворачивается и можешь что то отсеивать,значит можно и активировать чекбоксом не чего не нажимая не каких кнопок.

    Можно, это да, но тут вся задумка строилась исходя из сложных обстоятельств: игрушка Код доступа: РАЙ. Штука очень атмосферная, пошаговая стратежка в стиле киберпанк. Но есть одно существенное НО: разрабы упоролись и сделали ее ПОЛНОСТЬЮ пошаговой. Игровой мир представлен несколькими локациями, довольно обширными и ходить по ним приходится тоже пошагово, даже вне боя. А вот бои проводить хочется по-честному, т.е. пошагово. Вот и получается, что мне нужно будет часто включать и отключать чит на ходы, чтобы так сказать соблюдать честность прохождения. Альтабом я это делать замучаюсь.

  5. Про рисование речи не было. Просто чтобы люди понимали, что кнопка часть графического интерфейса игры, а не хоткей, я использовал слово нарисованная.

  6. А я вот что-то не совсем понял, что нужно сделать. :(

    Keng привет! Твои уроки на ютубе хороши, мои заморочки в геймхакинге начались совсем недавно именно с них. Потом уже на канал Xipho наткнулся. Учусь у Вас обоих потихоньку.

    Что касается задачи, я уже не знаю как объяснить понятнее: в игровом интерфейсе есть кнопка, нарисованная, при нажатии на нее совершается определенное действие. Как известно любое действие это инструкция. Я хочу грубо говоря сделать хук инструкции, чтобы как только она (инструкция) всплывает активировался мой, уже написанный скрипт на другое действие, в данном случае отмена трат очков хода.

    Иначе говоря мы свои "читы" привыкли активировать или в CE поставив крестик напротив скрипта, либо хоткеем, заданным в том же СЕ, а тут стоит задача, привязаться к игровому событию, которое происходит после взаимодействия с игровым интерфейсом.

  7. Всех приветствую и прошу посодействовать в реализации вот такой штуки:

     

    Есть старая игрушка, которая цепко перехватывает любые нажатия клавиш, в том числе и не относящиеся к игре (доп. клавиши отвечающие за громкость звука например и т.д.), работает только alt+ctrl+del. Поэтому стало необходимо прикрутить активацию чита к "нарисованной" в игровом интерфейсе кнопке.

     

    1. В игровом интерфейсе имеется клавиша, нажимая на которую происходит переключение стойки персонажа. Методом поиска неизвестного значения я нашел адрес, значение в котором отвечает за текущую стойку. 

    2. Я ставлю бряк на запись в этот адрес и нажимаю клавишу смены стойки, выскакивает инструкция. Вот за эту инструкцию и будем цепляться.

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

    А это уже код, обеспечивающий отключение уменьшение очков хода для персонажей

    Так вот, надеюсь, что я не слишком раскатал губу и это реально сделать. К сожалению, в геймхакинге и программировании я Алёшка, так что мне остается только надеяться на чью-то помощь.

    NullAlex: Большой код принято оборачивать в тег спойлера. Читай FAQ по тегу.

    [ENABLE]aobscanmodule(INJECT,game.exe,83 79 68 01 0F 94 C0)alloc(newmem,$1000)label(code)label(return)newmem://Тут должен быть код, отключающий уменьшение очков хода у персонажейjmp returncode:// Тут без изменений оригинальная инструкция, которая всплывает при нажатии той самой "нарисованной" клавиши.  cmp dword ptr [ecx+68],01  sete al  jmp newmemINJECT:  jmp code  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 83 79 68 01 0F 94 C0unregistersymbol(INJECT)dealloc(newmem)
    [ENABLE]aobscanmodule(INJECT,game.exe,89 42 08 E8 66 AB 00 00)alloc(code,$1000)label(return)registersymbol(INJECT)code:  mov eax,[edx+08]// Инструкция срабатывает при перемещении персонажа  // В оригинале было [edx+08],eax  //Таким образом мы пишем не новое значение в текущее, а текущее в новое  // и очки хода у нас стоят на месте  call game.exe+F26B0  jmp returnINJECT:  jmp code  nop  nop  nopreturn:[DISABLE]dealloc(code)INJECT:db 89 42 08 E8 66 AB 00 00unregistersymbol(INJECT)
×
×
  • Создать...

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

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