Автокликер Clickermann :: Форум

Основной раздел => Использование => Topic started by: dramster on February 12, 2021, 01:11:04 AM

Title: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: dramster on February 12, 2021, 01:11:04 AM
Не прошло и года, как у меня все-же получилось написать длл для общения с ком портом, а именно с ардуиномикро. По сравнению с командной строкой, работает шустро и незаметно.
При написании никаких дополнительных компонентов для работы с ком не использовал. С ними оказалось намного все сложнее.
Вобщем, пару вечеров, куча статей и форумов, вот первый, и вполне рабочий вариант.
Кто в теме, или вдруг загорится этой темой, код длл делфи10:
Code: (clickermann) [Select]
library micro_com;

uses    Windows, SysUtils;

//------------------------------------------------------------------------------
// Основное тело функции, идет на экспорт, вызывается из кликера
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;


type
  pIntArr = array[0..0] of Integer;
var
 DCB   : TDCB;
 hPort : THandle;
 port_num : integer;
 param : integer;
 byete_res: Cardinal;
 str : string;
 len : integer;
begin
   port_num := pIntArr(_mas^)[0];
   param := pIntArr(_mas^)[_size-1];

  // 1. Открываем файл
  hPort := CreateFile(PChar('COM'+IntToStr(port_num)), GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  // 2. Контроль ошибок
  if hPort = INVALID_HANDLE_VALUE then begin
   // Обнаружена ошибка, порт открыть не удалось
   result := 1;
   exit;
  end;

  // 3. Чтение текущих настроек порта
 if GetCommState(hPort, DCB) then ;
  // 4. Настройки:
  // Скорость обмена
 DCB.BaudRate := 9600;
  // Число бит на символ
 DCB.ByteSize := 8;
  // Стоп-биты
 DCB.StopBits := 1;
  // Четность
 DCB.Parity   := 0;
  // Какая-то херь непонятная
 DCB.Flags := 20625;
  // 5. Передача настроек
 if not SetCommState(hPort, DCB) then begin{ошибка настройки порта}
   result := 2;
   exit;
 end;
  // 6. Настройка буферов порта (очередей ввода и вывода)
 if not SetupComm(hPort, 16, 16) then begin{ошибка настройки буферов}
   result := 3;
   exit;
 end;
  // 7. Сброс буферов и очередей
if PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR) then
 // 8. Запись в порт
 str := intToStr(param);
 len := Length(str);
 WriteFile(hPort, PChar(str)^, len*2, byete_res, nil);
  // 9. Закрытие порта
 CloseHandle(hPort);
 result := 5;
end;

//------------------------------------------------------------------------------

// список экспорта
exports execute;

begin

end.

Скомпилированная библиотека уверенно отправляет в нужный порт любой текст. Примерно так:
Code: (clickermann) [Select]
CALL ("micro_com.dll", $com, $val)
Нам же, для управления микрой, нужны только числа. Скетч для контроллера взял старый отсюда http://crapware.aidf.org/forum/index.php?topic=5215.msg34294#msg34294 . Немного доработал его:
Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
unsigned long par = 0;
String instring = "";
int kmfunct = 0;
int x_cor = 0;
int y_cor = 0;
int mult = 0;
int inchar = 0;

void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
 
}
 
void loop() {


while(Serial.available() > 0){ 
inchar = Serial.read();
if (isDigit(inchar)) {
   instring += (char)inchar;     
    }   
}   
  par = instring.toInt();
  instring = "";


    if (par > 0) {
     
     kmfunct =  par/16777216 ;
     switch (kmfunct) {
 
     case 1:  //Mouse.click
      Mouse.click(par - kmfunct*16777216);
      break;   
     case 2:  //  Mouse.move
      x_cor = (par - kmfunct*16777216)/256;
      y_cor = par - x_cor*256 - kmfunct*16777216;
      if (x_cor > 127) x_cor = 127 - x_cor;
      if (y_cor > 127) y_cor = 127 - y_cor;
      Mouse.move(x_cor, y_cor, 0);
      break;
     case 3: //Mouse.press
      Mouse.press(par - kmfunct*16777216);
      break;
     case 4: //Mouse.release
      Mouse.release(par - kmfunct*16777216);
      break;
     case 5:  //Mouse.dblclick
      Mouse.click(par - kmfunct*16777216);
      delay(50);
      Mouse.click(par - kmfunct*16777216);
      break;
     case 6: //wheel.down.up
      mult = par - kmfunct*16777216;
      if (mult > 127) mult = 127 - mult;
      Mouse.move(0, 0, mult);
     case 7: // Keyboard.keydown
      Keyboard.press(par - kmfunct*16777216);
      break;
     case 8: // Keyboard.keyup
      Keyboard.release(par - kmfunct*16777216);
      break;
     case 9: // Keyboard.keypress
      Keyboard.write(par - kmfunct*16777216);
      break;
     }
    }
    par = 0;
 
}


Библиотека с подпрограммами для кликермана тут:
Code: (clickermann) [Select]
$com = 5   //свой порт

//#name "Arduino_mouse&keyboard"
 
////////////////////////////////////////////////
 
// Все процедуры с мышью и клавиатурой через ардуино
 
