forked from google/rekall
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Updated the profile repository maintainance tool:
- It is now its own plugin - this way it can be built with the rest of Rekall. - A new repository config file allows customization of profile manipulation through plugins. - Added Profile Loaders to customize how various profile sections are handled. New profile loaders introduced: $MERGE - tells Rekall to merge in another profile into this profile at runtime. $DYNAMIC_CONSTANTS - tells Rekall to load some constants as dynamic constants - if the constants are not defined in the profile, they will be automatically calculated using a sequence of detectors. A new detector is DisassembleConstantMatcher which will extract the value of a constant using a disassembler template. Currently implemented using OSX _llinfo_arp as an example: $DYNAMIC_CONSTANTS: _llinfo_arp: - type: DisassembleConstantMatcher args: start: __kernel__!_arp_init base: __kernel__ rules: [ # mov qword ptr [rip + 0x40e948], 0 {'mnemonic': 'MOV', 'operands': [ {'scale': 1, 'address': $out, 'base': 'RIP', 'type': 'MEM'}, {'type': 'IMM', 'target': 0, 'size': 8}], } ] - Added $DYNAMIC_STRUCT handler which can build structs based on disassembly patterns. Added several signatures for _IMAGE_IN_SESSION (win7, 8, 10). - Fixed ipython inspector to report current doc strings and args from introspection - we no longer use the help profile. R=parki.san@gmail.com Review URL: https://codereview.appspot.com/279410043 .
- Loading branch information
Showing
43 changed files
with
1,240 additions
and
306 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
# Rekall Memory Forensics | ||
# Copyright 2013 Google Inc. All Rights Reserved. | ||
# | ||
# Author: Michael Cohen scudette@google.com | ||
# | ||
# 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 gzip | ||
import os | ||
|
||
from rekall import constants | ||
from rekall import io_manager | ||
from rekall import testlib | ||
|
||
|
||
class IOManagerTest(testlib.RekallBaseUnitTestCase): | ||
"""Test the IO Manager.""" | ||
|
||
DATA = { | ||
"foo.gz": "hello", | ||
"bar": "goodbye" | ||
} | ||
|
||
def setUp(self): | ||
super(IOManagerTest, self).setUp() | ||
|
||
# Create a new repository in the temp directory. | ||
self.version = constants.PROFILE_REPOSITORY_VERSION | ||
for filename, data in self.DATA.iteritems(): | ||
path = os.path.join(self.temp_directory, self.version, | ||
filename) | ||
|
||
if path.endswith("gz"): | ||
opener = gzip.open | ||
else: | ||
opener = open | ||
|
||
try: | ||
os.makedirs(os.path.dirname(path)) | ||
except (OSError, IOError): | ||
pass | ||
|
||
with opener(path, "wb") as fd: | ||
|
||
fd.write(data) | ||
|
||
def testDirectoryIOManager(self): | ||
manager = io_manager.DirectoryIOManager( | ||
self.temp_directory, | ||
session=self.MakeUserSession()) | ||
|
||
# Cant decode from json. | ||
self.assertEqual(manager.GetData("foo"), None) | ||
self.assertEqual(manager.GetData("foo", raw=True), | ||
"hello") | ||
|
||
# Test ListFiles(). | ||
self.assertListEqual(list(manager.ListFiles()), | ||
["foo", "bar"]) | ||
|
||
# Storing a data structure. | ||
data = dict(a=1) | ||
manager.StoreData("baz", data) | ||
self.assertDictEqual(manager.GetData("baz"), | ||
data) | ||
|
||
self.assertTrue( | ||
isinstance(manager.GetData("baz", raw=True), basestring)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.