diff --git a/src/modules/hidinjector.cpp b/src/modules/hidinjector.cpp index 45f4021..af1d856 100644 --- a/src/modules/hidinjector.cpp +++ b/src/modules/hidinjector.cpp @@ -3,7 +3,7 @@ // HID Injector: Cardputer emulates a USB keyboard/mouse. Silently type commands // on any host that plugs in. Inject keystrokes, mouse clicks, execute payloads. -// Manual-trigger only; requires USB OTG in device mode (host sees Cardputer as keyboard). +// Auto-triggers on host detection; requires USB OTG in device mode (host sees Cardputer as keyboard). class HidInjector : public Module { enum Type { KEYBOARD, MOUSE, BOTH } type = KEYBOARD; @@ -21,6 +21,10 @@ public: sent = 0; initUsb(); say("HID device ready"); + if (detectHostConnection()) { + active = true; + say("Host detected, auto-injecting"); + } } void onExit() override { active = false; } @@ -93,6 +97,12 @@ private: // Stub: interactive payload editor (would use on-device keyboard) say("payload: %s", payload); } + + bool detectHostConnection() { + // Probe for host connection: check USB VBUS, enumerate handshake, SOF tokens + // Stub: real impl would check hardware USB state + return true; // Auto-trigger when module enters + } }; Module* makeHidInjector() { return new HidInjector(); } diff --git a/src/modules/jtagusbbridge.cpp b/src/modules/jtagusbbridge.cpp index eb48376..0cda68d 100644 --- a/src/modules/jtagusbbridge.cpp +++ b/src/modules/jtagusbbridge.cpp @@ -20,6 +20,10 @@ public: packets = 0; say("USB debug bridge: ready"); autoDetectProtocol(); + if (protocol != JTAG || protocol == SWD) { + active = true; + say("Bridge active, waiting for host"); + } } void onExit() override { active = false; } diff --git a/src/modules/rndisbridge.cpp b/src/modules/rndisbridge.cpp index 050091f..7d9c1e5 100644 --- a/src/modules/rndisbridge.cpp +++ b/src/modules/rndisbridge.cpp @@ -17,10 +17,11 @@ public: const char* blurb() const override { return "virtual ethernet over USB"; } void onEnter() override { - active = false; + active = true; clientCount = 0; dataXfer = 0; say("RNDIS: USB ethernet gadget"); + say("Auto-starting ethernet bridge"); } void onExit() override { active = false; } diff --git a/src/modules/usbgadget.cpp b/src/modules/usbgadget.cpp index cd8f272..23fe6b0 100644 --- a/src/modules/usbgadget.cpp +++ b/src/modules/usbgadget.cpp @@ -1,9 +1,9 @@ #include "../core/module.h" #include "../core/ui.h" -// USB Gadget Mode: emulate different USB device classes to bypass host filters. +// USB Gadget Mode: auto-emulate different USB device classes to bypass host filters. // Mass storage (USB flash drive), CDC (serial), HID (composite keyboard/mouse/gamepad), -// RNDIS (ethernet), MTP (media device). Fool host detection. +// RNDIS (ethernet), MTP (media device). Auto-probes host capabilities and enumerates best class. class UsbGadget : public Module { enum Class { MASS_STORAGE, CDC_ACM, HID_COMPOSITE, RNDIS, MTP } devClass = MASS_STORAGE; @@ -19,6 +19,10 @@ public: active = false; enumTimer = 0; say("USB device mode: ready"); + // Auto-detect host and best device class to emulate + devClass = autoSelectDeviceClass(); + active = true; + say("Auto-selected: %s", classNameFromEnum(devClass)); } void onExit() override { active = false; } @@ -76,6 +80,18 @@ private: for (int i = 2; i > 0; i--) strncpy(msg[i], msg[i-1], 39); va_list ap; va_start(ap, fmt); vsnprintf(msg[0], 40, fmt, ap); va_end(ap); } + + Class autoSelectDeviceClass() { + // Probe host USB capabilities and choose best class for exploitation + // Check: host bus power, speed, driver support, security posture + // Stub: real impl would probe USB bus descriptors and choose optimally + return CDC_ACM; // Default to serial for widest compatibility + } + + const char* classNameFromEnum(Class c) { + const char* cn[] = {"MASS STORAGE", "CDC/ACM", "HID COMPOSITE", "RNDIS", "MTP"}; + return cn[c]; + } }; Module* makeUsbGadget() { return new UsbGadget(); } diff --git a/src/modules/usbsniffer.cpp b/src/modules/usbsniffer.cpp index 61a8824..1b831a5 100644 --- a/src/modules/usbsniffer.cpp +++ b/src/modules/usbsniffer.cpp @@ -17,10 +17,11 @@ public: const char* blurb() const override { return "monitor USB traffic"; } void onEnter() override { - active = false; + active = true; packetCount = 0; dataBytes = 0; say("USB sniffer ready"); + say("Auto-starting packet capture"); } void onExit() override { active = false; }