//micro_move ($x_cor, $y_cor)
//micro_lclick ($x_cor, $y_cor)
//micro_rclick ($x_cor, $y_cor)
//micro_mclick ($x_cor, $y_cor)
//micro_ldown ($x_cor, $y_cor)
//micro_rdown ($x_cor, $y_cor)
//micro_mdown ($x_cor, $y_cor)
//micro_lup ($x_cor, $y_cor)
//micro_rup ($x_cor, $y_cor)
//micro_mup ($x_cor, $y_cor)
//micro_dblclick ($x_cor, $y_cor)
//micro_wheeldown ($mult)
//micro_wheelup ($mult)
 
// вместо $char_ASCII писать не код клавиши, а символ ASCII.
// в ардуино как-то тупо сделали клавиатурные нажатия :/
//micro_keydown ($char_ASCII)
//micro_keyup ($char_ASCII)
//micro_keypress ($char_ASCII)
 
 
 
//move
SUB(micro_move, $x_cor, $y_cor)
 
   WHILE(DIST($x_cor, $y_cor, $_xmouse, $_ymouse) > 3)
 
      $x_temp = $_xmouse
      $y_temp = $_ymouse
 
      $x_dist = $x_cor - $_xmouse
      $y_dist = $y_cor - $_ymouse
 
      IF($x_dist < 0)
         $x_dist = 127 + int(SQRT(abs($x_dist*4)))
      else
         $x_dist =  int(SQRT(abs($x_dist*4)))
      END_IF
      IF($y_dist < 0)
         $y_dist = 127 + int(SQRT(abs($y_dist*4)))
      else
         $y_dist =  int(SQRT(abs($y_dist*4)))
      END_IF
      CALL ("micro_com.dll", $com, 33554432 + $x_dist*256 + $y_dist) 
     
   END_CYC
END_SUB

//lclick
SUB(micro_lclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 16777217)
END_SUB
 
//rclick
SUB(micro_rclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 16777218)
END_SUB
 
//mclick
SUB(micro_mclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 16777219)
END_SUB
 
//ldown
SUB(micro_ldown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 50331649)
END_SUB
 
//rdown
SUB(micro_rdown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 50331650)
END_SUB
 
//mdown
SUB(micro_mdown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 50331651)
END_SUB
 
//lup
SUB(micro_lup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 67108865)
END_SUB
 
//rup
SUB(micro_rup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 67108866)
END_SUB
 
//mup
SUB(micro_mup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 67108867)
END_SUB
 
//dblclick
SUB(micro_dblclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 83886081)
END_SUB
 
//wheeldown
SUB(micro_wheeldown, $mult)
   CALL ("micro_com.dll", $com, 100663423 + $mult)
END_SUB
 
//wheelup
SUB(micro_wheelup, $mult)
   CALL ("micro_com.dll", $com, 100663296 + $mult)
END_SUB
 
//keydown
SUB(micro_keydown, $char_ASCII)
   CALL ("micro_com.dll", $com, 117440512 + code($char_ASCII))
END_SUB
 
//keyup
SUB(micro_keyup, $char_ASCII)
   CALL ("micro_com.dll", $com, 134217728 + code($char_ASCII))
END_SUB
 
//keypress
SUB(micro_keypress, $char_ASCII)
   CALL ("micro_com.dll", $com, 150994944 + code($char_ASCII))
END_SUB

Даже и не уверен, придумают ли защиту от такого аппаратного управления машиной  ;).

Подключайтесь, проверяйте. Я проверил и использовал лишь в одной защищенной древнючей игре MTA_SA. Не смотря на ее древнючесть, они уже давно  впилили защиту от кликеров. Сам контроллер не сильно и дорогой, глянул - от 350р. Я вроде еще за 280 когда-то купил.

