HoneyClient::Agent::Integrity::Registry::Parser - Perl extension to parse


HoneyClient-Agent documentation  | view source Contained in the HoneyClient-Agent distribution.

Index


NAME

Top

HoneyClient::Agent::Integrity::Registry::Parser - Perl extension to parse static hive dumps of the Windows OS registry.

VERSION

Top

This documentation refers to HoneyClient::Agent::Integrity::Registry::Parser version 0.98.

SYNOPSIS

Top

  use HoneyClient::Agent::Integrity::Registry::Parser;
  use IO::File;
  use Data::Dumper;

  # Initialize the parser object.
  my $parser = HoneyClient::Agent::Integrity::Registry::Parser->init(
                   input_file => "dump.reg",
               );

  # Print each registry group found, until there are no more left.
  my $registryGroup = $parser->nextGroup();
  while(scalar(keys(%{$registryGroup}))) {
      print Dumper($registryGroup);
      $registryGroup = $parser->nextGroup();
  }

  # $registryGroup refers to hashtable reference, which has the
  # following format:
  #
  # $registryGroup = {
  #     # The registry directory name.
  #     'key' => 'HKEY_LOCAL_MACHINE\Software...',
  #
  #     # An array containing the list of entries within the
  #     # registry directory.
  #     'entries'  => [ {
  #         'name' => "\"string\"",  # A (potentially) quoted string; 
  #                                  # "@" for default
  #         'value' => "data",
  #     }, ],
  # };

DESCRIPTION

Top

This library allows the Registry module to easily parse and enumerate each Windows OS registry hive.

METHODS IMPLEMENTED

Top

The following functions have been implemented by any Parser object.

HoneyClient::Agent::Integrity::Registry::Parser->init(input_file => $filename, index_groups => $perform_index, show_progress => $progress)

Creates a new Parser object, using the specified input file as its data source.

Inputs:$filename is an required parameter, specifying the file to open for parsing.$perform_index is an optional parameter. 1 specifies that the parser should go ahead and scan the entire file, indexing the file offsets of where groups start and end. Otherwise, this indexing process is not performed.$progress is an optional parameter. 1 specifies that the parser should display a progress bar, as it scans through a specified file. Otherwise, a progress bar is not displayed.

Output: The instantiated Parser $object, fully initialized.

$object->nextGroup()

Provides the next registry group, in the form of a hashtable reference. This hashtable has the following format:

  {
      # The registry directory name.
      'key' => 'HKEY_LOCAL_MACHINE\Software...',

      # An array containing the list of entries within the
      # registry directory.
      'entries'  => [ {
          'name' => "\"string\"",  # A (potentially) quoted string; 
                                   # "@" for default
          'value' => "data",
      }, ],
  };

Output: A hashtable reference if the next group was parsed successfully; returns an empty hash ref, if the Parser $object has reached the end of the input stream.

$object->dirsParsed()

Indicates how many registry directories the Parser $object has parsed within the specified file, so far.

Output: Returns the number of directory groups parsed so far; returns 0, if none parsed yet.

$object->entriesParsed()

Indicates how many registry key/value pairs the Parser $object has parsed within the specified file, so far.

Output: Returns the number of key/value pairs parsed so far; returns 0, if none parsed yet.

$object->getFileHandle()

Returns the file handle associated with the current Parser $object.

Output: Returns the file handle in use.

$object->getFilename()

Returns the file name associated with the current Parser $object.

Output: Returns the file name in use.

$object->closeFileHandle()

Closes the file handle associated with the current Parser $object.

$object->getCurrentLineCount()

Returns the number of lines parsed by the Parser $object within the specified file and resets the counter back to zero.

Output: Returns the current line count of the parser.

Note: Calling this function will reset the parser's line count.

$object->seekToNearestGroup(absolute_offset => $offset, absolute_linenum => $linenum, adjust_index => $index)

Given an absolute offset or line number within the file, this function will seek the parser to the nearest group found before the specified offset.

Inputs:$offset is an required parameter, specifying the absolute offset within the file to seek to.$linenum is a required parameter, specifying the absolute line number within the file to seek to.$index is an optional parameter, specifying to seek to a group before or after the target group. If unspecified, $index = 0.

Outputs: None.

Notes: Either $offset or $linnum must be specified. To seek to the target group, specify $index = 0 or leave undefined. To seek to the previous group before the target group, specify $index = -1. To seek to the next group after the target group, specify $index = 1.

Once called, all corresponding statistical counters will be reset. This means, that the output from $object->dirsParsed() and $object->entriesParsed() will be zero, if called immediately after this function.

BUGS & ASSUMPTIONS

Top

The Parser $object expects to scan the specified file as an input stream. Subsequent calls to $object->nextGroup() will advance the parser through the input stream.

SEE ALSO

Top

http://www.honeyclient.org/trac

REPORTING BUGS

Top

http://www.honeyclient.org/trac/newticket

ACKNOWLEDGEMENTS

Top

Francois Desarmenien <francois@fdesar.net> for his work in developing the Parse::Yapp module.

AUTHORS

Top

Darien Kindlund, <kindlund@mitre.org>

COPYRIGHT & LICENSE

Top


HoneyClient-Agent documentation  | view source Contained in the HoneyClient-Agent distribution.