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

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


Гость Dupper

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

Приветствую всех! Решил для игрушки написать автохила и автоэнергии(маны). Суть в том чтобы при снижении 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
Ссылка на комментарий
Поделиться на другие сайты

В 25.09.2018 в 21:11, Xipho сказал:

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

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

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

  • 1 год спустя...

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

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

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

В 29.09.2018 в 09:35, Dupper сказал:

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

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

 

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

57 минут назад, Xipho сказал:

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

 

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

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

14 часов назад, CrazyNeron сказал:

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

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

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

57 минут назад, Xipho сказал:

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

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

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

2 часа назад, Xipho сказал:

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

CreateRemoteThread/CreateRemoteThreadEx?

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

6 часов назад, partoftheworlD сказал:

CreateRemoteThread/CreateRemoteThreadEx

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

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

В 02.02.2020 в 14:25, CrazyNeron сказал:

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

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

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

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

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

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

  • 2 недели спустя...

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

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

  • 1 месяц спустя...

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

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

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

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

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

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