System Programming Blog
2023-02-07 09:31:00
This blog is dedicated to low level programming in Assembler and C/C++ (although, C++ is unwelcome) in either *Nix or Windows based operating systems.
December 8, 2011
In this article I will cover the easiest way to hide your injected library from the "victim"
process. Intentionally or not, but we will have to dive a bit into Windows internals starting with the TIB (Thread
Information Block) and ending with good old UNICODE_STRING data structure.
November 26, 2011
In this article I am going to cover such a trivial (as it may seem) subject as DLL
injection. For some reason, most of the tutorials on the web only give us a brief coverage of the topic,
mostly limited to invocation of LoadLibraryA/W Windows API function in the address space of another
process. While this is not bad at all, it gives us the least flexible solution. Meaning that all the logic
MUST be hardcoded in the DLL we want to inject. On the other hand, we may incorporate all the configuration
management (loading config files, parsing thereof, etc) into our DLL. This is better, but still fills it
with code which is only going to run once.
October 13, 2011
This is the last part of the Hijack Linux System Calls series. By now, we have created a simple loadable kernel module which registers a miscellaneous character device. This means, that we have everything we need in order to patch the system call table. Almost everything, to be honest. We still have to fill the
our_ioctl
function and add a couple of declarations to our source file. By the end of this article we will be able to intercept any system call in our system should there be a need for that.October 12, 2011
We all know what device drivers are - the hands of the operating system that make it possible for the kernel to handle hardware. We also know that there are two types of devices - character and block, depending on the way they handle data transmissions, but what does "miscellaneous" device mean? To put it simple - it means what it means. On one hand, this may be a driver that handles simple hardware, on the other hand, it is the way Linux allows us to create virtual devices, as one of the ways to communicate with kernel modules, which is exactly what we need in order to hijack Linux System Calls.
October 12, 2011
There are hundreds, if not thousands, of posts regarding this problem. Most of them are outdated, as they refer to older kernels (those, that still exported sys_call_table), others are about adding custom system call and recompiling the kernel. There are a few covering modern kernels, but those are brief and, mostly, only give you a general idea of how it works. I decided to make an in-depth description of the procedure and provide a working example.