USB Reverse Engineering: Down the Rabbit Hole
I've sunk countless hours looking for a way to emulate USB devices in software under Windows. Two years ago there were many different ways. Today there are zero ways that I know of, apparently all removed within the last two years by an astounding tragic coincidence.<p>To elaborate on this section:<p><a href="http://devalias.net/devalias/2018/05/13/usb-reverse-engineering-down-the-rabbit-hole/#where-next" rel="nofollow">http://devalias.net/devalias/2018/05/13/usb-reverse-engineer...</a><p>- There are two versions of the USB/IP drivers. The initial version has a bug where disconnection of a device causes a blue screen. This version is signed by ReactOS, and so you can install this version's drivers without needing to jump through any hoops under Windows. Then there's a patched version that does not cause the bluescreen. Great! Except that this version is not signed by ReactOS. Okay, maybe we can get ReactOS to sign it -- nope, they discontinued their driver signing program because of new regulations by Microsoft put in place within the last year (<a href="https://www.reactos.org/wiki/Driver_Signing" rel="nofollow">https://www.reactos.org/wiki/Driver_Signing</a>). You can also no longer install unsigned drivers on Windows 10 by putting your machine into test mode. This capability was silently removed by Microsoft within the last year. You can still put your device into test mode, but the driver signing checker will still block installation. This is a damn shame because USB/IP is a <i>great</i> project, and it even has a <i>signed driver</i> but the patched version of the driver is not signed. This is infinitely frustrating.<p>- Microsoft used to have this perfect thing called UDE (<a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/developing-windows-drivers-for-emulated-usb-host-controllers-and-devices" rel="nofollow">https://docs.microsoft.com/en-us/windows-hardware/drivers/us...</a>). They removed it last year.<p>- Kernel mode drivers for Windows now have to go through this signing process (<a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/install/kernel-mode-code-signing-policy--windows-vista-and-later-" rel="nofollow">https://docs.microsoft.com/en-us/windows-hardware/drivers/in...</a>) as of last year. As mentioned before, this is why ReactOS discontinued their driver signing program as it's too difficult to meet these new requirements.<p>I have read every forum post, stack overflow post, Windows technical docs, everything I could possibly find for a way to do stable, pure software emulation of USB devices on Windows. They all evaporated within the last year or two. So frustrating as I really really want to build out something but there's simply no way to do it.<p>At this point I have resorted to attempting to hook every Windows system call related to USB device initialization and spoofing them but have been met with no success thus far.<p>I should note that the reason I want to do this in software is because I want to distribute the end result to a relatively large amount of potential users as GPL'd software. For this reason hardware emulation or patching / downgrading Windows isn't an option sadly.<p>Does anyone know of something I missed?