|
Arduino, Нажатия мыши и клавиатуры в обход защиты от кликеров |
|
|
cirus |
14.12.2020, 0:24
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26861
Пользователь №: 16.971
Возраст: 29
|
Скетч и модуль lua:
Arduino.zip ( 7,33 килобайт )
Кол-во скачиваний: 267Драйвер для ардуино:
CH341SER.zip ( 185,9 килобайт )
Кол-во скачиваний: 741Arduino позволяет эмулировать нажатия клавиш клавиатуры и мыши, в том числе в приложениях, которые блокируют нажатия кликеров. Может поворачивать камеру в шутерах и играх, в которых камера поворачивается с зажатой правой кнопкой мыши. Дополнительная информация по обходу защиты в MMORPG. Работает только с активным окном.
Необходимое устройство и установка ПО
1. Требуется плата Arduino micro или Arduino Leonardo. Заказать можно на Aliexpress. 2. Скачать и установить Arduino IDE. https://www.arduino.cc/en/software ( Windows Win7 and newer) 3. Скачать и установить драйвер CH341SER (ссылка вначале темы). 4. Открыть Arduino IDE, пункт меню 'Инструменты', выбрать тип платы и порт. 5. Скачать архив arduino.zip (ссылка вначале темы) и извлечь его. Файл arduino.lua закинуть в папку, в которой находится exe пилота. Скетч загрузить в ардуино. Для этого скопировать содержимое файла Скетч.txt, вставить в Arduino IDE, нажать кнопку 'Загрузка'. Требования
Пилот версии 2.41 или выше. Запускать от администратора. Для работы функций мыши нужно в настройках мыши снять галочку 'Включить повышенную точность установки указателя'. В функцию get_port (2341, 8036) нужно передавать vid и pid ардуино. Узнать их можно в Arduino IDE, пункт меню 'Инструменты', 'Получить информацию о плате'. При переполнении буфера, хотя такого не должно быть, 3 секунды будет гореть встроенный светодиод L. В этом случае нужно увеличить паузы между нажатиями клавиш мыши/клавиатуры. Все координаты в командах мыши указывать абсолютные, т. е. относительно левого верхнего угла экрана.
Список функций
get_port (vid, pid) -- узнать в каком com порте находится ардуино
set_delay_key (ms) -- установить задержку нажатий клавиатуры set_delay_mouse (ms) -- установить задержку нажатий мыши set_delay_mousemove(ms) -- установить паузу в мсек между каждым шагом перемещения курсора, чем меньше, тем быстрее перемещается курсор set_offset_mousemove(step) -- шаг перемещения курсора от 1 до 127, чем больше, тем быстрее перемещается курсор. set_random_delay_key(random) -- рандом в мсек между нажатием и отпусканием клавиш клавиатуры set_random_delay_mouse(random) -- рандом в мсек между нажатием и отпусканием клавиш
key (code) -- нажать клавишу клавиатуры text (text) -- отослать текст, в том числе русские символы key_down (code) -- зажать (не отжимая) клавишу клавиатуры key_up (code) -- отжать клавишу клавиатуры
mouse.move (x, y) -- переместить мышь mouse.click (x, y, button) -- кликнуть мышью, button должен содержать код клавиши мыши (смотреть список клавиш) mouse.left (x, y) -- клик левой кнопкой mouse.right (x, y) -- клик правой кнопкой mouse.middle (x, y) -- клик средней кнопкой mouse.dbl (x, y, button) -- двойной клик, button должен содержать код клавиши мыши mouse.left_dbl (x, y) -- двойной клик левой кнопкой мыши mouse.right_dbl (x, y) -- двойной клик правой кнопкой мыши mouse.middle_dbl (x, y) -- двойной клик средней кнопкой мыши mouse.down (x, y, button) -- зажать (не отжимая) кнопку мыши, button должен содержать код клавиши мыши mouse.left_down (x, y) -- зажать (не отжимая) левую кнопку мыши mouse.right_down (x, y) -- зажать (не отжимая) правую кнопку мыши mouse.middle_down (x, y) -- зажать (не отжимая) среднюю кнопку мыши mouse.up (x, y, button) -- отжать кнопку мыши, button должен содержать код клавиши мыши mouse.left_up (x, y) -- отжать левую кнопку мыши mouse.right_up (x, y) -- отжать правую кнопку мыши mouse.middle_up (x, y) -- отжать среднюю кнопку мыши mouse.drag (x, y, x2, y2) -- зажать левую кнопку мыши в точке x y, переместить в точку x2 y2 mouse.wheel_up (x, y, count) -- прокручивание колёсика мыши вверх, count - насколько щелчков прокрутить mouse.wheel_down (x, y, count) -- прокручивание колёсика мыши вниз, count - насколько щелчков прокрутить
Список многосимвольных клавиш
mouse_left_button = 1 mouse_right_button = 2 mouse_middle_button = 4
left_ctrl = 0x80 left_shift = 0x81 left_alt = 0x82 left_gui = 0x83 right_ctrl = 0x84 right_shift = 0x85 right_alt = 0x86 right_gui = 0x87 up_arrow = 0xDA down_arrow = 0xD9 left_arrow = 0xD8 right_arrow = 0xD7 backspace = 0xB2 tab = 0xB3 enter = 0xB0 esc = 0xB1 insert = 0xD1 delete = 0xD4 page_up = 0xD3 page_down = 0xD6 home = 0xD2 ["end"] = 0xD5 caps_lock = 0xC1 f1 = 0xC2 f2 = 0xC3 f3 = 0xC4 f4 = 0xC5 f5 = 0xC6 f6 = 0xC7 f7 = 0xC8 f8 = 0xC9 f9 = 0xCA f10 = 0xCB f11 = 0xCC f12 = 0xCD F1 = 0xC2 F2 = 0xC3 F3 = 0xC4 F4 = 0xC5 F5 = 0xC6 F6 = 0xC7 F7 = 0xC8 F8 = 0xC9 F9 = 0xCA F10 = 0xCB F11 = 0xCC F12 = 0xCD
Пример использования клавиатуры
Код --lua local hw = require'arduino' hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино if hw.com < 1 then -- если номер порта меньше 1 log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено end_script () end hw.set_delay_key (20) -- установить паузу между нажатиями клавиш клавиатуры hw.set_random_delay_key(10) -- установить рандом между нажатием и отпускание клавиш от 0 до 9 мсек -- т. е. между нажатием и отпусканием клавиши будет пауза от 20 до 29 мсек
wait (3000) -- пауза 3 секунды чтобы переключиться на нужное окно hw.key ('k') -- нажать клавишу 'k' hw.key (hw.enter) -- нажать 'Enter'
wait (1000) -- пауза 1 сек.
hw.key_down ('s') -- зажать клавишу 's' wait (3000) -- пауза 3 сек., при этом клавиша будет зажата hw.key_up ('s') -- отпустить клавишу 's' hw.key (hw.enter) -- нажать 'Enter'
hw.text ('Hello Привет') -- напечатать текст hw.key ('V') -- нажать Shift+'v' Пример использования мыши
Код --lua local hw = require'arduino' hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино if hw.com < 1 then -- если номер порта меньше 1 log ('error = ' .. tostring(hw.com)) -- код ошибки end_script () end hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек -- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек. hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.mouse.left (200, 100) -- клик левой кнопкой мыши в координатах 200, 100 hw.mouse.right (200, 100) -- клик правой кнопкой мыши wait (3000) -- пауза 3 секунды hw.mouse.left_dbl (35, 35) -- двойной клик левой кнопкой мыши wait (2000) hw.mouse.left_down (200, 200) -- зажать левую кнопку мыши wait(500) hw.mouse.left_up (900, 300) -- отпустить левую кнопку мыши Сообщение отредактировал cirus - 11.7.2023, 2:17
|
|
|
|
|
|
Ответов(20 - 39)
cirus |
19.1.2021, 3:39
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26861
Пользователь №: 16.971
Возраст: 29
|
Цитата А вот в ручную все же можно повесить порт или пилота - частым запуском Тут и стараться не надо. Остановка скрипта при открытом порте и после этого потребуется перезапуск пилота. Можно ещё длл попробовать, но в скорее всего ничего не изменится, т. к. в ней тот же самый код.
Arduino.zip ( 101,33 килобайт )
Кол-во скачиваний: 299Архив распаковать и закинуть в папку с пилотом. Тестил только на win10. Пример использования: код
Код --lua local ffi = require("ffi") log 'clear' log 'mode compact' local hw = ffi.load('Arduino.dll')
ffi.cdef[[ int get_port(int VID, int PID); int set_port(int com); int set_delay_mouse(int ms); int set_delay_mousemove(int ms); int set_offset_mousemove(int step); int set_random_delay_mouse(int rand); int mouse_move(int x, int y); ]]
local com = hw.get_port(2341, 8036) hint('Номер порта: ' .. tostring(com)) if com < 1 then -- если номер порта меньше 1 log ('error = ' .. tostring(com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено end_script () end
hw.set_port(com) hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.mouse_move (651, 225) -- переместить мышь
|
|
|
|
KotMC |
19.1.2021, 23:06
|
Neophyte
Сообщений: 34
Регистрация: 10.1.2021 Группа: Пользователи Наличность: 0
Пользователь №: 19.851
Возраст: 36
|
Цитата(cirus @ 18.1.2021, 13:16) KotMC, этот файл в папку с пилотом закиньте
Этот модуль можно использовать вместо , модуля из шапки? Список функций для него не меняется? Зависания пилота происходили скорее всего из-за ноутбука. На двух из трех usb портов работает с рандомными завываниями, на одном более менее стабильно. Проверил на других компьютерах - пилот, модуль, ардуино, скрипт работаю нормально.
|
|
|
|
cirus |
19.1.2021, 23:46
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26861
Пользователь №: 16.971
Возраст: 29
|
Цитата Этот модуль можно использовать вместо , модуля из шапки? Можно. И не только в пилоте, а любой другой программе, которая может подключать библиотеки. Цитата Список функций для него не меняется? Вызов некоторых функций отличается. Список функций Arduino.dll
Код --lua local ffi = require("ffi") local hw = ffi.load('Arduino.dll')
ffi.cdef[[ int get_port (int vid, int pid); int set_port (int COMport); int set_delay_key (int ms); int set_delay_mouse (int ms); int set_delay_mousemove(int ms); int set_offset_mousemove(int step); int set_random_delay_key(int rand); int set_random_delay_mouse(int rand);
int key (int code); int key_down (int code); int key_up (int code); int text (const char* text);
int mouse_move (int x, int y); int mouse_click (int button); int mouse_click_dbl (int button); int mouse_left (int x, int y); int mouse_right (int x, int y); int mouse_middle (int x, int y);
int mouse_left_dbl (int x, int y); int mouse_right_dbl (int x, int y); int mouse_middle_dbl (int x, int y);
int mouse_left_down (int x, int y); int mouse_right_down (int x, int y); int mouse_middle_down (int x, int y);
int mouse_left_up (int x, int y); int mouse_right_up (int x, int y); int mouse_middle_up (int x, int y);
int mouse_drag_left (int x, int y, int x2, int y2); int mouse_drag_right (int x, int y, int x2, int y2);
int mouse_wheel_up (int x, int y, int count); int mouse_wheel_down (int x, int y, int count); ]] Т. е. вместо hw.mouse.move (651, 225) надо hw.mouse_move (651, 225).
|
|
|
|
kyja |
1.2.2021, 1:28
|
Novice
Сообщений: 87
Регистрация: 29.10.2016 Группа: Пользователи Наличность: 1
Пользователь №: 18.164
|
Цитата(kyja @ 28.1.2021, 1:32) Подскажите пожалуйста как можно решить проблему крайне медленной работы на vmware workstation 16? Фактически все работает но время выполнения просто огромное, на virtualbox такой проблемы нету вообще там все как на обычном пк все отрабатывает согласно задержкам
Если кому то интересно то для vmware это решилось с помощью USB over Network офсайт но так же она есть на торентах (странно конечно что родное подключение от vmware работает хуже чем стороний софт при по сути одинаковой логике проброса юсб у обоих через tcp/ip если не ошибаюсь) возможно это глюк именно для arduino потому что если замерить скорость флешки через CrystalDiskMark то разница у хоста и виртаулки будет всего 5-15% но проброшенный arduino работает в ~500 раз медленней чем на хосте И еще вопрос вомзожно ли подключатся не через Код hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино vid и pid а через например номер com порта? у них ведь у всех он одинаков и если запустить несколько пилотов он ведь не поймет к какому именно устройству надо подсоединятся Код --lua require"luaposh";hw=require"arduino";log"clear"
hw.com = PScode('R',{[[$Return=Get-ArduinoPort]]}) if type(hw.com) ~= "number" then log("ERROR\n"..hw.com) end_script() end
hw.mouse.move(400, 200) Или это и есть способ подключатся именно к определенному com порту? (у меня не получилось)
|
|
|
|
kyja |
9.2.2021, 22:21
|
Novice
Сообщений: 87
Регистрация: 29.10.2016 Группа: Пользователи Наличность: 1
Пользователь №: 18.164
|
Подскажите а как используя Arduino.dll отправить нажатие кнопок Код hw.key (hw.enter) -- нажать 'Enter' hw.text ('Hello Привет') -- напечатать текст hw.key ('V') -- нажать Shift+'v' Enter получилось так Код а вот обычные буквы вообще не понял
|
|
|
|
kyja |
10.2.2021, 0:20
|
Novice
Сообщений: 87
Регистрация: 29.10.2016 Группа: Пользователи Наличность: 1
Пользователь №: 18.164
|
скрипт
Код --lua local ffi = require("ffi") local hw = ffi.load('Arduino.dll')
ffi.cdef[[ int get_port (int vid, int pid); int get_port (int vid, int pid); int set_port (int COMport); int set_delay_key (int ms); int set_delay_mouse (int ms); int set_delay_mousemove(int ms); int set_offset_mousemove(int step); int set_random_delay_key(int rand); int set_random_delay_mouse(int rand);
int key (int code); int key_down (int code); int key_up (int code); int text (int text);
int mouse_move (int x, int y); int mouse_click (int button); int mouse_click_dbl (int button); int mouse_left (int x, int y); int mouse_right (int x, int y); int mouse_middle (int x, int y);
int mouse_left_dbl (int x, int y); int mouse_right_dbl (int x, int y); int mouse_middle_dbl (int x, int y);
int mouse_left_down (int x, int y); int mouse_right_down (int x, int y); int mouse_middle_down (int x, int y);
int mouse_left_up (int x, int y); int mouse_right_up (int x, int y); int mouse_middle_up (int x, int y);
int mouse_drag_left (int x, int y, int x2, int y2); int mouse_drag_right (int x, int y, int x2, int y2);
int mouse_wheel_up (int x, int y, int count); int mouse_wheel_down (int x, int y, int count); ]]
local com = hw.get_port(2341, 8036) --hint('Номер порта: ' .. tostring(com)) if com < 1 then -- если номер порта меньше 1 log ('error = ' .. tostring(com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено end_script () end
hw.set_port(com) hw.set_delay_mouse (95) -- установить паузу между нажатиями клавиш мыши hw.set_random_delay_mouse(15) -- установить рандом между нажатиями клавиш мыши от 0 до 15 мсек hw.set_offset_mousemove(6) -- шаг перемещения курсора, чем больше тем быстрее перемещается hw.set_delay_mousemove(6) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается hw.set_delay_key (325) -- установить задержку нажатий клавиатуры hw.set_random_delay_key(95) -- рандом в мсек между нажатием и отпусканием клавиш клавиатуры
wait (3000 + math.random (20))
hw.key ('k') -- нажать wait (75 + math.random (30)) hw.key (0xB0) -- нажать wait (375 + math.random (30)) В таком виде тоже не работает hw.key (k) -- нажать но все что Hexadecimal значение отлично проходят
Эскизы прикрепленных изображений
|
|
|
|
KotMC |
10.2.2021, 0:44
|
Neophyte
Сообщений: 34
Регистрация: 10.1.2021 Группа: Пользователи Наличность: 0
Пользователь №: 19.851
Возраст: 36
|
Цитата Вызов некоторых функций отличается. Список функций Arduino.dll
Список функций Arduino.dll Код --lua local ffi = require("ffi") local hw = ffi.load('Arduino.dll')
ffi.cdef[[ int get_port (int vid, int pid); int set_port (int COMport); int set_delay_key (int ms); int set_delay_mouse (int ms); int set_delay_mousemove(int ms); int set_offset_mousemove(int step); int set_random_delay_key(int rand); int set_random_delay_mouse(int rand);
int key (int code); int key_down (int code); int key_up (int code); int text (int text);
int mouse_move (int x, int y); int mouse_click (int button); int mouse_click_dbl (int button); int mouse_left (int x, int y); int mouse_right (int x, int y); int mouse_middle (int x, int y);
int mouse_left_dbl (int x, int y); int mouse_right_dbl (int x, int y); int mouse_middle_dbl (int x, int y);
int mouse_left_down (int x, int y); int mouse_right_down (int x, int y); int mouse_middle_down (int x, int y);
int mouse_left_up (int x, int y); int mouse_right_up (int x, int y); int mouse_middle_up (int x, int y);
int mouse_drag_left (int x, int y, int x2, int y2); int mouse_drag_right (int x, int y, int x2, int y2);
int mouse_wheel_up (int x, int y, int count); int mouse_wheel_down (int x, int y, int count); ]]
Т. е. вместо hw.mouse.move (651, 225) надо hw.mouse_move (651, 225). Если не ошибаюсь здесь ответ.
|
|
|
|
kyja |
10.2.2021, 0:52
|
Novice
Сообщений: 87
Регистрация: 29.10.2016 Группа: Пользователи Наличность: 1
Пользователь №: 18.164
|
Цитата(KotMC @ 10.2.2021, 0:44) Если не ошибаюсь здесь ответ.
Это мышка с ней проблем нет, и Hexadecimal значениями тоже все ок но вот именно просто кнопка k (я бы и Hexadecimal заменил все клавиши но не смог найти на сайте ардуино список по всем символам)
|
|
|
|
kyja |
19.2.2021, 0:50
|
Novice
Сообщений: 87
Регистрация: 29.10.2016 Группа: Пользователи Наличность: 1
Пользователь №: 18.164
|
Подскажите почему может не срабатывать рандом смешение у hw.mouse.move, пробовал такие варианты не срабатывает не один Код local x, y = 37, 533, 50, 50, -50, -52 hw.mouse.move (x, y) Код hw.mouse.move (37, 533, 50, 50, -50, -52) Код hw.mouse.move (39, 537, 5, 10, -7, -12) local x, y = mouse_pos () hw.mouse.left (x, y, 50, 50, -50, -50)
|
|
|
|
|
|
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|