Во вложении dll для х32 систем.

Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: dramster on February 18, 2021, 12:36:42 AM
А теперь поподробнее, с чего начинать, что купить, как прошить, как запустить...


 1. Нам нужен сам контроллер ардуино. Подойдут только те, которые определяются на ПК как мышь и клавиатура. Те, о которых я в курсе - Arduino Micro, Arduino Pro Micro, Arduino Leonardo.

 (http://arduino.ru/sites/default/files/resize/u3731/arduinomicrofront-380x171.jpg)

2. Подключаем наш девайс к ПК в любой USB. Смотрим в диспетчер устройств. Должно появиться три новых устройства - клавиатура HID, HID совместимая мышь, устройство с последовательным интерфейсом USB (COM). Номер COM порта запоминаем.

(https://i.imgur.com/gd5z0pa.png)

3. Далее нужно прошить наш контроллер. Для этого нужен софт. Качаем с оффсайта ардуино последнюю версию Arduino IDE https://www.arduino.cc/en/software . Я использую портативную версию для windows - "Windows ZIP file" . Она не требует установки, просто распаковать из архива, и готово, можно пользоваться.

(https://i.imgur.com/hu6uEm8.png)

4. Настраиваем IDE под наш контроллер. Меню - инструменты - плата: - Arduino Micro, либо Leonardo в зависимости от того что там у вас. Меню - инструменты - порт: - выбираем порт к которому подключен контроллер.

(https://i.imgur.com/lVEB3xt.png) (https://i.imgur.com/cFuMNws.png)

5. Все, можно загружать скетч. Берем тот что я написал, либо пишите свой. Мой:
Code: (clickermann) [Select]
#include <Mouse.h>
#include <Keyboard.h>
 
unsigned long par = 0;
String instring = "";
int kmfunct = 0;
int x_cor = 0;
int y_cor = 0;
int mult = 0;
int inchar = 0;
 
void setup() {
  Serial.begin(9600);
  Mouse.begin();
  Keyboard.begin();
 
}
 
void loop() {
 
 
while(Serial.available() > 0){ 
inchar = Serial.read();
if (isDigit(inchar)) {
   instring += (char)inchar;     
    }   
}   
  par = instring.toInt();
  instring = "";
 
 
    if (par > 0) {
 
     kmfunct =  par/16777216 ;
     switch (kmfunct) {
 
     case 1:  //Mouse.click
      Mouse.click(par - kmfunct*16777216);
      break;   
     case 2:  //  Mouse.move
      x_cor = (par - kmfunct*16777216)/256;
      y_cor = par - x_cor*256 - kmfunct*16777216;
      if (x_cor > 127) x_cor = 127 - x_cor;
      if (y_cor > 127) y_cor = 127 - y_cor;
      Mouse.move(x_cor, y_cor, 0);
      break;
     case 3: //Mouse.press
      Mouse.press(par - kmfunct*16777216);
      break;
     case 4: //Mouse.release
      Mouse.release(par - kmfunct*16777216);
      break;
     case 5:  //Mouse.dblclick
      Mouse.click(par - kmfunct*16777216);
      delay(50);
      Mouse.click(par - kmfunct*16777216);
      break;
     case 6: //wheel.down.up
      mult = par - kmfunct*16777216;
      if (mult > 127) mult = 127 - mult;
      Mouse.move(0, 0, mult);
     case 7: // Keyboard.keydown
      Keyboard.press(par - kmfunct*16777216);
      break;
     case 8: // Keyboard.keyup
      Keyboard.release(par - kmfunct*16777216);
      break;
     case 9: // Keyboard.keypress
      Keyboard.write(par - kmfunct*16777216);
      break;
     }
    }
    par = 0;
 
}

Копируете и вставляете в редактор arduino. Жмете кнопку "проверить", пойдет компиляция скетча. После завершения в логе будет что-то типа
Quote
Скетч использует 7426 байт (25%) памяти устройства. Всего доступно 28672 байт.
Глобальные переменные используют 265 байт (10%) динамической памяти, оставляя 2295 байт для локальных переменных. Максимум: 2560 байт.

Значит все отлично, жмем кнопку "загрузка" и ждем пока скетч загрузится в контроллер. Если все в норме, то по итогу в логе будет: загрузка завершена, и тоже самое что и после проверки.

(https://i.imgur.com/UduTXYU.png)



 6. Контроллер готов и ждет команды из COM порта. Для отправки сообщения в наш порт я написал DLL библиотеку  "micro_com.dll". Берем во вложении первого поста, либо вот с ядиска https://disk.yandex.ru/d/YuMXDEFLhWiD6A . Качаем (либо копируем) библиотеку с процедурами мыши и клавиатуры для Clickermann "Arduino_mouse_keyboard.cms" , во вложении, либо код из поста выше, либо с ядиска https://disk.yandex.ru/d/kmqlsabjb4RJvg . Кидаем эти два файла в одну папку. Открываем "Arduino_mouse_keyboard.cms" и прописываем в переменную $com номер порта, к которому подключена ардуина.


 7. Создаем наш основной скрипт, либо редактируем уже существующий. Подключаем в него "Arduino_mouse_keyboard.cms".
Code: (clickermann) [Select]
#include "Arduino_mouse_keyboard.cms"
Все процедуры, которые я пока написал:
Клавиатурные действия пока будут работать только на бета версии v4.14.003 beta x32 http://crapware.aidf.org/forum/index.php?topic=356.0 . В будущем напишу чтоб работали на старших версиях.

Будущее:
Обновленная библиотека для всех версий (кроме х64) в этом посте http://crapware.aidf.org/forum/index.php?topic=5529.msg36250#msg36250 , берем оттуда и пользуемся клавиатурой полноценно!!!

Code: (текст) [Select]
//micro_move ($x_cor, $y_cor)
//micro_lclick ($x_cor, $y_cor)
//micro_rclick ($x_cor, $y_cor)
//micro_mclick ($x_cor, $y_cor)
//micro_ldown ($x_cor, $y_cor)
//micro_rdown ($x_cor, $y_cor)
//micro_mdown ($x_cor, $y_cor)
//micro_lup ($x_cor, $y_cor)
//micro_rup ($x_cor, $y_cor)
//micro_mup ($x_cor, $y_cor)
//micro_dblclick ($x_cor, $y_cor)
//micro_wheeldown ($mult)
//micro_wheelup ($mult)
 
// вместо $char_ASCII писать не код клавиши, а символ ASCII.
// в ардуино как-то тупо сделали клавиатурные нажатия :/
// пока поддерживают только печатные символы, в будущем добавлю подпрограмму для клавиш-модификаторов.
//micro_keydown ($char_ASCII)
//micro_keyup ($char_ASCII)
//micro_keypress ($char_ASCII)

Ну и для проверки можно подергать курсором. Пишем к примеру такой код:
Code: (clickermann) [Select]
#include "Arduino_mouse_keyboard.cms"

wait(2)
micro_move (100, 100)
wait(2)
micro_move (500, 500)
wait(2)
micro_move (500, 100)
wait(2)
micro_move (100, 100)
halt
Жмем "применить" и сохраняем скрипт в папку с "micro_com.dll" и "Arduino_mouse_keyboard.cms". Запускаем и смотрим как курсор двигается по прописанным координатам.


 8. Радуемся.




Если курсор не двигается, то ищем где мы накосячили. DLL может помочь в этом. Функция из библиотеки возвращает код, сообщая, на каком моменте остановилась работа по общению с COM портом. Если все в норме, функция должна возвратить "5"
Code: (clickermann) [Select]
#include "Arduino_mouse_keyboard.cms"

wait(2)
micro_move (100, 100)
print($_return1)  //должно быть "5", иначе - пишите в этой теме, и подумаем в чем ошибка.
halt




Подробно о библиотеках Mouse и Keyboard для ардуино тут - https://doc.arduino.ua/ru/prog/MouseKeyboard либо на оффсайте на английском.
Коды клавиш-модификаторов тут - https://doc.arduino.ua/ru/prog/KeyboardModifiers .  Для них нужно будет писать отдельную подпрограмму, либо вызывать индивидуально.

DLL написана для х32 систем, соответственно версия кликермана должна быть х32!!!



Если у вас есть деньги на контроллер, то и пару копеек на развитие проекта не пожалейте. Вон, смотрю место на хостинге походу закончилось  :(, вложения не работают. Реквизиты тут http://crapware.aidf.org/page/clickermann .
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: JacsoN on February 18, 2021, 08:39:39 AM
так   пробывал  версию кликера  последнюю и  к томуже  она  х64...то уввы не  работает  потом  уже  дочитал  что только  х32.........  дополните ваш гайд  какой именно  версии у вас  кликер   чтобы  вопросов было меньше  чтобы  можно  было  повторить

скачал х32 тото я по вашим примерам не то делаю или вы чтото не договорили
 возможно система х64 не пускает  win10x64
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: JacsoN on February 18, 2021, 03:48:42 PM
Так   Давайте чтото  делать ....... я незнаю с чего начать в моем случает  цель научится  дружить  кликер и  ардуино  игра   пох  любая
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: dramster on February 18, 2021, 10:30:31 PM
По идее должно работать во всех версиях начиная с v4.0.002, там появился CALL, кроме v4.13 x64 .
Насчет клавиатурных действий я немного не уточнил, да и призабыл, что функция CODE() появилась только в версии v4.14.ххх  ::). Так-что для клавиатуры пока можно скачать бету отсюда http://crapware.aidf.org/forum/index.php?topic=356.msg2896#msg2896 . Но мышка должна работать на всех остальных версиях.
 Я даже видео записал https://www.youtube.com/watch?v=0n83fGce7nU :
1. качаю кликерман последнюю х32 версию с оффсайта
2. качаю свою длл и библиотеку с подпрограммами в одну папку
3. втыкаю прошитый контроллер и смотрю какой ком порт он использует
4. вписываю в "Arduino_mouse_keyboard.cms" номер порта и сохраняю
5. создаю и сохраняю тестовый скрипт, дописываю проверку ответа функции из длл print($_return1)
6. смотрю как двигается курсор, смотрю в логе ответ функции, он равен пяти, значит запись в ком прошла успешно

Насчет клавы конечно это я лохонулся, не подумал, что мало кто бету использует. Это поправимо, сейчас обдумаю как лучше это сделать (чтоб клава работала на старых версиях).






Готово http://crapware.aidf.org/forum/index.php?topic=5529.msg36250#msg36250 .
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: JacsoN on February 18, 2021, 11:25:28 PM
я  так   предпологаю    максимально все   кто хоть  чтото  сам  может  все  на   бете и  сидят  )  забыл  в видео  запрограмировать  ардуинку ++

Так  у  меня  все  получилось  как  и у  тебя   тоесть я  пологаю  теперь  можно  пробівать делать   какогото бота....для тестов   
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: dramster on February 18, 2021, 11:42:27 PM
    Вот библиотека для всех версий (кроме х64), включая 4.13 и старше. Написал основные клавиши и клавиши модификаторы. Не достающие клавиши можете дописать сами.

Code: (clickermann) [Select]
$com = 5  //свой порт
 
//"Arduino_mouse&keyboard"  для версии 4.13 и старше.
 
////////////////////////////////////////////////
 
// Все процедуры с мышью и клавиатурой через ардуино
 
//micro_move ($x_cor, $y_cor)
//micro_lclick ($x_cor, $y_cor)
//micro_rclick ($x_cor, $y_cor)
//micro_mclick ($x_cor, $y_cor)
//micro_ldown ($x_cor, $y_cor)
//micro_rdown ($x_cor, $y_cor)
//micro_mdown ($x_cor, $y_cor)
//micro_lup ($x_cor, $y_cor)
//micro_rup ($x_cor, $y_cor)
//micro_mup ($x_cor, $y_cor)
//micro_dblclick ($x_cor, $y_cor)
//micro_wheeldown ($mult)
//micro_wheelup ($mult)
 

//micro_keydown (key_)
//micro_keyup (key_)
//micro_keypress (key_)

//коды клавиш, если чегото не хватает, дописывайте сами.
#define key_0:48
#define key_1:49
#define key_2:50
#define key_3:51
#define key_4:52
#define key_5:53
#define key_6:54
#define key_7:55
#define key_8:56
#define key_9:57
#define key_a:97
#define key_b:98
#define key_c:99
#define key_d:100
#define key_e:101
#define key_f:102
#define key_g:103
#define key_h:104
#define key_i:105
#define key_j:106
#define key_k:107
#define key_l:108
#define key_m:109
#define key_n:110
#define key_o:111
#define key_p:112
#define key_q:113
#define key_r:114
#define key_s:115
#define key_t:116
#define key_u:117
#define key_v:118
#define key_w:119
#define key_x:120
#define key_y:121
#define key_z:122
#define KEY_LEFT_CTRL:128
#define KEY_LEFT_SHIFT:129
#define KEY_LEFT_ALT:130
#define KEY_LEFT_GUI:131
#define KEY_RIGHT_CTRL:132
#define KEY_RIGHT_SHIFT:133
#define KEY_RIGHT_ALT:134
#define KEY_RIGHT_GUI:135
#define KEY_UP_ARROW:218
#define KEY_DOWN_ARROW:217
#define KEY_LEFT_ARROW:216
#define KEY_RIGHT_ARROW:215
#define KEY_BACKSPACE:178
#define KEY_TAB:179
#define KEY_RETURN:176
#define KEY_ESC:177
#define KEY_INSERT:209
#define KEY_DELETE:212
#define KEY_PAGE_UP:211
#define KEY_PAGE_DOWN:214
#define KEY_HOME:210
#define KEY_END:213
#define KEY_CAPS_LOCK:193
#define KEY_F1:194
#define KEY_F2:195
#define KEY_F3:196
#define KEY_F4:197
#define KEY_F5:198
#define KEY_F6:199
#define KEY_F7:200
#define KEY_F8:201
#define KEY_F9:202
#define KEY_F10:203
#define KEY_F11:204
#define KEY_F12:205
 
 
//move
SUB(micro_move, $x_cor, $y_cor)
 
   WHILE(DIST($x_cor, $y_cor, $_xmouse, $_ymouse) > 3)
 
      $x_temp = $_xmouse
      $y_temp = $_ymouse
 
      $x_dist = $x_cor - $_xmouse
      $y_dist = $y_cor - $_ymouse
 
      IF($x_dist < 0)
         $x_dist = 127 + int(SQRT(abs($x_dist*4)))
      else
         $x_dist =  int(SQRT(abs($x_dist*4)))
      END_IF
      IF($y_dist < 0)
         $y_dist = 127 + int(SQRT(abs($y_dist*4)))
      else
         $y_dist =  int(SQRT(abs($y_dist*4)))
      END_IF
      CALL ("micro_com.dll", $com, 33554432 + $x_dist*256 + $y_dist) 
 
   END_CYC
END_SUB
 
//lclick
SUB(micro_lclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 16777217)
END_SUB
 
//rclick
SUB(micro_rclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 16777218)
END_SUB
 
//mclick
SUB(micro_mclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 16777219)
END_SUB
 
//ldown
SUB(micro_ldown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 50331649)
END_SUB
 
//rdown
SUB(micro_rdown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 50331650)
END_SUB
 
//mdown
SUB(micro_mdown, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 50331651)
END_SUB
 
//lup
SUB(micro_lup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 67108865)
END_SUB
 
//rup
SUB(micro_rup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 67108866)
END_SUB
 
//mup
SUB(micro_mup, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 67108867)
END_SUB
 
//dblclick
SUB(micro_dblclick, $x_cor, $y_cor)
   micro_move($x_cor, $y_cor)
   CALL ("micro_com.dll", $com, 83886081)
END_SUB
 
//wheeldown
SUB(micro_wheeldown, $mult)
   CALL ("micro_com.dll", $com, 100663423 + $mult)
END_SUB
 
//wheelup
SUB(micro_wheelup, $mult)
   CALL ("micro_com.dll", $com, 100663296 + $mult)
END_SUB
 
//keydown
SUB(micro_keydown, $key_)
   CALL ("micro_com.dll", $com, 117440512 + int($key_))
END_SUB
 
//keyup
SUB(micro_keyup, $key_)
   CALL ("micro_com.dll", $com, 134217728 + int($key_))
END_SUB
 
//keypress
SUB(micro_keypress, $key_)
   CALL ("micro_com.dll", $com, 150994944 + int($key_))
END_SUB

Пример по использованию:
Code: (clickermann) [Select]
#include "Arduino_mouse_keyboard.cms"

//контроллер выделяет текст активного окна и удаляет его
wait(1)
micro_keydown (KEY_RIGHT_CTRL) //зажимает левый контрал
micro_keydown (key_a)     //зажимает клавишу "A"
waitms(100)
micro_keyup (key_a)     //отпускает клавишу "A"
micro_keyup (KEY_RIGHT_CTRL)  //отпускает левый контрал
waitms(100)
micro_keypress (KEY_BACKSPACE) //нажимает и отпускает клавишу BACKSPACE
halt

Добавленные клавиши:
Code: (текст) [Select]
key_0
key_1
key_2
key_3
key_4
key_5
key_6
key_7
key_8
key_9
key_a
key_b
key_c
key_d
key_e
key_f
key_g
key_h
key_i
key_j
key_k
key_l
key_m
key_n
key_o
key_p
key_q
key_r
key_s
key_t
key_u
key_v
key_w
key_x
key_y
key_z
KEY_LEFT_CTRL
KEY_LEFT_SHIFT
KEY_LEFT_ALT
KEY_LEFT_GUI
KEY_RIGHT_CTRL
KEY_RIGHT_SHIFT
KEY_RIGHT_ALT
KEY_RIGHT_GUI
KEY_UP_ARROW
KEY_DOWN_ARROW
KEY_LEFT_ARROW
KEY_RIGHT_ARROW
KEY_BACKSPACE
KEY_TAB
KEY_RETURN
KEY_ESC
KEY_INSERT
KEY_DELETE
KEY_PAGE_UP
KEY_PAGE_DOWN
KEY_HOME
KEY_END
KEY_CAPS_LOCK
KEY_F1
KEY_F2
KEY_F3
KEY_F4
KEY_F5
KEY_F6
KEY_F7
KEY_F8
KEY_F9
KEY_F10
KEY_F11
KEY_F12

Места для вложений не хватает, так-что можете качать "Arduino_mouse_keyboard.cms" на ядиске https://disk.yandex.ru/d/rSA4Qcpjy3ziEg
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: dramster on February 18, 2021, 11:45:17 PM
забыл  в видео  запрограмировать  ардуинку ++++

Как прошить ардуину я вроде как подробно описал выше, если у кого-то будут вопросы, тогда и будем разбираться  ;).
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: JacsoN on February 18, 2021, 11:56:57 PM
так  прошу  сделай    дополнения  в  первом  посту  что  нужно качать !?!?  чтобы вся   основная инфа   была там  типо  Шапка  темы!!!   
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: Vint on February 20, 2021, 03:12:09 PM
Всё работает, респект. Проверял просто в обычных приложениях без защит.

Code: (clickermann) [Select]
#define key_0:49
#define key_1:50
#define key_2:51
#define key_3:52
#define key_4:53
#define key_5:54
#define key_6:55
#define key_7:56
#define key_8:57
#define key_9:58
У тебя здесь съехали коды цифр на 1. Должно быть от 48 до 57
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: dramster on February 21, 2021, 08:31:32 PM

У тебя здесь съехали коды цифр на 1. Должно быть от 48 до 57

Поправил. Вообще было бы не плохо добавить все клавиши. Но, пока это никому не надо, то и мотивации нет чего-то допиливать, для себя функционала вполне хватает.
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: Vint on February 21, 2021, 10:10:25 PM
Пусть код передают, нефиг баловать.
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: kiril on February 22, 2021, 10:27:54 AM
Пусть код передают, нефиг баловать.
Какое-ж это баловство? Чистейший Разврат, неокрепших умов.
 Специалист, огромную работу проделал и вместо того, чтоб монетизировать результат и широко предложить в группах популярных игр с защитами, гарантированное аппаратное решение, он тут мечет  интелектуальный бисер.
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: inilim on October 07, 2021, 07:05:49 PM
Arduino Leonardo примерно 600р
Arduino Pro Micro примерно 700р
Arduino Micro около 3000р

Почему такой разброс?

Что лучше купить под вашу библиотеку?
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: Vint on October 07, 2021, 09:21:20 PM
Аналог Micro с али стоит 340 р.
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: inilim on October 10, 2021, 07:56:47 PM
Аналог Micro с али стоит 340 р.
Буду рад ссылке)
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: Vint on October 11, 2021, 05:10:57 PM
Вот
https://aliexpress.ru/item/32836616428.html?_ga=2.49378543.877831236.1633931742-754631008.1628835162&sku_id=65077718692&spm=a2g39.orderlist.0.0.202c4aa64oUzxG

Я заказывал не только этот. И с впаянными ногами и чуть другой по виду.
Этот стоил 182, второй 422. Сейчас они 361 и 700
https://aliexpress.ru/item/32676998690.html?_ga=2.49845359.877831236.1633931742-754631008.1628835162&item_id=32676998690&sku_id=10000001285896058&spm=a2g39.orderlist.0.0.202c4aa64oUzxG

Если б я ещё помнил на какой пробовал, цены бы не было  :D


Думаю там много вариантов
https://aliexpress.ru/item/32849563958.html?_evo_buckets=165608%2C165598%2C188872%2C176818%2C194277&_t=gps-id%3AaerPdpSubstituteRcmd%2Cscm-url%3A1007.33958.210224.0%2Cpvid%3A7f3b52a9-a060-4697-9ed6-dd0de4784eea%2Ctpp_buckets%3A21387%230%23233228%234&gps-id=aerPdpSubstituteRcmd&item_id=32849563958&pvid=7f3b52a9-a060-4697-9ed6-dd0de4784eea&scm=1007.33958.210224.0&scm-url=1007.33958.210224.0&scm_id=1007.33958.210224.0&sku_id=10000000445779851&spm=a2g2w.detail.1000060.1.54a43cd1ROvmyM

https://aliexpress.ru/item/32768308647.html?_ga=2.83865695.877831236.1633931742-754631008.1628835162&_t=gps-id%3ApcOrderList%2Cscm-url%3A1007.30114.213637.0%2Cpvid%3A0b629c0d-3505-4357-ae35-e58b8cafe8b2%2Ctpp_buckets%3A668%232846%238113%231998&gps-id=pcOrderList&item_id=32768308647&pdp_ext_f=%7B%22sceneId%22%3A%2220114%22%2C%22sku_id%22%3A%2212000024349272661%22%7D&pvid=0b629c0d-3505-4357-ae35-e58b8cafe8b2&scm=1007.30114.213637.0&scm-url=1007.30114.213637.0&scm_id=1007.30114.213637.0&sku_id=12000024349272661&spm=a2g39.orderlist.rcmd.1.202c4aa6JuMzxa
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: inilim on October 11, 2021, 11:01:36 PM
Благодарю, закажу оба варианта, кстати программировать аналогично как и arduino?
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: Bereza on January 25, 2023, 06:25:32 PM
Ездил на радиорынок за ардуинкой. Из выбора были Микро и Нано. Микра 500 р. Нана - 400.  Микро, вся, с обеих сторон - колючая каракатица. Нано чистая, тонкая,  без лишнх напаек, они  в пакетике россыпью, как раз бы удобно в корпус от флешки но как написано тут - бесполезна. Спросил на всякий случай, какие, новые без скетчей, в диспетчере устройств видятся как клавиатура с мышью, и по глазам понял что лучше бы не спрашивал))) Поборовшись с жабой, решил взять обе, вдруг  и вторая куда нибудь сгодится.
Дома оказалось, что под Микру, древнего кабеля с мини ЮСБи нет. У Наны разьем более свежий - Микро-ЮСБ, шнур нашелся и фигась себе - Нана оказалась Леонардой, подвезло)))

