Перейти к содержанию
Авторизация  
Dupper

[Royal Quest] Юзабельность скилов без нажатия клавишь и кликаний мышкой

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

Приветствую всех! Решил для игрушки написать автохила и автоэнергии(маны). Суть в том чтобы при снижении N - количества прожимался скилл/банка. Указатели и оффсеты на здоровье и энергию/ману нашел. Как найти "подобие активации скилла(спелла) через запись памяти, дабы исключить нажатие клавишь. Ах да, игра чует отладчик и при малейшей попытке зависает и закрывается. (Windows 10, CE 6.8.1). У кого другая система(Win Xp, Win7 и др.) отпишитесь , как ваша игра реагирует на отладчик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Dupper сказал:

Как найти "подобие активации скилла(спелла) через запись памяти

 

Искать обработчик нажатия клавиш, это оптимальный вариант, только если умеешь реверсить.

Не известно как разработчик решил её сделать, может использовал GetKeyState или 

Спойлер

switch (message)
    {
    case WM_KEYUP:
    	case WM_KEYDOWN:
        switch (wParam)
        {
        case VK_LEFT:
        	...
    case WM_KEYDOWN:
        switch (wParam)
        {
        case VK_LEFT:
        	...
    case WM_CHAR:
        switch (wParam)
        {
        case VK_LEFT:
        	...

 

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

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

 

В разы проще будет использовать SendInput.

Изменено пользователем Garik66
Любой код, цитата и прочее - должны быть обернуты специальными тэгами. Кроме того, если фрагмент кода достаточно большой (более 10 строк кода), то его необходимо также обернуть тэгом спойлера (скрытый текст).

Поделиться сообщением


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

Использую на данный момент AutoIT, там есть функция ControlSend , т.е. как я понял отправить команду окну. Всё работает если игра открыта в окне и не свернута. Стоит свернуть и ничего  не работает. Может это особенность игры "замораживаться" в свернутом состоянии, но это отдельная тема как я понимаю. Но если кто сталкивался и решил подобную проблему по "заморозке" ?))

Изменено пользователем Dupper

Поделиться сообщением


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

Вполне вероятно, что в игре используется DirectInput, а он не реагирует на нажатия, если окно игры не активно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 25.09.2018 в 21:11, Xipho сказал:

Вполне вероятно, что в игре используется DirectInput, а он не реагирует на нажатия, если окно игры не активно.

? это никак не обойти? Гугл к сожалению умалчивает ☹️

Поделиться сообщением


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

Так, что нибудь придумали? Я пробовал в одной игре искать нажатия клавиш и чёт такое себе это дело (

Может кто знает куда более лучший способ поиска обработчика нажатия клавиш?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 29.09.2018 в 09:35, Dupper сказал:

это никак не обойти?

Почему же никак? Выясняешь, какие функции отвечают за нажатия клавиш в директинпут, инжектишься в игру и вызываешь эти функции

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
57 минут назад, Xipho сказал:

Почему же никак? Выясняешь, какие функции отвечают за нажатия клавиш в директинпут, инжектишься в игру и вызываешь эти функции

 

А без инжекта можно? Ведь по любому где то да проходит обработка событий нажатия клавиши.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 часов назад, CrazyNeron сказал:

Ведь по любому где то да проходит обработка событий нажатия клавиши.

Да. Внутри приложения. Там и нужно его отлавливать и/или имитировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 часов назад, CrazyNeron сказал:

А без инжекта можно?

А как ты без инжекта будешь создавать поток, вызывающий нажатия клавиш внутри игры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
57 минут назад, Xipho сказал:

А как ты без инжекта будешь создавать поток, вызывающий нажатия клавиш внутри игры?

Ну вообще я представляю это как значение которое хранится в памяти игры, при изменении которого игра должна отреагировать, но похоже я заблуждаюсь, ведь значение нажатия клавиши может и не хранится в памяти как я понимаю. Ну вообще как я понимаю, самый хороший способ, это вызывать внутриигровые функции с аргументами, которые и будут выполнять те или иные действия в игре, но вот тут сразу возникает 2 вопроса, первый как найти такие функции, второй как вызвать такую функцию без инжекта в игру? (Разве такое не возможно?) И была у меня ещё одна идея касательно инжекта, а что если брать какую либо незначительную функцию и заменять её в памяти на нужную тебе, а после возвращаться всё наместо, но мне кажется это очень сложно и может с лёгкостью спровоцировать вылет игры. (Типо не инжект своего кода в игра, а замена сигнатуры на свою и возврат потом назад, той что была.) Не ужели даже cheat engine, что бы считать память что то инжектит в игру? Если да, то я явно многое ещё не понял и попросил бы мне тогда подкинуть список литературы, что бы понимать, что к чему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Xipho сказал:

А как ты без инжекта будешь создавать поток

Силой мысли.. :lol:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Xipho сказал:

А как ты без инжекта будешь создавать поток, вызывающий нажатия клавиш внутри игры?

CreateRemoteThread/CreateRemoteThreadEx?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, partoftheworlD сказал:

CreateRemoteThread/CreateRemoteThreadEx

Это да, но как ты без инжекта выяснишь девайс, который нужно будет передавать в функцию отправки клавиш DirectInput, я больше про это.

Поделиться сообщением


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

А, вообще, конечно, все сильно зависит от конкретной игры, и нужно смотреть.

Поделиться сообщением


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

Мне так никто и не ответил (

Поделиться сообщением


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

Мне кажется, тебе ответили. Ищи обработчик нажатия клавиш в игре.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Xipho сказал:

Мне кажется, тебе ответили. Ищи обработчик нажатия клавиш в игре.

Как его искать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 02.02.2020 в 14:25, CrazyNeron сказал:

Как его искать?

Пожалуйста, изучай.

А вообще, я не понимаю, зачем тебе именно прожимать банку, если ты можешь сделать условие и  просто ставить или складывать значение в памяти? Зачем усложнять?  

Изменено пользователем KRYPTOPUNK
что бы не дублировать сообщения

Поделиться сообщением


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

А еще можно найти указатель на хп и выставить банку на клавишу
Потом читать хп и если оно меньше твоего установленного %, отправлять игре Sendmassage c нажатием клавиши на которой установлена банка
Это самый просто вариант, максимально простой

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, roma912 сказал:

отправлять игре Sendmassage

Если игра использует DirectInput или XInput, то она проигнорирует сообщение нажатия клавиши.

  • Плюс 1

Поделиться сообщением


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

CRYPTOPUNK спасибо прочитаю, а вот тут заинтересовал как именно ставить или складывать значения в памяти? Просто я тебе объясню в чём тут дело, я делаю бота для онлайн игры и эмуляцию нажатия клавиш она воспринимает но оставлять комп тупо, что бы бот работал не айс пользоваться тоже охота, то есть игру свернуть и заниматься своими делами, а игра пусть сама играет, да указатели на здоровья и прочее я нашёл, а вот что дальше делать? Ну эмуляцию могу сделать, но вот если бы ты мне подсказал как это должно выглядеть в игре, что я ставлю значение или складываю и банка юзается, я бы был тебе очень благодарен.

Поделиться сообщением


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

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

можно попробовать отреверсить и найти функции которые отвечают за использование тех или иных действий, самое простое нати функцию передвижения например что то вроде "MoveTo" в дальнейшем ты сможешь отправлять своего персонажа куда угодна вне зависимости от нажатий клавиш или открытого окна. 
Однако тут вопрос безопастности. Безопасная эмуляция или опасные игры с функциями и памятью. В первом случае получаем тупого бота, которому требуется открытое окно, пиксельного бота можно написать за пару часов. С другой сторны ты становишься богом но получаешь вероятность оказаться забаненым.

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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