I have read that you can hide processes from the task manager, example here
I've seen a few posts on hidden keyloggers using rootkit but that's it really.
Is there a tool or way to look at processes being run even though they have been hidden?
This really depends on how the process is hidden. If certain Windows API functions are hooked, then process managers using those functions will not see the process. So it's dependent on the particular piece of software trying to hide as well as the monitoring software trying to find it. Regardless of which monitoring program you use you're not guaranteed to find all processes running. That being said there are a couple of good tools out there.
SysInternals Suite has multiple different monitoring programs. Process Explorer is very nice from a GUI perspective. It also links into VirusTotal to let you know if any currently running processes it sees is known to be malicious. Procmon is awesome for process monitoring. It bases its output off of Windows API file/registry/network function calls. The downside is that the output is massive, and you generally have to know what you're looking for. But if a hidden process is accessing the registry, files, or communicating over the network it would be shown here.
There's an open source monitor called YaProcmon (Yet Another Process Monitor) that has a feature that specifically looks for process hiding mechanisms, and attempts to expose them.
Sysinternals process explorer is your friend. This will show you more information than you're used to from Task Manager, including invisible tasks.
I know of a Process, A Game Really that hides itself from any processes that are not x2.exe which is kinda hard as then any processes trying to detect if it is running Via the .NET Framework via image name does not work nor even FindWindow when it takes a minute or two for it to actually "have" a Window. Which makes Image Name Detection the only way, but the issue is bypassing that hiding on a kernel level or something.
So, Long Story short there are methods of hiding your process from things like the Sysinternals tools but not for the Windows Task Manager, the trick is to find a API that bypasses it on a more "kernel" level.
The answer is via Volatility.
Process Explorer can only see/find the processes that are in the process list which is a doubly linked list sitting somewhere in memory. Process Explorer knows the location of the first node (or has a pointer to one of the nodes) and from that node, it iterates through the list and finds the "not hidden" processes.
Task scheduler doesn't use this list to schedule tasks, instead it uses another list (it should be thread list).
However, when a process hides itself, it simply removes its links to previous and next node and remain in the memory
hidden. Since it just removes itself from the process list and not thread list, it will continue running without being visible.
Each process has a specific class structure like a simple
c class with many parameters.
Volatility searches through whole memory and finds
process class structures in the memory as well as the doubly linked list (which is the list of processes).
So the output is all the processes in the memory including
Note that I was looking for an easier program for hidden processes but since I couldn't see volatility in the answer, I felt I was bound to answer.