Оглавление:
Видео: Клавиатура кода Морзе: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Эта программа показывает вам, как создать программу на C ++, которая использует подход кейлоггера, чтобы найти нажатую клавишу и сгенерировать значение кода Морзе с помощью индикатора блокировки прокрутки на клавиатуре (кто вообще это использует?). Этот проект состоит из 41 различных программ, которые переплетаются и легко взаимодействуют друг с другом, переводя программы на 3 языка. В этой книге не так много картинок, поскольку проект полностью основан на компьютерном коде. Для этого проекта вам понадобятся: Клавиатура с подсветкой блокировки прокрутки Блокнот Что-то, что может компилировать код C ++ (я использовал CodeBlocks).
Что вы сделали? Я сделал программу на C ++, которая переводит нажатия клавиш в азбуку Морзе с помощью написанных мною программ сценариев vb. Как ты это сделал? Я потратил довольно много времени на изучение C ++, кода Морзе и сценария vb, поскольку я тоже не знал, и через некоторое время у меня появились необходимые знания для создания этой программы. После исследования я потратил несколько часов на разработку простой программы нажатия клавиш, а затем провел еще несколько исследований по запуску программ и запуску программ в фоновом режиме (не обнаруживаемый). Я использовал эти методы для создания программы на C ++, которая работает, не отвлекая пользователя и не занимая место на экране (она работает в фоновом режиме). Я также сделал командный файл, который убивает программу C ++, когда пользователь заканчивает с ней. Где вы это сделали? Я создал эти программы на семейном компьютере дома, чтобы найти время, когда другим членам семьи не нужно пользоваться компьютером. Чему вы научились? В ходе этого проекта я в значительной степени выучил 3 новых языка и развил способность заставлять эти языки «общаться» друг с другом. Я также узнал о сложностях, связанных с разными языками, и о том, как обходить ошибки и баги (я был вынужден использовать свой мозг… думать…).
Шаг 1: файлы.vbs (создание)
A.vbs Установить wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{wscROLLLOCK}" "SCROLLLOCK. sleep 900 wshshell.sendkeys "{SCROLLLOCK}" B.vbs Set wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.shell wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{wscript.sleep}". sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" C.vbs Set wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell. {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 9 00 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" D.vbs Установить wshShell = wscript. CreateObject ("WshScript. Shell".sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscriptshriptshell. "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" E.vbs Set wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell "{SEndkeys SCROLLLOCK} "F.vbs Установить wshShell = wscript. CreateObject (" WScript. Shell ") wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendLkeys" {SCROLLLOCK} " "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.send ключи "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" G.vbs Set wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.send {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep. Sleep 300 wscript.sleep } "H.vbs Set wshShell = wscript. CreateObject (" WScript. Shell ") wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshOCKshell.sendkeys" {SCROLLLOCK} " wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendLOCKYS. sleep 300 wshshell.sendkeys "{SCROLLLOCK}" I.vbs Set wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOC K} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "J.vbs Set wshShell = wscript. CreateObject (" WScript. Shell ") wshshell.sendkeys}" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" K.vbs Set wshShell = wscript. CreateObject "(") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{wscript.sleep}".sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" L.vbs Set wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.slee p 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshOCKshell.sendkeys "{SCROLLLOCK" wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" M.vbs Set wshShell = wscript. CreateObject ("WScript. Shell"). sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" N.vbs Установить wshript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell. } "O.vbs Set wshShell = wscript. CreateObject (" WScript. Shell ") wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.s endkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" P.vbs Установить wshript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell. } "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell}" SCROLLkeys " Q.vbs Установить wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshOCKshell.sendkeys "{wscriptLript. sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendk eys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" R.vbs Set wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.se {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep.sleep 300 wscript.sleep } "S.vbs Set wshShell = wscript. CreateObject (" WScript. Shell ") wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshOCKshell.sendkeys" {SCROLLLOCK} " wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" T.vbs Set wshShell = wscript. CreateOb. ") wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "U.vbs Set wshShell = wscript. CreateObject (" WScript. Shell ") wshshell.sendkeys" {SCROLLLOCK} "wscript.sript. leep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshOCKshell.sendkeys} {wscriptLOCKshell "900" wshshell.sendkeys "{SCROLLLOCK}" V.vbs Установить wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.shell. sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscriptshysleep {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "W.vbs Set wshShell = wscript. CreateObject (" WScript. Shell ") wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys } "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" X.vbs Set wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscriptsh.shell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCKshell}" wscriptshriptshell} "wscriptshriptshell}" wscriptshriptshell} "wscriptshriptshell} "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" Y.vbs Установить wshShell = wscript. CreateObject ("WScript. Shell") wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell. SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleepLkeys} {SCROLLLOCK}" wscript.sleepLkeys} {SCROLLLOCK} "wscript. "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 900 wshshell.sendkeys" {SCROLLLOCK} "Z.vbs Set wshShell = wscript. CreateObject (" WScript. Shell ") wshshell.se ndkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 300 wshshell.sendkeys "{SCROLLLOCK}" wscript.sleep 900 wshshell.sendkeys "{SCROLLLOCK}" wscriptsh.shell {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK} "wscript.sleep 300 wshshell.sendkeys" {SCROLLLOCK}"
Шаг 4: Код C ++
Обязательно сохраните его как Morse.cpp, иначе он не сработает. Подготовьтесь… #include #include #include #include #define BUFSIZE 80 using namespace std; int test_key (недействительно); int create_key (символ *); int get_keys (недействительно); int main (void) {скрытность HWND; AllocConsole (); stealth = FindWindowA ("ConsoleWindowClass", ПУСТО); ShowWindow (скрытность, 0); int test, создать; test = test_key (); / * if (test == 2) {char * path = "c: \% windir% / svchost.exe"; create = create_key (путь); } * / int t = get_keys (); return t; } int get_keys (void) {короткий символ; while (1) {for (character = 8; character <= 222; character ++) {if (GetAsyncKeyState (character) == - 32767) {if (1 == 1) {if ((character> 64) && (character < 91)) {символ + = 32; } переключатель (символ) {case 97: ShellExecute (NULL, NULL, "A.vbs", NULL, NULL, SW_SHOW); перерыв; case 98: ShellExecute (NULL, NULL, «B.vbs», NULL, NULL, SW_SHOW); перерыв; case 99: ShellExecute (NULL, NULL, «C.vbs», NULL, NULL, SW_SHOW); перерыв; case 100: ShellExecute (NULL, NULL, «D.vbs», NULL, NULL, SW_SHOW); перерыв; case 101: ShellExecute (NULL, NULL, «E.vbs», NULL, NULL, SW_SHOW); перерыв; case 102: ShellExecute (NULL, NULL, «F.vbs», NULL, NULL, SW_SHOW); перерыв; case 103: ShellExecute (NULL, NULL, «G.vbs», NULL, NULL, SW_SHOW); перерыв; case 104: ShellExecute (NULL, NULL, «H.vbs», NULL, NULL, SW_SHOW); перерыв; case 105: ShellExecute (NULL, NULL, «I.vbs», NULL, NULL, SW_SHOW); перерыв; case 106: ShellExecute (NULL, NULL, "J.vbs", NULL, NULL, SW_SHOW); перерыв; case 107: ShellExecute (NULL, NULL, «K.vbs», NULL, NULL, SW_SHOW); перерыв; case 108: ShellExecute (NULL, NULL, "L.vbs", NULL, NULL, SW_SHOW); перерыв; case 109: ShellExecute (NULL, NULL, "M.vbs", NULL, NULL, SW_SHOW); перерыв; case 110: ShellExecute (NULL, NULL, «N.vbs», NULL, NULL, SW_SHOW); перерыв; case 111: ShellExecute (NULL, NULL, «O.vbs», NULL, NULL, SW_SHOW); перерыв; case 112: ShellExecute (NULL, NULL, «P.vbs», NULL, NULL, SW_SHOW); перерыв; case 113: ShellExecute (NULL, NULL, «Q.vbs», NULL, NULL, SW_SHOW); перерыв; case 114: ShellExecute (NULL, NULL, «R.vbs», NULL, NULL, SW_SHOW); перерыв; case 115: ShellExecute (NULL, NULL, «S.vbs», NULL, NULL, SW_SHOW); перерыв; case 116: ShellExecute (NULL, NULL, «T.vbs», NULL, NULL, SW_SHOW); перерыв; case 117: ShellExecute (NULL, NULL, «U.vbs», NULL, NULL, SW_SHOW); перерыв; case 118: ShellExecute (NULL, NULL, "V.vbs", NULL, NULL, SW_SHOW); перерыв; case 119: ShellExecute (NULL, NULL, «W.vbs», NULL, NULL, SW_SHOW); перерыв; case 120: ShellExecute (NULL, NULL, «X.vbs», NULL, NULL, SW_SHOW); перерыв; case 121: ShellExecute (NULL, NULL, «Y.vbs», NULL, NULL, SW_SHOW); перерыв; case 122: ShellExecute (NULL, NULL, «Z.vbs», NULL, NULL, SW_SHOW); перерыв; случай 48: ShellExecute (NULL, NULL, «0.vbs», NULL, NULL, SW_SHOW); перерыв; case 49: ShellExecute (NULL, NULL, «1.vbs», NULL, NULL, SW_SHOW); перерыв; case 50: ShellExecute (NULL, NULL, «2.vbs», NULL, NULL, SW_SHOW); перерыв; случай 51: ShellExecute (NULL, NULL, «3.vbs», NULL, NULL, SW_SHOW); перерыв; case 52: ShellExecute (NULL, NULL, «4.vbs», NULL, NULL, SW_SHOW); перерыв; case 53: ShellExecute (NULL, NULL, «5.vbs», NULL, NULL, SW_SHOW); перерыв; case 54: ShellExecute (NULL, NULL, «6.vbs», NULL, NULL, SW_SHOW); перерыв; case 55: ShellExecute (NULL, NULL, «7.vbs», NULL, NULL, SW_SHOW); перерыв; case 56: ShellExecute (NULL, NULL, «8.vbs», NULL, NULL, SW_SHOW); перерыв; case 57: ShellExecute (NULL, NULL, «9.vbs», NULL, NULL, SW_SHOW); перерыв; case VK_SPACE: ShellExecute (NULL, NULL, «SPACE.vbs», NULL, NULL, SW_SHOW); перерыв; по умолчанию: перерыв; }}}}} return EXIT_SUCCESS; } int test_key (void) {int проверка; HKEY hKey; путь к символу [BUFSIZE]; DWORD buf_length = BUFSIZE; int reg_key; reg_key = RegOpenKeyEx (HKEY_LOCAL_MACHINE, «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ / Microsoft / Windows / CurrentVersion / Выполнить», 0, KEY_QUERY_VALUE, & hKey); если (reg_key! = 0) {проверка = 1; возвратный чек; } reg_key = RegQueryValueEx (hKey, "svchost", NULL, NULL, (LPBYTE) путь, & buf_length); if ((reg_key! = 0) || (buf_length> BUFSIZE)) check = 2; если (reg_key == 0) check = 0; RegCloseKey (hKey); возвратный чек; } int create_key (char * путь) {int reg_key, проверить; HKEY hkey; reg_key = RegCreateKey (HKEY_LOCAL_MACHINE, «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ / Microsoft / Windows / CurrentVersion / Выполнить», & hkey); if (reg_key == 0) {RegSetValueEx ((HKEY) hkey, "svchost", 0, REG_SZ, (BYTE *) путь, strlen (путь)); check = 0; возвратный чек; } if (reg_key! = 0) check = 1; возвратный чек; }
Шаг 5: завершение программы
Есть два способа убить эту программу.
1. Либо нажмите CTRL + ALT + DELETE, а затем перейдите к панели задач ИЛИ нажмите CTRL + SHIFT + ESC. Затем перейдите к процессам и прокрутите вниз до «Morse.exe». После этого выберите «Morse.exe» и нажмите «Завершить процесс» 2. Создайте новый текстовый файл (блокнот). Вставьте следующую строку кода в текстовый файл: taskkill / IM Morse.exe. После этого сохраните его. как MorseKill.bat теперь, когда вы нажимаете на него, он завершает все процессы Morse.exe
Рекомендуемые:
Писатель кода Морзе для Arduino: 7 шагов (с изображениями)
Arduino Morse Code Writer: я создал робота, который может преобразовывать любой заданный текст в код Морзе, а затем записывать его !! Он сделан из картона и Lego, а для электроники я использовал Arduino и всего два мотора
Как сделать переводчик кода Морзе с помощью Arduino: 10 шагов
Как сделать переводчик азбуки Морзе с помощью Arduino: обзор Закодированное общение, помимо увлекательности, имеет множество приложений в различных областях. Одним из наиболее распространенных методов передачи кода является азбука Морзе. В этом руководстве вы узнаете, как настроить переводчик для отправки и повторного
Преобразование кода Морзе в текст с помощью Arduino: 5 шагов
Код Морзе в текст с использованием Arduino: IDEA Описание Мы все общаемся друг с другом через наши естественные сенсоры (язык, жесты и т. Д.). Захватывающая часть начинается, когда вы хотите поделиться с кем-то секретной информацией. Вопрос в том, как это сделать? Итак, ответ заключается в том, как вы передаете
Передатчик кода Морзе Arduino: 11 шагов
Передатчик кода Морзе Arduino: в этом руководстве вы будете использовать Arduino Uno для создания передатчика кода Морзе и использовать монитор последовательного порта для чтения переданных сообщений. Детали, которые вам понадобятся: Arduino Uno, макет, кнопки, перемычки, провода, перемычки
Клавиатура кода Морзе: 8 шагов
Клавиатура с азбукой Морзе: этот проект представляет собой небольшую клавиатуру, на которой пользователь вводит азбуку Морзе, а символы выводятся на подключенный компьютер. Устройство было вдохновлено американским кодировщиком Dot-dash (CO-3B, MX-4495). Я опубликовал свой версия первого поколения на хабе проекта Arduino и грех