Author Topic: Обход любой (даже еще не придуманной) защиты в играх. Незавершенный проект.  (Read 12101 times)

0 Members and 3 Guests are viewing this topic.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Внимание, требуется доп. оборудование!!!

 До недавнего времени ни разу не сталкивался с защитами от кликеров. И вот этот день наступил. Мне даже интересно стало - как вся эта защита выглядит, и неужели ее никак не обойти. Первое что испробовал, это режим пс2, благо на пк такой порт еще есть, хоть и комбинированный. Мышки на пс2 не нашел, а клавиатура как раз туда и втыкнута. Клавиатурные нажатия + #ps2_keyboard работают отлично. Даже и не подозревал какая это полезная штука оказывается "режим PS/2"  .

 Но идем дальше. На ноуте, которым пользуюсь чаще, пс2 уже нет  >:( . И как тут быть? И пришла мне тут идея, а неужели нельзя аппаратно жать на нужные кнопки? К счастью для экспериментов под рукой завалялась плата "ардуино". Описание девайса тут.

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

 Для начала нашел ненужную усб мышку. Как мне кажется с мышкой соединить ардуино куда проще чем с клавиатурой. С клавитурой пока не пробовал, нет у меня лишней усб клавы, да и еще не уверен что чтото с ней получится. Немного почитал, вспомнил как там программируется ардуино, этот закрученный язык си  >:( . Сразу понял, что на две кнопки мышки он нажмет. Благо там контак просто на массу замыкает, а digitalWrite какраз так и делает - либо 5в, либо "масса".

 Идем дальше, нужно как то сообщить контроллеру что я хочу нажать, и в кокой момент. Ардуина подключена к пк через усб к виртуальному ком порту, и без проблем передает сообщени и принимает их. Тут пришлось немного поламать голову. Ни как не мог разобраться как послать ту инфу, что я хочу. Идея была посылать байт информации, 256 значений хватило бы для любых прихотей. Принцип передачи так и работает, но передача идет символов ASCI. И получается, что я могу отправить только те символы, которые могу напечатать, а всякие там шифты, контралы, управляющий символ и прочее отправить уже не получится. Речь идет о передаче через командную строку, мы же не привыкли носить кучу доп. утилит и приложений (кстати они вроде как могут передавать все что захочешь). Ну да ладно, немного усложним работу, и будем отправлять число строкой, тем более что полюбому консоль в добавок после символа отправляет "переход на след. строку" и "возврат коретки" 13 и 10 если не ошибаюсь, которые в любом случае придется отсортировывать.
 
 Ну чтож, с передачей информации разобрался. Переходим к нашему любимому "кликерману". Жаль что он не может послать в ком на прямую  :( . требуется создание батника каждый раз  :( . Создаю строку - десятичный код клавиши + символ обозначающий зажатие и отпускание кнопки (U или D). Вышло как то так:
Code: (clickermann) [Select]
SUB(key, $char)
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 1)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$char,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB

key(STRCONCAT($key,"D"))  // $key - десятичный код клавиши
waitms(100)
key(STRCONCAT($key,"U"))
Ардуино в свою очередь мониторит нужный порт на наличие сообщения. Как только появляются байты для считывания Serial.available(), пишет цифры в массив, а мой управляющий символ в переменную.
Code: (javascript) [Select]
  while (Serial.available() > 0) {

    int inchar = Serial.read();
    if (inchar == 'U') {
      presskey = false;
    }
    if (inchar == 'D') {
      presskey = true;
    }
    if (isDigit(inchar)) {
      instring += (char)inchar;
    }
    if (inchar == '\n') {
      val = instring.toInt();
      instring = "";
    }
  }

 А потом, имея код кнопки, выбираем на какой контакт подать "минус" digitalWrite(pin, LOW). К этому контакту заранее был подведен и припаян провод от нужной кнопки мышки.

 Для отладки и настройки использовал LCD дисплей, хотя можно было обойтись и без него.

 В этоге - код для "ардуино" для левой и правой кнопки мыши:
Code: (javascript) [Select]
String instring = "";
int val = 0;
boolean presskey = false;
int lmouse = 52;
int rmouse = 53;

int getPress(int key) {
  if (presskey == true) {
    digitalWrite(key, LOW);
  }
  else {
    digitalWrite(key, HIGH );
  }
}

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);

  pinMode(lmouse, OUTPUT);
  digitalWrite(lmouse, HIGH);
  pinMode(rmouse, OUTPUT);
  digitalWrite(rmouse, HIGH);
}

void loop() {
  while (Serial.available() > 0) {

    lcd.clear();
    int inchar = Serial.read();
    if (inchar == 'U') {
      presskey = false;
    }
    if (inchar == 'D') {
      presskey = true;
    }
    if (isDigit(inchar)) {
      instring += (char)inchar;
    }
    if (inchar == '\n') {
      val = instring.toInt();
      lcd.print("key: ");
      lcd.print(val);
      lcd.setCursor(0, 1);
      lcd.print("press: ");
      lcd.print(presskey);
      instring = "";


      switch (val) {
        case 1:
          getPress(lmouse);
          break;
        case 2:
          getPress(rmouse);
          break;
      }
    }
  }
}

Код для "кликермана" - press, dbpress, down и up :
Code: (clickermann) [Select]
#name "arduino mouse"

$comport = 6

SUB(key, $char)
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 1)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$char,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB

SUB(press, $keypress)
   key(STRCONCAT($keypress,"D"))
   waitms(100)
   key(STRCONCAT($keypress,"U"))
END_SUB

SUB(dbpress, $dbpresskey)
   press($dbpresskey)
   waitms(100)
   press($dbpresskey)
END_SUB

SUB(down, $keydown)
   key(STRCONCAT($keydown,"D"))
END_SUB

SUB(up, $keyup)
   key(STRCONCAT($keyup,"U"))
END_SUB
///////////////////////////////////////////////////////////////////////////////

wait(1)
move(2040,940)
waitms(100)
dbpress(1)

wait(1)
press(2)

wait(1)
move(2010,930)
waitms(100)
down(1)
waitms(500)
move(2010,880)

wait(1)
up(1)

halt

И небольшое видео демонстрирующее работу: https://www.youtube.com/watch?v=NO2GOfSAqJE



 Идея , я думаю, очень даже интересная. Если у кого то есть мысли по поводу работы с клавиатурой, прошу в тему. Если есть какието замечания в проделанной мной работе, не стесняйтесь, комментируйте  :D.






« Last Edit: May 26, 2017, 01:39:36 AM by dramster »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Жаль что он не может послать в ком на прямую  :( . требуется создание батника каждый раз  :( .
Code: (clickermann) [Select]
SUB(key, $char)
   STRWRITELN ("file.bat", STRCONCAT("Mode com",$comport," baud=9600 parity=n data=8 stop=1"), 1)
   STRWRITELN ("file.bat", STRCONCAT("echo ",$char,"> com",$comport), 0)
   EXECUTE("file.bat")
END_SUB

Не нужен батник, можно напрямую вызывать cmd
Code: (clickermann) [Select]
EXECUTE("cmd.exe", STRCONCAT(" /C Mode com",$comport," baud=9600 parity=n data=8 stop=1 && echo ", $char, "> com", $comport"))


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile

Не нужен батник, можно напрямую вызывать cmd
Code: (clickermann) [Select]
EXECUTE("cmd.exe", STRCONCAT(" /C Mode com",$comport," baud=9600 parity=n data=8 stop=1 && echo ", $char, "> com", $comport"))

да, было бы здорово если бы вообще не вылазило окно командной строки.

[spoiler]испытал твой вариант, вылазит ошибка


и при этом остается открытым окно cmd. может есть еще варианты?


к стати чтото похожее (ошибка) вылазила пару раз и у меня. при повторном запуске норм работало  :-\.


както только после написания ответа заметил что ошибка именно в STRCONCAT, проверил в версии 4.12 (так как в автозапуске стоит уже 4.13, иногда забываю про некоторые баги), также ошибка
[/spoiler]

вот слепые мои глаза  ;D, 15 минут ушло на то, чтобы найти описку. лишняя ковычка в конце
Code: (clickermann) [Select]
EXECUTE("cmd.exe", STRCONCAT(" /C Mode com",$comport," baud=9600 parity=n data=8 stop=1 && echo ", $char, "> com", $comport)) а так действительно работает, спасибо. но вот вопрос по
Quote
да, было бы здорово если бы вообще не вылазило окно командной строки.
остается открытым.




« Last Edit: May 26, 2017, 11:52:07 AM by dramster »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
На ноутбуках есть тачпад -это PS/2 устройство и к нему стоят нужные драйвера  и  сами по себе ноутбуки довольно древней архитектуры. так что режимы PS/2 на них обычно всегда работают.

а вот и мой ноут



и я понятия не имею, почему у меня по 2 экземпляра устройств. но все они, как видите, подключены к юсб.
« Last Edit: May 26, 2017, 11:34:11 AM by dramster »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
неожиданно, и почему показывает две клавиатуры? может драйвера не  установлены?
обычно в ноутах:
Стандартная клавиатура PS/2
HID-совместимая мышь
PS/2-совместимая мышь  (он же тачпад)
насчет двух мышек, мой косяк, как раз перед скрином всунул юсб мышку. вторая юсб мышка - это тачпад. а вот насчет двух юсб клавиатур - это я хз.
насчет драйверов. заводские и винда и драйвера, ничего не менял, ничего не трогал. пока работает - нет смысла кудато лезть и что переустанавливать.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Quote
да, было бы здорово если бы вообще не вылазило окно командной строки.
остается открытым.

Предлагаю сделать жёсткий bat и передавать ему параметры %1  %2
Code: (javascript) [Select]
@color 71
@echo off
Mode com%1 baud=9600 parity=n data=8 stop=1
echo %2 > com%1

На бат тут же сделать ярлык, только убрать расширение. В свойствах ярлыка параметры запуска окна "свернуто в значёк"

А из кликера вызывать этот ярлык
Code: (clickermann) [Select]
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", $char))
Если с номером порта не получится заменить переменной,  то номер можно в bat жёстко прописать, а $char передавать.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Предлагаю сделать жёсткий bat и передавать ему параметры %1  %2
Code: (javascript) [Select]
@color 71
@echo off
Mode com%1 baud=9600 parity=n data=8 stop=1
echo %2 > com%1

На бат тут же сделать ярлык, только убрать расширение. В свойствах ярлыка параметры запуска окна "свернуто в значёк"

А из кликера вызывать этот ярлык
Code: (clickermann) [Select]
EXECUTE("shfile", STRCONCAT(" ", $comport, " ", $char))
Если с номером порта не получится заменить переменной,  то номер можно в bat жёстко прописать, а $char передавать.

да, так действительно работает, и никаких окон не выскакивает, и 2 параметра передаются .


хоть данный вопрос и решен, не могу выкинуть с головы идею. можно ведь написать длл плагин, который делал бы тоже самое. немного почитал как они работают, что в справке, что в инете. решил попробовать.
 создал проект в visual c++ с единственной функцией int execute(int* _arr, int _size) как написано в справке кликера, которая возвращает единицу.
Code: (clickermann) [Select]
extern "C++" __declspec(dllexport) int execute(int* _arr, int _size)
{
    return true;
}
создал длл. испытания на кликере ни к чему не привели. возвращает 0 . может кто нибудь пытался писать плагины под кликер? они вообще работают в нем?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ну вот вроде пишут
http://usb2kbd.ru/
http://usb2kbd.ru/24-usb2kbd-i-clickermann.html


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


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
хехе,  :D
Quote
Важно! Поместите в корень программы (туда же, где находится файл settings.ini) управляющую библиотеку mydll.dl (доступна покупателям девайса usb2kbd).

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

интересно вот что, эту usb2kbd продают за 1900рур. что там за девайс, не понятно. но как я и писал ранее, я чтото гдето видел насчет какихто модулей клавиатуры к ардуино. так вот, никаких модулей  :D . прям перед глазами светился, а я не замечал.

    Arduino Leonardo
Quote
В отличие от всех предыдущих плат ATmega32u4 имеет встроенную поддержку для USB соединения, это позволяет задать как Leonardo будет виден при подключение к компьютеру, это может быть клавиатура, мышь, виртуальный серийный / COM порт.

http://arduino.ru/Hardware/ArduinoBoardLeonardo

цена 450-600рур.


а я всеже попробую сварганить чтонибудь свое  :D. пока просто юсб клавиатуры нет, покупать не охота, попадется под руки - займусь.

обратил внимание на стоимость проекта. естественно, Leonardo будет дешевле. но не факт, что к таким устройствам не смогут замутить защиту.
« Last Edit: May 30, 2017, 03:50:33 PM by dramster »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Нужно конечно свою, чтоб имя и всякие данные менять подстраиваясь под устройство любого производителя.
Почему не покопаешь создание dll из примера?


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
обратил внимание на стоимость проекта. естественно, Leonardo будет дешевле. но не факт, что к таким устройствам не смогут замутить защиту.
Тогда уж Micro
http://arduino.ru/Hardware/ArduinoMicro

Наверно её там и используют. 380 руб.
« Last Edit: May 30, 2017, 05:26:09 PM by Vint »


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Нужно конечно свою, чтоб имя и всякие данные менять подстраиваясь под устройство любого производителя.
Почему не покопаешь создание dll из примера?
обязательно покапаю  :D . мне вот только интересно, где ты эти примеры взял  ??? ?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Они шли в комплекте до версии 4.7 включительно. Потом убрали.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
На ноутбуках есть тачпад -это PS/2 устройство и к нему стоят нужные драйвера  и  сами по себе ноутбуки довольно древней архитектуры. так что режимы PS/2 на них обычно всегда работают.

а вот и мой ноут



и я понятия не имею, почему у меня по 2 экземпляра устройств. но все они, как видите, подключены к юсб.



может еще ктото помнит этот разговор про PS/2 на ноутах.... Так вот, на днях купил себе нетбук помощнее, так тут вообще чудеса, три клавиатуры, одна из них PS/2  :o . Мышь одна - тачпад не PS/2, (вторая усб, не обращать внимания).