Вопрос такой  -  Arduino_mouse_keyboard.cms неплохо работает, хоть и тормозит немного, но почему при вытащенной ардуинке ничего обратно в скрипт не возвращает а висит и ждет когда рак свистнет? Очень не удобно.
Хотелось сделать чтобы при вытаскивании шнура, скрипт не прерывался а переходил на обычную работу и благополучно завершался.
Code: (clickermann) [Select]
#include "Arduino_mouse_keyboard.cms"

// подпрограмма обязательно выше вызова
 
SUB(mouse, $IN_X, $IN_Y, $mouse, $Razb_X, $Razb_Y)
 
IF(($mouse = 11) or ($mouse = 12))
   $MOVE_END_X=$IN_X + rnd(rnd(-1*$Razb_Y, 0),rnd(0, $Razb_Y))
   $MOVE_END_Y=$IN_Y + rnd(rnd(-1*$Razb_Y, 0),rnd(0, $Razb_Y))
ELSE
   $MOVE_END_X=$IN_X + rnd(rnd(-1*$Razb_X, 0),rnd(0, $Razb_X))
   $MOVE_END_Y=$IN_Y + rnd(rnd(-1*$Razb_Y, 0),rnd(0, $Razb_Y)) 
END_IF
 
//-------------------------------------------------------
   $MOVE_SPEED = 1  // множитель скорости
   $MOVE_Start_X = $_xmouse  // Считать текущую  X
   $MOVE_Start_Y = $_ymouse  // Считать текущую  Y
   $MOVE_X = $MOVE_Start_X
   $MOVE_Y = $MOVE_Start_Y
 
   // Расстояние между начальной и конечной точками:
   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
 
   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
 
   IF($MOVE_SPEEDVAR < 1)
      $MOVE_SPEEDVAR = 1
   END_IF
 
   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
 
   FOR($MOVE_i=0, $MOVE_i<INT($MOVE_step))
      $MOVE_X = $MOVE_X + $MOVE_X_step
      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
     
      // Промежуточная точка с рандомом:
     
      $MOVE_X_ = ROUND($MOVE_X,0)+RND(-5,5)
      $MOVE_Y_ = ROUND($MOVE_Y,0)+RND(-5,5)

      micro_move($MOVE_X_, $MOVE_Y_)
     
      IF($_return1 != 5)  // Если Ардуино выключено то:   
         MOVE($MOVE_X_, $MOVE_Y_)
      END_IF

      WAITMS(1)
     
   END_CYC
   
      // Конечная точка:

      micro_move($MOVE_END_X, $MOVE_END_Y)
     
