Windows Volshell

Find the pooltag of a process #

Enter volshell for your selected pid, then put the current context to your pid:

				
					vol.py -f  memdump.mem --profile=yourprofile volshell
cc(pid=[pid])
				
			

when you use the cc(pid=pid) command, volshell will display the address, which we need to access the Pooltag. The pooltag is located at the address – 96:

				
					dt("_POOL_HEADER", [address]-0x60)
				
			

Here is an example of what the output could be:

The value we want is the ‘Pooltag’, but we need to swap the endianess to actually read it properly. So we can do the following inside volshell. I am using the value of the example above:

				
					res = hex(1280133197)[2:].decode('hex')[::-1]
				
			

Find the physical address of PoolTag #

If you the process is unlinked, then you need to provide the address of the process:

				
					hidden_address = #process_address

dt("_POOL_HEADER", hidden_address, space=addrspace().base)
pool_header_address = 0x4 + #_POOL_HEADER address returned


				
			

Convert virtual to physical address #

Enter volshell for your selected pid, then put the current context to your pid:

				
					vol.py -f  memdump.mem --profile=yourprofile volshell

virtual = #yourvirtaladdress
physical = hex(addrspace().vtop(virtual))[:-1]

				
			
Updated on 18th May 2023