[stream] USB: Reverse Engineering and Writing Drivers

  Рет қаралды 83,999

Low Byte Productions

Low Byte Productions

Күн бұрын

=[ 🔗 Links 🔗 ]=
Book: USB Complete by Jan Axelson
Marcan reverse engineering a MIDI controller: • Making Pioneer DDJ-RB ...
USB 2.0 Spec: www.usb.org/document-library/...
Blog with useful resources: hackernoon.com/usb-reverse-en...
GreatFET: greatscottgadgets.com/greatfet/
🎥 Stream Playlist: • Streams
💌 Updates to your inbox: tinyletter.com/lowleveljavasc...
🗣 Discord: / discord
⭐️ Patreon: / lowleveljavascript
💻 Github Repo: github.com/francisrstokes/GMM...

Пікірлер: 120
@DanielKaspo
@DanielKaspo 2 жыл бұрын
This is so cool!!! I'm a web-dev of almost ~10+ years and I recently started a small hardware company and I've had to learn all about low-level USB, hardware development, firmware coding, and communicating over WebUSB. I feel less alone as I watch your video :)
@LowByteProductions
@LowByteProductions 2 жыл бұрын
That sounds awesome Daniel -what are you working on there? It sounds like you would fit in well on the discord server by the way
@FirstLast-tx3yj
@FirstLast-tx3yj Жыл бұрын
@@LowByteProductions are their known ways to sniff the messages between the OS and the hardware (CPU and GPU)?? Kinda like Canbus sniffing where we watch the conversation to basically reverse engineer some drivers and make an the same OS work with custom hardware
@LowByteProductions
@LowByteProductions Жыл бұрын
​@@FirstLast-tx3yj The short answer is yes, but the long answer is that it's complicated. Disclaimer that I don't work on this stuff directly, so I could be off base with some of it, but this is my understanding: The traditional view of a modern computer is that the CPU is not connected to peripheral hardware directly, but rather to the chipset. The chipset consists of a northbridge, which has a bus to the CPU and manages signals to the GPU and fast buses like PCI-E. However in the last decade or so integration has gotten tighter, and the CPU itself has absorbed a lot of that interconnect, and typically has an internal PCI-E controller. So a modern GPU is connected to the CPU over an integrated PCI-E connection. To put it into perspective, I looked up some numbers for data transfer rates on the latest generation of PCI-E in the highest bandwidth configuration, and it was upwards of 32GB/s. That's an insanely high data rate, and capturing it raw like a CAN bus would be an enormous effort, likely out of reach for anyone without a multi-million dollar lab. Signals at that level are deep into the RF spectrum, and physics really comes into play - even just "tapping in" to a line would probably completely wreck the signal. That said, they way you see people reversing GPUs these days is by getting in at the OS level with custom drivers, or eBPF hooks - much like this video. You write some test case in the black box, watch the exchanges at the OS level, and try to understand what they mean. Then you write your own driver, and construct messages based on what you've observed and extrapolated, and build up an understanding. This is essentially what the folks at Asahi linux have been doing with the M1 GPU. Check out Alyssa's blog rosenzweig.io and the the asahi linux youtube channel. Tons of work being done in the open there.
@FirstLast-tx3yj
@FirstLast-tx3yj Жыл бұрын
@@LowByteProductions thank you this is one of the best explanations i got so far. So in the project you mentioned they are building their own drivers to run linux on the M1 and for the hardware to be functional with the OS?? Would you say the opposite, developing drivers to adapt a manufacturers OS to custom PC CPU and GPU, would be harder Or is it the same procedure and thought process?
@maxmustermann7397
@maxmustermann7397 8 ай бұрын
@@FirstLast-tx3yj Regardless where the GPU is connected to (directly or via a chipset) the device is connected via PCIe lanes to the I/O controller of the CPU. As mentioned these are high bandwidth data transfer. Like for anything (PCIe, RAM & even the CPU itself) there exists specialized hardware for testing and probing the data which is send over. But because these are very fast and high bandwidth while also have strict signaling requirements you can't just probe them. So you need specialized and so very expensive hardware which is likely also hart to get. Like by using a logic analyzer that need at least sample twice as fast as the data signaling frequency is. _Better 4 times to avoid errors._
@GermanTutorials
@GermanTutorials Жыл бұрын
Dude seriously, THANK YOU! With you help i have been able to reverse engineer my NZXT RGB controller and write a simple pyUSB driver for it which runs on linux! Please keep it going, you are doing outstanding work!
@LowByteProductions
@LowByteProductions Жыл бұрын
Glad I could be of help 😁
@davidmirv
@davidmirv 7 ай бұрын
This video was amazingly informative. I’m looking to do almost the exact same thing with a different USB keyboard. Thank you so much for your time and effort !
@user-cj8iv5tj2i
@user-cj8iv5tj2i 2 жыл бұрын
Thank you for sharing.
@abdulalimrajoub6063
@abdulalimrajoub6063 2 жыл бұрын
Thanks for sharing! had so much fun watching it.
@Salehalanazi-7
@Salehalanazi-7 2 жыл бұрын
extremely cool. I gotta study this. next weekend
@DanielKaspo
@DanielKaspo 2 жыл бұрын
42:50 spot on! I think you're 100% right on your assessment :)
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Awesome, thanks 😁 Watching that back I'm realising this is one of those times that my brain glitched out and confused bytes with bits. Of course 8 bytes is enough to send any number of keys haha
@iamarishi
@iamarishi 2 жыл бұрын
I really love your channel. Keep up the good work.
@LovyDuga
@LovyDuga 6 ай бұрын
Anyone won't regret after subscribe this channel. Amazing content. Salute your hardwork.
@himdo1
@himdo1 2 жыл бұрын
Thanks for the video, With this (and the github repo) I've started writing a driver for Cooler Master ControlPad.
@ninjazhu
@ninjazhu 2 жыл бұрын
Nice channel, you do weird things in JS as do I... like writing VMs... it's cool to see different people's approaches. Now I am working on my JSASM which is an instruction set simulator in JS that itself can be assembled to different platforms after it is debugged in native JS. It of course to run, has to use a mixture of internal memory handling (like a simulator/emulator) as well as actual JS constructs. I figured I'm tired of coding separate JS, Z80 and 6502 logic... why not make it work in all cases but... with the benefits of debugging in JS. And anything I code still runs in JS so i can re-use it for my other projects.
@tunatuncer5639
@tunatuncer5639 2 жыл бұрын
Great video! I am a senior undergraduate CS student just taking the OS course. And I have a project to write a device driver. This is really inspiring!
@platin2148
@platin2148 6 ай бұрын
I guess a linux one or are you guys allowed todo userspace drivers too?
@fcf8269
@fcf8269 8 ай бұрын
This video should be made as course to teach how to do engineering work. Beside the topic, the way in which it is explained is perfect. No mystic cuts; it is done in realtime, going through the process to learn how the protocol works, how you gather the info, how you decode the info and figure out what to look for, and finally how to piece the info you gather earlier to actually use them. Many other videos give you one of the pieces of this puzzle, expecting you figure things out, but if you have no idea about the whole process (that is why you are here, right? If you knew how to do it you would not be watching a video); you want to see the whole logic behind the workflow and how you get there. In almost 30 years of career this is among the best explained video I have seen, very good job.
@LowByteProductions
@LowByteProductions 8 ай бұрын
Thank you, I really appreciate that 🙏
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
The variable length URB structure describes the details of the request and also contains information about the status of the completed request.
@nathantron
@nathantron 2 жыл бұрын
MY GOD. I can finally get rid of this terrible keyboard bloatware!!!! I LOVE YOU!
@platin2148
@platin2148 6 ай бұрын
An replace it with a bloated javascript runtime + web browser?
@boutibouti6503
@boutibouti6503 2 жыл бұрын
فديو أكثر من رائع كنتمنى يحقق أعلى نسبة مشاهدة لأنك فعلا تستحق التشجيع
@LowByteProductions
@LowByteProductions 2 жыл бұрын
اشكرك صديقي
@The5TN
@The5TN Жыл бұрын
Great video! I have two projects planned and this has helped a lot. While i dont use JS or TS the way you described stuff was still very helpful when i was trying to use hidapi in python
@LowByteProductions
@LowByteProductions Жыл бұрын
Glad it can help! It was the goal to keep this video on the USB level, and not the language level
@FuzzyTekShow
@FuzzyTekShow 2 жыл бұрын
Awesome video, really interesting stuff thank you! :)
@thaoloveful
@thaoloveful 2 жыл бұрын
Thank you for sharing :) Very cool
@RafaelSousa-pj1ok
@RafaelSousa-pj1ok 2 жыл бұрын
Daaaammmm! You made something that communicates with a device driver using Javascript? Guy... You are amazing!
@platin2148
@platin2148 6 ай бұрын
You mean he used the bad web interface to actually do something even though extremely inefficient but he did.😊
@PiotrTajchman
@PiotrTajchman 8 ай бұрын
Great content, thank you for sharing
@LowByteProductions
@LowByteProductions 8 ай бұрын
Thanks Piotr!
@maxmustermann7397
@maxmustermann7397 8 ай бұрын
- As far as I remember you also need to detach and claim the interface for WebUSB. For HID it's better to use WebHID instead (but that isn't supported everywhere). - It's likely that there are multiple functions specified in the HID report descriptor for the mouse. That way multiple different HID functions can be put into a single interface. In the case these are separated as independent data packages and not grouped up in the same the first byte is the report ID to differentiate them. So the first byte with the 0x04 likely identify the report ID. - It's always worth to have a look in the HID descriptor where the HID functions structure is defined for a faster start. - Byte 2 and 3 seems indeed to be a simple checksum (sum of all elements).
@MD_Builds
@MD_Builds 2 жыл бұрын
Trying to figure out how to write up a USB descriptor for some custom hardware. While this video wasnt quite what I was after I did learn a fair bit... Also That second byte after 0x04 is deffo a checksum, I guess 04 is start frame followed by checksum maybe 2 byte checksum as byte 3 is 0 in these tests.... the next three bytes are likely commands or sub commands, followed by value. Its interesting there is a checksum in the byte stream as I thought USBhid handled that error correction anyway? Ahhh at 2:10:48 you see it :D
@PaulSebastianM
@PaulSebastianM 4 ай бұрын
Don't know if you talked about this, but there is a mode that USB devices can be put in, some of them, some of them only come with this mode, like keyboards and mice, called HID mode, which is easier to write device drivers for, in userspace. They are called filter drivers I think. And the drivers hook into a standard kernel driver on both Windows and Linux, that allows other userspace filter drivers to exchange HID datagrams with the device, instead of custom bytes. Examples include POS devices like scanners and cash drawers. IBM and a bunch of other manufacturers worked to standardise for example the POS HID spec.
@DanielKaspo
@DanielKaspo 2 жыл бұрын
42:10 you can use that information in real cool ways :) Like "overclocking" devices to have them respond faster if they can (e.g. a keyboard that's set to 8ms poll rate when in reality, it can handles 1ms.)
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Ah that's really interesting! That's also one of the cool things you can do when you have absolute control on the host side right - you can "break" your contract with the device and see how it responds. Have you tested this out with a lot of different keyboards?
@DanielKaspo
@DanielKaspo 2 жыл бұрын
@@LowByteProductions Not yet but I'm planning on experimenting with it sometime soon :)
@Yotanido
@Yotanido 2 жыл бұрын
One suggestion to deal with wiresharks inability to use capture filters for usbmon: You have different usbmon devices, which correspond to the different USB busses. usbmon0 captures everything, which is what you used in the video. If you make sure the keyboard is plugged into a different bus than the other devices and capture on the corresponding usbmon device, you get rid of all the spurious packets.
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Yeah that's indeed a great point. Unfortunately my computer only exposes 2 buses (though it seems to have 2 more internally). With all the high-bandwidth devices on one bus the capture becomes impossible. My solution (which I'll show in the next stream) has been to use eBPF to capture transactions at the kernel level and filter out the ones I'm not interested in. That's turned out to be a really great approach and I'm surprised that I haven't seen more about it!
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
device generally generate a hardware interrupt to IO controller... which then notify CPU though it iNIT pin ..on being notify of that CPU will get the interrupt No from IO Controller on data bus. Then will call the appropriate interrupt routine that is mapped for that hardware interrupt. Hardware Interrupt just says that device wants something to say. Now in that interrupt service routine which is generally installed by the OS... the OS will call the appropriate driver routine to handle the device request. That driver routine (or even interrupt routine itself) will then poke the driver about the cause through its registers and will do the whatever needed. I mean read data or whatever. Now all this can be done when the hardware interrupt actually happened or maybe differed to appropriate time if its a lengthy job cause when u enter a interrupt routine other external interrupts are generally disabled depends on how CPU entered the interrupt service routine in protected mode to check nested exception conditions or race problem. And in modern multicore CPUs there are local APIC per processor on die itself which are connected to an IO APIC on motherboard. And I guess APIC can handle 256 interrupts in compare to PIC just 15 though master slave arrangment... and in protected mode those interrupts cant be mapped below 32 cause they are reserved as CPU exception interrupts in protected mode. In real mode they are kinda fixed for legacy reason from 08h to 0Fh for master and 70h to 7Fh for slave.
@mariocampos7436
@mariocampos7436 2 жыл бұрын
I think the reason it only switched to one LED mode is because the "checksum" byte, 0x0c, was static and did not change with the mode argument.
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Hey Mario, I managed to figure out what the problem was in the end - apparently when I was clicking through the packets on the first LED mode setting, I skipped over the actual "command" packet and moved to one after - so the data that I copied out and put into the driver was wrong 🤦‍♂️ In reality, the LED mode setting actually follows the same basic pattern as the brightness - byte 2 is `0x08 + mode`
@zatherz2498
@zatherz2498 2 жыл бұрын
@@LowByteProductions I'm late to this, so sorry if you mentioned it, but the 0x08 appears to be a checksum - it sums the following 0x06, 0x01, 0x01 bytes as well as the "argument" (and the checksum appears to be a 16 byte int).
@user-ox6mt1lh7b
@user-ox6mt1lh7b 6 ай бұрын
This is really interesting topic! Which font and color scheme are you using in VS Code here?
@KangJangkrik
@KangJangkrik Жыл бұрын
I wish I came earlier, I just want to say something while you're thinking about bitfields, especially at 2:19:57
@dio-yt9871
@dio-yt9871 2 жыл бұрын
This was a great watch, tbh I got a little scared when you started firing knowingly broken packets and dangling transaction starts at the keyboard, though maybe I'm underestimating how brick-resistant they are :D
@Sparkette
@Sparkette 2 жыл бұрын
What are the odds that something like that would write to non-volatile memory?
@miroslavivanov3496
@miroslavivanov3496 3 ай бұрын
34:00 b is a byte or 8bits or 0xff
@wkcpbe
@wkcpbe 2 жыл бұрын
Great video. Do you think the same approach could be used to get the current battery level/percentage in Logitech G HUB for the Logitech G PRO Wireless mouse? I'm in the process of attempting to do so and will provide an update if I'm successful.
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Is it something that the mouse offers in Windows (or another environment)? If so then I'd say it's definitely possible, you just need to be able to capture the request and figure out how it encodes the response
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
URB is USB Request Block
@evgheniires2710
@evgheniires2710 2 жыл бұрын
Could you share your zshrc as to how you print the dividers and other info between the commands?
@LowByteProductions
@LowByteProductions 2 жыл бұрын
It's just the "jonathon" theme
@obeid_s
@obeid_s 10 ай бұрын
I created an app to share android phones camera through the usb ( host ) using libusb 😂, Thanks for the video, its time to learn more about usb 👍🏻
@GyrusAssimi-wb3jw
@GyrusAssimi-wb3jw 4 ай бұрын
Bro amazing, please Can you tell me more like how does it work and what the name of the app
@obeid_s
@obeid_s 4 ай бұрын
@@GyrusAssimi-wb3jw I did not publish it, because you have to change the driver in windows, and use the samsung driver in order to connect to Android Accessory, after that u just stream the images through the usb, and u have to create a program to handle this images and display it
@GyrusAssimi-wb3jw
@GyrusAssimi-wb3jw 4 ай бұрын
@@obeid_s all right i get, but please Can we get in contact i mean where Can we discuss more i wish to learn from people like you in order to know more about many tpoics for me to succeed in cybersec i want to start, and i like this part of kernel dev contents and lower level dev project that why i got this video
@GyrusAssimi-wb3jw
@GyrusAssimi-wb3jw 4 ай бұрын
@@obeid_s if possible could you help me with esp32 CAM programming ? and to understand more on C system drivers developement ?
@obeid_s
@obeid_s 4 ай бұрын
@@GyrusAssimi-wb3jw I wish i can help you mate, I learned these stuff from internet and i did not go to university.., I really wish i can help you
@whtiequillBj
@whtiequillBj Жыл бұрын
Is there not a way to do this from within Linux using WINE?
@gentlevandal7589
@gentlevandal7589 2 жыл бұрын
Awesome video! How did you manage to run Windows 10 on Virtualbox without having huge lagging? :)
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Thanks! Just gave it enough ram, and only ran a single program at a time. I even managed to solve the crashing issues in next video by changing the USB capturing method
@rockdasher
@rockdasher 3 ай бұрын
Is it viable to use this aproach on a USB printer?
@ahmednouman9871
@ahmednouman9871 2 жыл бұрын
does this support bulk transfer or is it only for control and interrupt and isochronous transfers only?
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Node-usb in general? It supports bulk. What it doesn't support is isochronous
@ahmednouman9871
@ahmednouman9871 2 жыл бұрын
@@LowByteProductions thanks for the prompt reply, I am trying to reverse engineer a touchscreen device, do you have a business or would you be able to do the job for us if yes can we share contacts? thanks
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Hey Ahmed, no worries. I'm not really open to that kind of freelance work right now I'm afraid.
@MrDonald911
@MrDonald911 2 жыл бұрын
Thanks for the content, however I have a somewhat more complex problem at hand ... how do you think you would proceed if you needed to decypher how a hardware communicates with your PC via USB if you lost the driver in the first place ? Cause right now what you're doing is kinda cheating, since you can capture both the input and the output and you start guessing the transcription between them. Thanks
@LowByteProductions
@LowByteProductions 2 жыл бұрын
What you want to do is certainly more complex. I still wouldn't call thus cheating though. This process is what people typically mean when they talk about reverse engineering. You need to be able to poke the system and observe it in order to make reasonable guesses about how it works. Now in your case, the process is a lot harder. It requires way more patience, and diligent notetaking. First you need to get a lay of the land. Using lsusb you can figure out what kind of class this device is, what endpoints it contains, and what kind and how much data you can push or pull from those endpoints. If you're lucky the device is a generic class, and you can use a generic driver as your starting point. In the worst case, the device is vendor specific, and all you can do is to spray bytes at it and hope it responds in some consistent way. Imagine a device that, for whatever reason, requires that you send it some random looking 16 byte packet before it will do anything. That is equivalent to breaking an AES key - not likely to say the least. Thankfully most devices simply aren't built that way, but you see the point I'm trying to make. On both ends of the spectrum, the scientific method is your friend. Form a hypothesis, make a prediction, test it, and write down what you observe. When you start to build assumptions, try to design experiments that break your assumptions; That can feel like a step back, but it's knowledge nonetheless. If you end up going down this road, and are making your notes public, I'd love to take a look. Drop by the discord server if you want to chat more about it.
@MrDonald911
@MrDonald911 2 жыл бұрын
@@LowByteProductions Sure I would love to tell you more about this once I'll get started, it's a project that might be as complex as you described. It will involved medical devices, let's hope the drivers will be available :)
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
So u trying to write a lower filter driver for USB device in windows.... is that it? To caputre control code?
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
but does that let u capture control commands... I dont see it
@trainerprecious1218
@trainerprecious1218 2 жыл бұрын
Can you do the same for a headphone or headset? or can someone point me to the right resources to do something like this for a headphone or headset
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Yes you can do the same, provided its for the control parts and not the audio. Audio requires really tight transmission of data that isn't supported in node (though you can write that part in C/C++ using libusb).
@Gurpreegill1962
@Gurpreegill1962 16 күн бұрын
Can you please link White Quark's USB twitch stream link?
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
Anyway interrupt type doesn't mean anything to do with poling I guess rather it's the opposite of poling. In USB terms here I mean what I skimed though a lil bit of its specification jus today is out of 4 type interrupt type is where latency is fixed at a certain value. And host (OS or CPU) won't be poling keyboard for data that wud be too much burden for such mundane device. And that's why interrupt type is used for keyboards likes I guess. keyboard controller inside your keyboard will generate a interrupt for IOAPIC or PCH whatever there is. which certainly will go through USB interface since yours a usb keyboard. So once it reached the IO controller it will be forwarded to CPU then your OS through some interrupt routine. There a lot inbetween but lets keep it simple as this. And as u press a key ..key should be notify to OS or user so why its an interrupt generated (hardware). Only host side intiation I can imagine is when it send your keyboard some control commands to change its behaviour like different led styles etc. So basically all input devices are interrupt driven at least that endpoint or pipe which is outgoing from input device to host since they need immediate attention or response.
@yppjeevan
@yppjeevan 7 ай бұрын
I thoroughly enjoyed the video. Is there a possibility to replicate it for the Windows Wifi Driver, similar to how Microtek 7902 supports Windows but not Linux? Can a Linux driver be developed for Microtek 7902 or any other wifi driver by following this method or is there any other method?
@platin2148
@platin2148 6 ай бұрын
If it’s a usb device probably.
@platin2148
@platin2148 6 ай бұрын
But that will not use type script anymore as that would be way to slow and probably break on timings.
@whenyoushorts
@whenyoushorts Жыл бұрын
Hey bro I have a big request from you..can you try to reverse Engineer pantum printer firmware to make it chipless firmware version ? Is it possible ?
@alexdefoc6919
@alexdefoc6919 6 ай бұрын
1:43:26 where i left off at
@lossen1984
@lossen1984 2 жыл бұрын
Wow what terminal emulator and/or colour theme and desktop environment are you using? That is beautiful! Anyone else who knows?
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Hey Laurits, It's terminator, with zsh as the shell, and the "jonathon" theme.
@lossen1984
@lossen1984 2 жыл бұрын
@@LowByteProductions Thanks so much! You just earned a follower!
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
Okay! so using USB monitor in Windows to capture those control codes? ...Smart move! 😂
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
Or I am still not getting what u intend to do... smile But thats I wud have done in case of missing specification for the device and not having some utility to let me do so.
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
30:31 Okay that seems interesting.... Now I got it... so u don't have a datasheet or specification for your keyboard. So how u gonna figure out what command your keyboard understands I wonder? ...Yep windows driver might have helped but then u wud really have to reverse engineer something to learn about those code or working. Anyway lets see how u go for it... got all the time today.😃
@edwardmacnab354
@edwardmacnab354 2 жыл бұрын
so can you direct us to somebody that does know what they are doing ?
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Is this in response to something in particular?
@edwardmacnab354
@edwardmacnab354 2 жыл бұрын
@@LowByteProductions yeah . The fact that you said you were by no means an expert and your demonstration of it's veracity. So does your reply mean you know of no expert source ?
@LowByteProductions
@LowByteProductions 2 жыл бұрын
Maybe this is a cultural thing but I am generally wary of calling myself an expert on anything. IMO it's fine to know that there is a lot of you don't know about something while still being able to talk about and share the things you do know. For example - I know that I know enough about this kind of reverse engineering to share it because, well, I've done it. In the next stream I'm going to be able to share even more, since I've learned some new interesting things since then. I get the feeling that your comments are intended in a hostile sense, but I'm honestly confused as to why. Aside from that comment, was there something else in the video that you took issue with?
@edwardmacnab354
@edwardmacnab354 2 жыл бұрын
@@LowByteProductions the question was blunt . I actually would like a deeper technical explanation . Also you referred to some blogger or something who , to the best of my listening power comes out as "White Quarks " but nothing like that in any search . Who are you referring to there ? Also I haven't quite finished your video but will. It is interesting , I just need to know if there is a supplementary source . Your competition , so to speak ?
@LowByteProductions
@LowByteProductions 2 жыл бұрын
In that case no worries. I honestly wouldn't consider myself competition to anyone in this domain! You heard almost correctly - the person in question here is whitequark (on twitter/github etc). If you're really looking to get into it, you can check out Jan Axelson's book "USB Complete". An even longer video, but by a much smarter guy is Marcan's video on getting a MIDI input to work on linux: kzfaq.info/get/bejne/mbuGqLdzrZuVd40.html Obviously there is the spec itself, which is definitely approachable, but kind of annoying for learning purposes because you need to have multiple PDFs open at once, and you're constantly jumping around in them. I would also look at some of the presentations online by Kate Temkin. Shes done a ton of work on the physical side of USB introspection and reverse engineering. Up until quite recently she was writing and maintaining a lot of the USB tooling, as well as working on hardware like Luna and the GreatFET that can allow you to do things like device AND host spoofing (for when the thing you plug your device into isn't actually a computer you control). For the rest you can get a lot of just spending time poking devices and seeing what they spit out, getting familiar with things like lsusb so that you can get to grips with what a device is reporting that it can do, and even reading open source firmware for devices that have usb functionality. There are a lot of them out there, and a lot of chips these days have support (tons of the STM32s for example).
@Asdayasman
@Asdayasman 2 жыл бұрын
The reason us filthy gamers want a high polling rate is because of _latency_ not throughput. Nobody's pressing 1000 keys per second. No game engine is running the main loop 1000 times per second. When I press a key, I want it to be available to the game engine ideally instantly, so it's guaranteed to be registered for the very next game loop. With polling, you can't guarantee that. There's always going to be a point where the polling happens too late. That's why we still use PS/2. Interrupts are just better.
@JoseGustavoAbreuMurta
@JoseGustavoAbreuMurta 2 жыл бұрын
Do this With Golang! So easy
@angryman9333
@angryman9333 Жыл бұрын
Do it urself if its so easy
@JoseGustavoAbreuMurta
@JoseGustavoAbreuMurta 5 ай бұрын
@@angryman9333 I did!
@Gurpreegill1962
@Gurpreegill1962 16 күн бұрын
How? GoUsb?
@mattymattffs
@mattymattffs 2 жыл бұрын
WebUSB is for the browser, so I'm not sure how you would expect it to work when not running through the browser. Admittedly I would never use node for a project like this, so I can't comment on how it interfaces with those bits.
@LowByteProductions
@LowByteProductions 2 жыл бұрын
WebUSB is a standard, which while intended for browsers , doesn't actually include anything that would stop it being implemented in other environments.
@danmorris4904
@danmorris4904 2 жыл бұрын
I agree
@platin2148
@platin2148 6 ай бұрын
I don’t see a reason why you would make yourself miserable and code such drivers with web api’s.
@Nick-ui9dr
@Nick-ui9dr 5 ай бұрын
And me jus writing all this for what I am trying to understand since me no professional computer guy u see jus a normal ameteur or curious guy. Dont worry I will just delete all these comments in the end. I was guessing whose knows u might be online so wud correct my errors why I am writing these. Cause for my purpose I wanna give a lil real try. If I couldn't handle it I will leave that... this computer thing dont buy me my butter and bread... smile But I have free time so lets give it a try... maybe.. I wud get something done for my problem. Or say hobby thing.... aur mera toh english ka bhi problem hai bhai ...why I have to edit those comments u c. 😂
@Yan-qf1mq
@Yan-qf1mq 2 жыл бұрын
? ???????
@LowByteProductions
@LowByteProductions 2 жыл бұрын
??????? ?
@projectnemesi5950
@projectnemesi5950 5 ай бұрын
node js is horrible
@y_x2
@y_x2 6 ай бұрын
You should read the standard to prepare some explanation before doing any video...
2 жыл бұрын
Thank you for sharing.
How does a USB keyboard work?
34:15
Ben Eater
Рет қаралды 3,2 МЛН
What is the Smallest Possible .EXE?
17:57
Inkbox
Рет қаралды 224 М.
HOW DID HE WIN? 😱
00:33
Topper Guild
Рет қаралды 36 МЛН
Khó thế mà cũng làm được || How did the police do that? #shorts
01:00
How Do Linux Kernel Drivers Work? - Learning Resource
17:02
LiveOverflow
Рет қаралды 538 М.
How A Steam Bug Deleted Someone’s Entire PC
11:49
Kevin Fang
Рет қаралды 917 М.
Factorio teaches you software engineering, seriously.
21:27
Tony Zhu
Рет қаралды 1,4 МЛН
The Man Who Solved the World’s Hardest Math Problem
11:14
Newsthink
Рет қаралды 508 М.
Dear Game Developers, Stop Messing This Up!
22:19
Jonas Tyroller
Рет қаралды 690 М.
Making another pickproof lock (but better)
15:14
Works By Design
Рет қаралды 3 МЛН
Why Isn't Functional Programming the Norm? - Richard Feldman
46:09
[stream] More USB Reverse Engineering + Drivers
2:49:56
Low Byte Productions
Рет қаралды 8 М.
Reverse Engineering a USB Device (Element14)
19:50
Amy Worrall
Рет қаралды 6 М.