Skip to content
This repository was archived by the owner on Oct 18, 2020. It is now read-only.

Commit 43960e2

Browse files
committed
Added a times plugin.
Review URL: https://codereview.appspot.com/297430043 .
1 parent 00a1409 commit 43960e2

File tree

3 files changed

+52
-4
lines changed

3 files changed

+52
-4
lines changed

rekall-core/rekall/plugins/overlays/windows/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@ def base(self):
620620
@utils.safe_property
621621
def filename(self):
622622
object_tree_plugin = self.obj_session.plugins.object_tree()
623-
return object_tree_plugin.FileNameWithDrive(self.FullDllName.v())
623+
return object_tree_plugin.FileNameWithDrive(unicode(self.FullDllName))
624624

625625
@utils.safe_property
626626
def end(self):
@@ -655,7 +655,7 @@ def v(self, vm=None):
655655
vm=vm)
656656
return data.v()
657657
else:
658-
return ''
658+
return u''
659659

660660
def __nonzero__(self):
661661
## Unicode strings are valid if they point at a valid memory

rekall-core/rekall/plugins/renderers/base_objects.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,3 +325,27 @@ def render_compact(self, target, **_):
325325
def render_repr(self, target, **_):
326326
"""Explicitly just render the repr."""
327327
return text.Cell(repr(target))
328+
329+
330+
class AttributeDictTextRenderer(text.TextObjectRenderer):
331+
renders_type = "dict"
332+
renderers = ["TextRenderer", "TestRenderer"]
333+
334+
def __init__(self, *args, **kwargs):
335+
"""We make a sub table for key, values."""
336+
super(AttributeDictTextRenderer, self).__init__(*args, **kwargs)
337+
self.table = text.TextTable(
338+
columns=[
339+
dict(name="Key"),
340+
dict(name="Value"),
341+
],
342+
auto_widths=True,
343+
renderer=self.renderer,
344+
session=self.session)
345+
346+
def render_row(self, item, **options):
347+
result = []
348+
for key, value in item.iteritems():
349+
result.append(self.table.get_row(key, value))
350+
351+
return text.StackedCell(*result)

rekall-core/rekall/plugins/windows/misc.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
"""Miscelaneous information gathering plugins."""
1919

2020
__author__ = "Michael Cohen <[email protected]>"
21-
2221
import hashlib
2322
import re
2423

2524
# pylint: disable=protected-access
2625
from rekall import obj
2726
from rekall import utils
2827
from rekall.plugins import core
28+
from rekall.plugins.overlays import basic
2929
from rekall.plugins.windows import common
3030

3131

@@ -337,7 +337,6 @@ def FileNameWithDrive(self, path):
337337
# First normalize the path.
338338
try:
339339
path = self.ResolveSymlinks(path)
340-
341340
for prefix, drive_letter in self.session.GetParameter(
342341
"drive_letter_device_map").iteritems():
343342
prefix = self.ResolveSymlinks(prefix)
@@ -431,3 +430,28 @@ def render(self, renderer):
431430

432431
seen = set()
433432
self._render_directory(root, renderer, seen)
433+
434+
435+
class WindowsTimes(common.WindowsCommandPlugin):
436+
"""Return current time, as known to the kernel."""
437+
438+
name = "times"
439+
440+
table_header = [
441+
dict(name="Times"),
442+
]
443+
444+
def collect(self):
445+
kuser_shared = self.session.address_resolver.get_constant_object(
446+
"nt!KI_USER_SHARED_DATA", "_KUSER_SHARED_DATA")
447+
448+
seconds_since_boot = self.session.plugins.imageinfo().GetBootTime(
449+
kuser_shared)
450+
451+
kernel_time = kuser_shared.SystemTime
452+
boot_timestamp = basic.UnixTimeStamp(
453+
value=kernel_time - seconds_since_boot,
454+
session=self.session)
455+
456+
yield [utils.AttributeDict(now=kernel_time, boot=boot_timestamp,
457+
uptime=seconds_since_boot)]

0 commit comments

Comments
 (0)