IF($_return1 != 5)  // Если Ардуино выключено то:
         move($MOVE_END_X, $MOVE_END_Y)
      END_IF
         
//-------------------------------------------------------
 
SWITCH($mouse)
CASE(0)
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(1)
micro_lclick($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
print("- Без Ардуино -")
LCLICK($MOVE_END_X, $MOVE_END_Y)   // Левый клик
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))


CASE(2)
micro_rclick($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
RCLICK($MOVE_END_X, $MOVE_END_Y)   // Правый клик
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(3)
micro_mclick($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
MCLICK($MOVE_END_X, $MOVE_END_Y)   //  Средний клик
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(4)
micro_dblclick($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
DBLCLICK($MOVE_END_X, $MOVE_END_Y) // Двойной левый
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(5)
micro_ldown($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
LDOWN($MOVE_END_X, $MOVE_END_Y)    // Зажать левую
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(6)
micro_lup($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
LUP($MOVE_END_X, $MOVE_END_Y)      // Отпустить левую
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(7)
micro_rdown($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
RDOWN($MOVE_END_X, $MOVE_END_Y)    // Зажать правую
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(8)
micro_rup($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
RUP($MOVE_END_X, $MOVE_END_Y)      //  Отпустить правую
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(9)
micro_mdown($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
MDOWN($MOVE_END_X, $MOVE_END_Y)    // Зажать среднюю
END_IF
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(10)
micro_mup($MOVE_END_X, $MOVE_END_Y)
IF($_return1 != 5)
END_IF
MUP($MOVE_END_X, $MOVE_END_Y)     // Отпустить среднюю
WAITMS(50+rnd(rnd(-9,0),rnd(0,23)))

CASE(11)
micro_wheeldown($Razb_X)
WAITMS(200+rnd(rnd(-47,0),rnd(0,37)))
IF($_return1 != 5)
FOR($i=0, $i < $Razb_X)
WHEELDOWN                              // Колесико вниз
WAITMS(200+rnd(rnd(-47,0),rnd(0,37)))
END_CYC
END_IF


CASE(12)
micro_wheelup($Razb_X)
WAITMS(200+rnd(rnd(-47,0),rnd(0,37)))
IF($_return1 != 5)
FOR($i=0, $i < $Razb_X)
WHEELUP                               // Колесико вверх
WAITMS(200+rnd(rnd(-47,0),rnd(0,37)))
END_CYC
END_IF

END_SWITCH
 
$mouse=0
$Razb_X=0
$Razb_Y=0
 
END_SUB
 
//-------------------------------------------------------
 
//  SUB(mouse, $IN_X, $IN_Y, $mouse, $Razb_X, $Razb_Y)
 
// 1: $IN_X - координата х
// 2: $IN_Y - координата Y
// 3: $mouse -  действия мыши в конечной точке
 
// $mouse = 0     нет действия
// $mouse = 1  LCLICK      (Левый клик)
// $mouse = 2  RCLICK      (Правый клик)
// $mouse = 3  MCLICK      (Средний клик)
// $mouse = 4  DBLCLICK    (Двойной левый клик)
// $mouse = 5  LDOWN       (Зажать левую)
// $mouse = 6  LUP         (Отпустить левую)
// $mouse = 7  RDOWN       (Зажать правую)
// $mouse = 8  RUP         (Отпустить правую)
// $mouse = 9  MDOWN       (Зажать среднюю)
// $mouse = 10 MUP         (Отпустить среднюю)
// $mouse = 11 WHEELDOWN   (Колесико вниз)
// $mouse = 12 WHEELUP     (Колесико вверх)
 
//  Функции при  $mouse от 1 до 10
// 4: $Razb_X - разброс х
// 5: $Razb_Y - разброс Y
 
//  Функции при $mouse = 11 или 12
// 4: $Razb_X - число строк колесиком
// 5: $Razb_Y - разброс х  и  разброс Y
 
//------------------    ТЭСТ    --------------------
//                Рисуем в Паинте
 
//GOTO(mous) // Пропускаем зачистку холста
 
// Очищаем холст
 
mouse(140,110,1,8,8) // кликаем на выделение
mouse(10,200,5,0,0) // Верхний угол рамки выделения
mouse(1000,970,6,0,0) // Нижний угол рамки выделения
mouse(500,250,2,0,0)  // Открываем меню
WAITMS(100)
mouse(560,267,1,0,0) // стираем  старое
WAITMS(100)
 
mous:
mouse(290,96,1,5,5)   // включаем карандаш

FOR($i=0, $i < 5)     // Рисуем 5 раз
 
// рисуем треугольник
 
mouse(100,300,5,5,8)   // точка 1 c зажимом
mouse(920,300,0,5,8)   // точка 2 
mouse(510,900,0,100,5) // точка 3
WAITMS(100)
mouse(100,300,6,5,8)   // точка 1 c отпуском
 
// рисуем прямоугольник
 
mouse(300,350,5,5,8)  // точка 4 c зажимом
mouse(720,350,0,5,8)  // точка 5 
mouse(720,530,0,5,8)  // точка 6
mouse(300,530,0,5,8)  // точка 7
mouse(300,350,6,5,8)  // точка 4 c отпуском
WAIT(1)
END_CYC
 
HALT
 
Title: Re: Arduino Micro + clickermann. Обход любых защит. DLL для общения с контроллером!!
Post by: Mangobei on July 25, 2023, 10:30:21 PM
Это потрясающе. Никогда не думал, что с помощью кликера возможно взаимодействовать с микроконтроллером.
Спасибо!