The program continues to open advertisements, and there’s no easy way to stop it. It’s not in a process listing, so we can’t stop it by killing the process. Nor can we attach a debugger to the process because the program doesn’t show up in the process listing for WinDbg or OllyDbg. At this point, our only , because the input and output parameters passed as arguments to it will be sent to the kernel code, which we will need to analyze separately.
IoCreateDevice
at ❶ to create a device named \Device\ProcHelper
at ❷.IoCreateSymbolicLink
at ❶ to create a symbolic link named \DosDevices\ProcHelper
at ❷ for the user-space program to access.!devobj
tells us where the DriverObject
at ❶ is stored.DeviceIoControl
.EPROCESS
structure of the process in front of it and behind it in the linked list of processes. These six instructions hide the current process by unlinking it from the linked list of loaded processes, as shown in .You might wonder how this process continues to run without any problems, even though it’s not in the OS’s list of processes. To answer this, remember that a process is simply a container for various threads to run inside. The threads are scheduled to execute on the CPU. As long as the threads are still properly accounted for by the OS, they will be scheduled, and the process will continue to run as normal.