Keystroke Logging
Now let's look at a more interesting (but still somewhat trivial) example of a system call hook.
Keystroke logging is the simple act of intercepting and capturing a user's keystrokes. In FreeBSD, this can be accomplished by hooking the read
system call.[2] As its name implies, this call is responsible for reading in input. Here is its C library definition:
#include <sys/types.h> #include <sys/uio.h> #include <unistd.h> ssize_t read(int fd, void *buf, size_t nbytes);
The read
system call reads in nbytes
of data from the object referenced by the descriptor fd
into the buffer buf
. Therefore, in order to capture a user's keystrokes, you simply have to save the contents of buf
(before returning from a read
call) whenever fd
points ...
Get Designing BSD Rootkits now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.