|
Arduino, Нажатия мыши и клавиатуры в обход защиты от кликеров |
|
|
cirus |
14.12.2020, 0:24
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 27516
Пользователь №: 16.971
Возраст: 29
|
Скетч и модуль lua:
Arduino.zip ( 7,33 килобайт )
Кол-во скачиваний: 1249Драйвер для ардуино:
CH341SER.zip ( 185,9 килобайт )
Кол-во скачиваний: 1701Arduino позволяет эмулировать нажатия клавиш клавиатуры и мыши, в том числе в приложениях, которые блокируют нажатия кликеров. Может поворачивать камеру в шутерах и играх, в которых камера поворачивается с зажатой правой кнопкой мыши. Дополнительная информация по обходу защиты в 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
|
|
|
|
|
|
Ответов
KotMC |
10.1.2021, 1:19
|
Neophyte
Сообщений: 34
Регистрация: 10.1.2021 Группа: Пользователи Наличность: 0
Пользователь №: 19.851
Возраст: 36
|
pro micro. Если использовать этот скрипт скрипт
--lua local ffi = require('ffi') local setupapi = ffi.load('SetupAPI.dll') local advapi32 = ffi.load('Advapi32.dll')
local DIGCF_ALLCLASSES = 4 local DIGCF_PRESENT = 2 local SPDRP_HARDWAREID = 1 local DICS_FLAG_GLOBAL = 1 local DIREG_DEV = 1 local KEY_READ = 131097 local BUFF_LEN = 20 local ERROR_SUCCESS = 0 local REG_SZ = 1
ffi.cdef[[ struct HWND__ { int unused; }; typedef struct HWND__ *HWND; struct HKEY__ { int unused; }; typedef struct HKEY__ *HKEY; typedef HKEY *PHKEY; typedef unsigned long ULONG; typedef unsigned long DWORD; typedef DWORD *LPDWORD; typedef long LONG; typedef DWORD *PDWORD; typedef unsigned char BYTE; typedef BYTE *PBYTE, *LPBYTE; typedef wchar_t WCHAR; typedef const char *LPCSTR, *PCSTR; typedef unsigned long ULONG_PTR, *PULONG_PTR; typedef void *PVOID; typedef PVOID HDEVINFO; typedef ULONG DEVPROPTYPE; typedef LONG LSTATUS; typedef DWORD ACCESS_MASK; typedef ACCESS_MASK REGSAM;
typedef struct _GUID {unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[8];} GUID; typedef struct _SP_DEVINFO_DATA {DWORD cbSize; GUID ClassGuid; DWORD DevInst; ULONG_PTR Reserved;} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
HDEVINFO SetupDiGetClassDevsA(const GUID *ClassGuid, PCSTR Enumerator, HWND hwndParent, DWORD Flags); bool SetupDiDestroyDeviceInfoList(HDEVINFO DeviceInfoSet); bool SetupDiEnumDeviceInfo(HDEVINFO DeviceInfoSet, DWORD MemberIndex, PSP_DEVINFO_DATA DeviceInfoData); bool SetupDiGetDeviceRegistryPropertyA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize); HKEY SetupDiOpenDevRegKey(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Scope, DWORD HwProfile, DWORD KeyType, REGSAM samDesired); LSTATUS RegCloseKey(HKEY hKey); LSTATUS RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType,LPBYTE lpData, LPDWORD lpcbData); ]] function get_port(vid, pid) if vid == nil then return -1 end if pid == nil then return -2 end
local com local DeviceInfoSet = ffi.new('HDEVINFO') local DeviceIndex = 0 local DeviceInfoData = ffi.new('SP_DEVINFO_DATA', 0) local DevEnum = ffi.new('PCSTR', "USB") local ExpectedDeviceId = 'VID_' .. tostring(vid) .. '&PID_' .. tostring(pid) local szBuffer = ffi.new('unsigned char[1024]', 0) local ulPropertyType = ffi.new('DEVPROPTYPE[1]') local dwSize = ffi.new('PDWORD') DeviceInfoSet = setupapi.SetupDiGetClassDevsA(nil, DevEnum, nil, bit.bor(DIGCF_ALLCLASSES, DIGCF_PRESENT)) DeviceInfoData.cbSize = ffi.sizeof(DeviceInfoData)
while setupapi.SetupDiEnumDeviceInfo(DeviceInfoSet, DeviceIndex, DeviceInfoData) do DeviceIndex = DeviceIndex + 1 if (setupapi.SetupDiGetDeviceRegistryPropertyA(DeviceInfoSet, DeviceInfoData, SPDRP_HARDWAREID, ulPropertyType, szBuffer, ffi.sizeof(szBuffer), dwSize)) then if ffi.string(szBuffer):match(ExpectedDeviceId) then local hDeviceRegistryKey = ffi.new('HKEY') hDeviceRegistryKey = setupapi.SetupDiOpenDevRegKey(DeviceInfoSet, DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ); local pszPortName = ffi.new('char[?]', BUFF_LEN) local dwSize = ffi.new('DWORD[1]', ffi.sizeof(pszPortName)) local dwType = ffi.new('DWORD[1]') if advapi32.RegQueryValueExA(hDeviceRegistryKey, "PortName", nil, dwType, pszPortName, dwSize) == ERROR_SUCCESS and dwType[0] == REG_SZ then com = tonumber(ffi.string(pszPortName):match('%d+')) end end advapi32.RegCloseKey(hDeviceRegistryKey) end end setupapi.SetupDiDestroyDeviceInfoList(DeviceInfoSet) if com then return com end return 0 end
-- узнать номер порта, передавать vid, pid local COM = get_port(2341, 8036) -- указать нужные vid и pid log(COM) Порт определятся верно. Убрал строки до такого состояния отрабатывает только задержка. скрипт
--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
::me:: wait (3000) -- пауза 3 секунды чтобы переключиться на нужное окно hw.key ('k') -- нажать клавишу 'k' goto me В логе после его запуска это: 1:10:56 0 (test 210110 010231.txt, 0): wait 3000 1:10:59 0 (test 210110 010231.txt, 0): wait 1 1:10:59 0 (test 210110 010231.txt, 0): wait 1 1:10:59 0 (test 210110 010231.txt, 0): wait 1 1:10:59 0 (test 210110 010231.txt, 0): wait 1
|
|
|
|
Сообщений в этой теме
cirus Arduino 14.12.2020, 0:24 DarkMaster Описание требований к арудино/закидывание скетчей ... 14.12.2020, 1:22 Fors1k На случай если будет лень вбивать vid и pid:
--lua... 17.12.2020, 18:38 KotMC Скачал UO Pilot v2.41 (31.12.2018),Скетч и модуль ... 10.1.2021, 0:42 cirus Ардуино micro или leonardo?
Номер порта ардуино пр... 10.1.2021, 0:57 cirus
Значит порт недоступен для открытия. Попробуйте с... 10.1.2021, 2:00 KotMC Совершенно верно, все работает. Только не на этом ... 10.1.2021, 2:11 cirus
text вместо key. 10.1.2021, 2:13 kyja Подскажите как Arduino работает для виртуалок то е... 14.1.2021, 15:59 cirus
Без понятия. Команды Arduino получает через com п... 14.1.2021, 17:17 KotMC Отрабатывает один раз, при повторном запуске UO Pi... 18.1.2021, 1:28 DarkMaster Если во втором скрипте раскомментировать:
Проблем... 18.1.2021, 1:41 KotMC Если во втором скрипте раскомментировать:
--hw.mo... 18.1.2021, 8:34 cirus
По какой-то причине порт не закрывается. В резуль... 18.1.2021, 1:45 DarkMaster
Хм... А можно как-то закрыть порт без ребута желе... 18.1.2021, 4:21 cirus
Пилот надо перезапускать в таких случаях. Порт от... 18.1.2021, 13:16 KotMC
Пилот надо перезапускать в таких случаях. Порт от... 18.1.2021, 21:48 KotMC
KotMC, этот файл в папку с пилотом закиньте
Эт... 19.1.2021, 23:06 cirus Попробуйте другие драйвера, они могут отличаться. 18.1.2021, 22:06 KotMC Перепробовал много разных драйверов результат один... 19.1.2021, 3:17 cirus
Тут и стараться не надо. Остановка скрипта при от... 19.1.2021, 3:39 cirus
Можно. И не только в пилоте, а любой другой прогр... 19.1.2021, 23:46 KotMC Про Arduino.dll понятно, а модуль Arduino.lua из ... 20.1.2021, 0:17 cirus
Только вывод в лог добавлен. 20.1.2021, 0:36 kyja Подскажите пожалуйста как можно решить проблему кр... 28.1.2021, 1:32 kyja
Подскажите пожалуйста как можно решить проблему к... 1.2.2021, 1:28 cirus
hw.com = 3 -- 3й порт 1.2.2021, 1:42 kyja
hw.com = 3 -- 3й порт
Большое спасибо 1.2.2021, 1:49 kyja Подскажите а как используя Arduino.dll
отправить н... 9.2.2021, 22:21 Fors1k
обычные буквы вообще не понял
hw.key ('k... 10.2.2021, 0:05 kyja --lua
local ffi = require("ffi"... 10.2.2021, 0:20 KotMC
Если не ошибаюсь здесь ответ. 10.2.2021, 0:44 kyja
Если не ошибаюсь здесь ответ.
Это мышка с ней пр... 10.2.2021, 0:52 KotMC Сайт ардуино отправляет к этой табличке asciitable... 10.2.2021, 1:11 Fors1k Сейчас установлю arduino, попробую dll. 10.2.2021, 1:16 Fors1k Пробуйте. cirus придёт, может что подправит.
--lua... 10.2.2021, 1:41 cirus
Можно так сделать:
local enter = 0xB0
function _k... 10.2.2021, 2:00 kyja Спасибо да табличка с кодами решила проблемы а fun... 10.2.2021, 23:13 kyja Подскажите почему может не срабатывать рандом смеш... 19.2.2021, 0:50 cirus
Потому что они все неправильные.
--lua
math.rando... 19.2.2021, 1:46 KotMC Скажите, а такое написание:
hw.mouse.move (arr[1... 20.2.2021, 19:48 Madeus hw.mouse.move (arr[1][1] + mat... 20.2.2021, 20:30 DarkMaster
И да и нет. Распределение будет близко к нормальн... 21.2.2021, 3:14 KotMC "Вернулась" проблема с не закрытием порт... 22.2.2021, 23:50 cirus Нужен минимальный код, который приводит к зависани... 23.2.2021, 0:15 KotMC А зачем нам вообще этот драйвер из шапки, если у н... 23.2.2021, 0:19 kyja Тоже периодически сталкивался с зависаниями но у м... 23.2.2021, 12:03 cirus
--lua
local hw = require'arduino'
hw.com ... 23.2.2021, 12:24 kyja
--lua
local hw = require'arduino'
hw.com ... 25.2.2021, 11:50 KotMC При работе через модуль луа такая конструкция рабо... 23.2.2021, 12:36 KotMC Сам спросил, сам отвечу для моего применения можно... 23.2.2021, 13:02 cirus
Потому что надо передавать координаты, в которых ... 23.2.2021, 13:02 KotMC "Обрамил" всё что возможно выводом в лог... 23.2.2021, 17:11 cirus
В файле arduino.lua в строке mouse_pos('abs... 25.2.2021, 12:05 Madeus Замечена такая проблема, если подключать arduino п... 8.4.2021, 20:50 cirus Выкладывайте код, который вызывает ошибку. 9.4.2021, 1:34 Madeus
Выкладывайте код, который вызывает ошибку.
--lua... 9.4.2021, 1:54 cirus Обновил архив в первом посте, теперь не должно быт... 9.4.2021, 2:39 Madeus
Обновил архив в первом посте, теперь не должно бы... 9.4.2021, 12:28 kyja
"Обрамил" всё что возможно выводом в ло... 6.5.2021, 0:55 KotMC
[quote name='kyja' post='441030' date='6.5.2021, ... 6.5.2021, 20:56 kyja
1 раз из 100, пилот "вешается"
У вас с... 6.5.2021, 21:23 KotMC
У вас скрипт работает в одной вкладке или наприме... 7.5.2021, 19:44 kyja Подскажите пожалуйста можно ли каким то образом не... 31.7.2021, 1:24 cirus
Нельзя. 31.7.2021, 1:36 kyja
Нельзя.
Понял, спасибо 31.7.2021, 1:36 Crocotea В свзяи с чем может быть проблема?
в диспетчере ус... 19.8.2021, 20:47 cirus Приведённый код работает. 20.8.2021, 1:38 kyja Подскажите как определить зажатие клавиш при испол... 24.8.2021, 12:35 cirus
--lua
local ffi = require("ffi")
... 24.8.2021, 13:11 kyja
[code]--lua
local ffi = require("ffi... 29.8.2021, 23:55 kyja Большое спасибо 24.8.2021, 15:25 1dark1 Привет.
Можете сказать как правильно составить ком... 5.10.2021, 12:38 cirus В файле arduino.lua можно посмотреть что отправляе... 5.10.2021, 13:01 1dark1
echo 5++19660700>COM7
Переместит курсор на 3... 5.10.2021, 21:27 cirus
echo 025>COM7
02 - установить паузу между каж... 6.10.2021, 1:40 1dark1 Спасибо за пояснения 6.10.2021, 16:47 Kangoshi А как нажимать кнопки с numpad'а? Есть что-то ... 10.11.2021, 0:43 cirus
Можно добавить в файл arduino.lua:
export_array.K... 10.11.2021, 1:57 Joaquin Добрый день. В первом посте написано, что работает... 4.12.2021, 14:02 Madeus Ctrl + A или findwindow, workwindow. Примеры тут 4.12.2021, 17:46 kyja Подскажите пожалуйста почему происходит клик в 2 т... 18.2.2022, 0:37 kdv Вроде все делал как надо, но : 11.3.2022, 17:36 cirus Нужна плата с контролером ATmega32u4. 12.3.2022, 1:43 kdv А работа с другими платами возможна с uopilot?
У м... 12.3.2022, 9:34 cirus
Дело не в пилоте, а в том что только платы с ATme... 12.3.2022, 10:03 kdv Печально :( 12.3.2022, 10:50 DarkMaster
Cockney мне вроде объяснял, что можно и на другой... 17.3.2022, 22:32 cirus
Проще купить нужную железку. 18.3.2022, 1:42 kdv Добрый вечер, продолжил эпопею с Arduino. Она зара... 13.5.2022, 20:24 Madeus В цикле while, for. 13.5.2022, 22:17 kdv
В цикле while, for.
Попробовал FOR
for #i 1 10
... 14.5.2022, 10:04 DarkMaster Потому что синтаксис должен быть Lua.
--lua
for i ... 14.5.2022, 12:44 kdv
Потому что синтаксис должен быть Lua.
--lua
for i... 14.5.2022, 15:19 DarkMaster
Да. 14.5.2022, 17:20 Gals Я пока не понимаю ничего в arduino.
И совсем не по... 24.8.2022, 10:39 DarkMaster Это бы лучше у ардуинщиков спросить. Цена вопроса ... 25.8.2022, 13:37 Madeus На 11 винде кто-то пользуется? Перебрал кучу дров ... 9.2.2023, 22:25 Gwyn Я так понял ардуино не умеет в мультиоконку и може... 10.4.2023, 17:37
2 страниц 1 2 >
53 чел. читают эту тему (гостей: 53, скрытых пользователей: 0)
Пользователей: 0
|
|