Files
volatilityfoundation-volati…/volatility/plugins/gui/desktops.py
T

74 lines
3.2 KiB
Python

# Volatility
# Copyright (C) 2007,2008 Volatile Systems
# Copyright (C) 2010,2011,2012 Michael Hale Ligh <michael.ligh@mnin.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
import volatility.plugins.gui.windowstations as windowstations
class DeskScan(windowstations.WndScan):
"""Poolscaner for tagDESKTOP (desktops)"""
def render_text(self, outfd, data):
seen = []
for window_station in data:
for desktop in window_station.desktops():
offset = desktop.PhysicalAddress
if offset in seen:
continue
seen.append(offset)
outfd.write("*" * 50 + "\n")
outfd.write("Desktop: {0:#x}, Name: {1}\\{2}, Next: {3:#x}\n".format(
offset,
desktop.WindowStation.Name,
desktop.Name,
desktop.rpdeskNext.v(),
))
outfd.write("SessionId: {0}, DesktopInfo: {1:#x}, fsHooks: {2}\n".format(
desktop.dwSessionId,
desktop.pDeskInfo.v(),
desktop.DeskInfo.fsHooks,
))
outfd.write("spwnd: {0:#x}, Windows: {1}\n".format(
desktop.DeskInfo.spwnd,
len(list(desktop.windows(desktop.DeskInfo.spwnd)))
))
outfd.write("Heap: {0:#x}, Size: {1:#x}, Base: {2:#x}, Limit: {3:#x}\n".format(
desktop.pheapDesktop.v(),
desktop.DeskInfo.pvDesktopLimit - desktop.DeskInfo.pvDesktopBase,
desktop.DeskInfo.pvDesktopBase,
desktop.DeskInfo.pvDesktopLimit,
))
## This is disabled until we bring in the heaps plugin
#if self._config.VERBOSE:
# granularity = desktop.obj_vm.profile.get_obj_size("_HEAP_ENTRY")
# for entry in desktop.heaps():
# outfd.write(" Alloc: {0:#x}, Size: {1:#x} Previous: {2:#x}\n".format(
# entry.obj_offset + granularity,
# entry.Size, entry.PreviousSize,
# ))
for thrd in desktop.threads():
outfd.write(" {0} ({1} {2} parent {3})\n".format(
thrd.pEThread.Cid.UniqueThread,
thrd.ppi.Process.ImageFileName,
thrd.ppi.Process.UniqueProcessId,
thrd.ppi.Process.InheritedFromUniqueProcessId,
))