2174 lines
77 KiB
HTML
2174 lines
77 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>
|
||
Class: Msf::Util::WindowsRegistry::RegistryParser
|
||
|
||
— Documentation by YARD 0.9.37
|
||
|
||
</title>
|
||
|
||
<link rel="stylesheet" href="../../../css/style.css" type="text/css" />
|
||
|
||
<link rel="stylesheet" href="../../../css/common.css" type="text/css" />
|
||
|
||
<script type="text/javascript">
|
||
pathId = "Msf::Util::WindowsRegistry::RegistryParser";
|
||
relpath = '../../../';
|
||
</script>
|
||
|
||
|
||
<script type="text/javascript" charset="utf-8" src="../../../js/jquery.js"></script>
|
||
|
||
<script type="text/javascript" charset="utf-8" src="../../../js/app.js"></script>
|
||
|
||
|
||
</head>
|
||
<body>
|
||
<div class="nav_wrap">
|
||
<iframe id="nav" src="../../../class_list.html?1"></iframe>
|
||
<div id="resizer"></div>
|
||
</div>
|
||
|
||
<div id="main" tabindex="-1">
|
||
<div id="header">
|
||
<div id="menu">
|
||
|
||
<a href="../../../_index.html">Index (R)</a> »
|
||
<span class='title'><span class='object_link'><a href="../../../Msf.html" title="Msf (module)">Msf</a></span></span> » <span class='title'><span class='object_link'><a href="../../Util.html" title="Msf::Util (module)">Util</a></span></span> » <span class='title'><span class='object_link'><a href="../WindowsRegistry.html" title="Msf::Util::WindowsRegistry (module)">WindowsRegistry</a></span></span>
|
||
»
|
||
<span class="title">RegistryParser</span>
|
||
|
||
</div>
|
||
|
||
<div id="search">
|
||
|
||
<a class="full_list_link" id="class_list_link"
|
||
href="../../../class_list.html">
|
||
|
||
<svg width="24" height="24">
|
||
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
||
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
||
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
||
</svg>
|
||
</a>
|
||
|
||
</div>
|
||
<div class="clear"></div>
|
||
</div>
|
||
|
||
<div id="content"><h1>Class: Msf::Util::WindowsRegistry::RegistryParser
|
||
|
||
|
||
|
||
</h1>
|
||
<div class="box_info">
|
||
|
||
<dl>
|
||
<dt>Inherits:</dt>
|
||
<dd>
|
||
<span class="inheritName">Object</span>
|
||
|
||
<ul class="fullTree">
|
||
<li>Object</li>
|
||
|
||
<li class="next">Msf::Util::WindowsRegistry::RegistryParser</li>
|
||
|
||
</ul>
|
||
<a href="#" class="inheritanceTree">show all</a>
|
||
|
||
</dd>
|
||
</dl>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<dl>
|
||
<dt>Defined in:</dt>
|
||
<dd>lib/msf/util/windows_registry/registry_parser.rb</dd>
|
||
</dl>
|
||
|
||
</div>
|
||
|
||
<h2>Overview</h2><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>This utility class processes binary Windows registry key. It is usually used when only offline processing is possible and [MS-RRP] BaseRegSaveKey() is used to save a registry key to a file.</p>
|
||
|
||
<p>It also includes helpers for specific registry keys (SAM, SECURITY) through the ‘name` key word argument during instantiation.</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div><h2>Defined Under Namespace</h2>
|
||
<p class="children">
|
||
|
||
|
||
|
||
|
||
<strong class="classes">Classes:</strong> <span class='object_link'><a href="RegistryParser/RegHash.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHash (class)">RegHash</a></span>, <span class='object_link'><a href="RegistryParser/RegHash2.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHash2 (class)">RegHash2</a></span>, <span class='object_link'><a href="RegistryParser/RegHbin.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbin (class)">RegHbin</a></span>, <span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span>, <span class='object_link'><a href="RegistryParser/RegLf.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegLf (class)">RegLf</a></span>, <span class='object_link'><a href="RegistryParser/RegLh.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegLh (class)">RegLh</a></span>, <span class='object_link'><a href="RegistryParser/RegNk.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegNk (class)">RegNk</a></span>, <span class='object_link'><a href="RegistryParser/RegRegf.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegRegf (class)">RegRegf</a></span>, <span class='object_link'><a href="RegistryParser/RegRi.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegRi (class)">RegRi</a></span>, <span class='object_link'><a href="RegistryParser/RegSk.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegSk (class)">RegSk</a></span>, <span class='object_link'><a href="RegistryParser/RegVk.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegVk (class)">RegVk</a></span>
|
||
|
||
|
||
</p>
|
||
|
||
|
||
<h2>
|
||
Constant Summary
|
||
<small><a href="#" class="constants_summary_toggle">collapse</a></small>
|
||
</h2>
|
||
|
||
<dl class="constants">
|
||
|
||
<dt id="ROOT_KEY-constant" class="">ROOT_KEY =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Constants</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x2c</span></pre></dd>
|
||
|
||
<dt id="REG_NONE-constant" class="">REG_NONE =
|
||
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x00</span></pre></dd>
|
||
|
||
<dt id="REG_SZ-constant" class="">REG_SZ =
|
||
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x01</span></pre></dd>
|
||
|
||
<dt id="REG_EXPAND_SZ-constant" class="">REG_EXPAND_SZ =
|
||
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x02</span></pre></dd>
|
||
|
||
<dt id="REG_BINARY-constant" class="">REG_BINARY =
|
||
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x03</span></pre></dd>
|
||
|
||
<dt id="REG_DWORD-constant" class="">REG_DWORD =
|
||
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x04</span></pre></dd>
|
||
|
||
<dt id="REG_MULTISZ-constant" class="">REG_MULTISZ =
|
||
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x07</span></pre></dd>
|
||
|
||
<dt id="REG_QWORD-constant" class="">REG_QWORD =
|
||
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x0b</span></pre></dd>
|
||
|
||
<dt id="REGF_MAGIC-constant" class="">REGF_MAGIC =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>REGF magic value: ‘regf’</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x72656766</span></pre></dd>
|
||
|
||
<dt id="NK_MAGIC-constant" class="">NK_MAGIC =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>NK magic value: ‘nk’</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x6E6B</span></pre></dd>
|
||
|
||
<dt id="VK_MAGIC-constant" class="">VK_MAGIC =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>VK magic value: ‘vk’</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x766B</span></pre></dd>
|
||
|
||
<dt id="LF_MAGIC-constant" class="">LF_MAGIC =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>LF magic value: ‘lf’</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x6C66</span></pre></dd>
|
||
|
||
<dt id="LH_MAGIC-constant" class="">LH_MAGIC =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>LH magic value: ‘lh’</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x6C68</span></pre></dd>
|
||
|
||
<dt id="RI_MAGIC-constant" class="">RI_MAGIC =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>RI magic value: ‘ri’</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x7269</span></pre></dd>
|
||
|
||
<dt id="SK_MAGIC-constant" class="">SK_MAGIC =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>SK magic value: ‘sk’</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x7269</span></pre></dd>
|
||
|
||
<dt id="HBIN_MAGIC-constant" class="">HBIN_MAGIC =
|
||
<div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>HBIN magic value: ‘hbin’</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
|
||
</div>
|
||
</dt>
|
||
<dd><pre class="code"><span class='int'>0x6862696E</span></pre></dd>
|
||
|
||
</dl>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<h2>
|
||
Instance Method Summary
|
||
<small><a href="#" class="summary_toggle">collapse</a></small>
|
||
</h2>
|
||
|
||
<ul class="summary">
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#enum_key-instance_method" title="#enum_key (instance method)">#<strong>enum_key</strong>(key) ⇒ Array </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Enumerate the subkey names under ‘key`.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#enum_values-instance_method" title="#enum_values (instance method)">#<strong>enum_values</strong>(key) ⇒ Array </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Enumerate the subkey values under ‘key`.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#find_key-instance_method" title="#find_key (instance method)">#<strong>find_key</strong>(key) ⇒ RegHbinBlock<sup>?</sup> </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Search for a given key from the ROOT key and returns it as a block.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#find_root_key-instance_method" title="#find_root_key (instance method)">#<strong>find_root_key</strong> ⇒ RegHbinBlock </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Returns the ROOT key as a block.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#find_sub_key-instance_method" title="#find_sub_key (instance method)">#<strong>find_sub_key</strong>(parent_key, sub_key) ⇒ RegHbinBlock<sup>?</sup> </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Search for a sub key from a given base key.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#get_block-instance_method" title="#get_block (instance method)">#<strong>get_block</strong>(offset) ⇒ RegHbinBlock </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Returns a registry block given its offset.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#get_data-instance_method" title="#get_data (instance method)">#<strong>get_data</strong>(offset, count) ⇒ String </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Returns the data at a given offset from the end of the header in the raw hive binary.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#get_lh_hash-instance_method" title="#get_lh_hash (instance method)">#<strong>get_lh_hash</strong>(key) ⇒ Integer </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Returns the hash of a LH subkey from <a href="http://www.sentinelchicken.com/data/TheWindowsNTRegistryFileFormat.pdf">www.sentinelchicken.com/data/TheWindowsNTRegistryFileFormat.pdf</a> (Appendix C).</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#get_offset-instance_method" title="#get_offset (instance method)">#<strong>get_offset</strong>(magic, hash_rec, key) ⇒ Integer </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Returns the offset of a given subkey in a hash record.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#get_value-instance_method" title="#get_value (instance method)">#<strong>get_value</strong>(reg_key, reg_value = nil) ⇒ Array </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Returns the type and the data of a given key/value pair.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#get_value_blocks-instance_method" title="#get_value_blocks (instance method)">#<strong>get_value_blocks</strong>(offset, count) ⇒ Array </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Returns a list of ‘count“value blocks from the offsets located at `offset`.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#get_value_data-instance_method" title="#get_value_data (instance method)">#<strong>get_value_data</strong>(record) ⇒ String </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>Returns the data of a VK record value.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
<li class="public ">
|
||
<span class="summary_signature">
|
||
|
||
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(hive_data, name: nil, root: nil) ⇒ RegistryParser </a>
|
||
|
||
|
||
|
||
</span>
|
||
|
||
|
||
<span class="note title constructor">constructor</span>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<span class="summary_desc"><div class='inline'>
|
||
<p>A new instance of RegistryParser.</p>
|
||
</div></span>
|
||
|
||
</li>
|
||
|
||
|
||
</ul>
|
||
|
||
|
||
<div id="constructor_details" class="method_details_list">
|
||
<h2>Constructor Details</h2>
|
||
|
||
<div class="method_details first">
|
||
<h3 class="signature first" id="initialize-instance_method">
|
||
|
||
#<strong>initialize</strong>(hive_data, name: nil, root: nil) ⇒ <tt><span class='object_link'><a href="" title="Msf::Util::WindowsRegistry::RegistryParser (class)">RegistryParser</a></span></tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns a new instance of RegistryParser.</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>hive_data</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The binary registry data</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<span class='name'>name</span>
|
||
|
||
|
||
<span class='type'>(<tt>Symbol</tt>)</span>
|
||
|
||
|
||
<em class="default">(defaults to: <tt>nil</tt>)</em>
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The key name to add specific helpers. Only ‘:sam`</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<span class='name'>root</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
<em class="default">(defaults to: <tt>nil</tt>)</em>
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The root key and subkey corresponding to the hive_data and ‘:security` are supported at the moment.</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
203
|
||
204
|
||
205
|
||
206
|
||
207
|
||
208
|
||
209
|
||
210
|
||
211
|
||
212
|
||
213
|
||
214
|
||
215
|
||
216
|
||
217
|
||
218
|
||
219</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 203</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_hive_data'>hive_data</span><span class='comma'>,</span> <span class='label'>name:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
|
||
<span class='ivar'>@hive_data</span> <span class='op'>=</span> <span class='id identifier rubyid_hive_data'>hive_data</span><span class='period'>.</span><span class='id identifier rubyid_b'>b</span>
|
||
<span class='ivar'>@regf</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="RegistryParser/RegRegf.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegRegf (class)">RegRegf</a></span></span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='ivar'>@hive_data</span><span class='rparen'>)</span>
|
||
<span class='ivar'>@root_key_block</span> <span class='op'>=</span> <span class='id identifier rubyid_find_root_key'>find_root_key</span>
|
||
<span class='ivar'>@root</span> <span class='op'>=</span> <span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span>
|
||
<span class='ivar'>@root</span> <span class='op'><<</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>\\</span><span class='tstring_end'>'</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_root'><span class='object_link'><a href="../../../top-level-namespace.html" title="Top Level Namespace (root)">root</a></span></span><span class='period'>.</span><span class='id identifier rubyid_end_with?'>end_with?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>\\</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
||
<span class='kw'>case</span> <span class='id identifier rubyid_name'>name</span>
|
||
<span class='kw'>when</span> <span class='symbol'>:sam</span>
|
||
<span class='id identifier rubyid_require_relative'>require_relative</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>sam</span><span class='tstring_end'>'</span></span>
|
||
<span class='id identifier rubyid_extend'>extend</span> <span class='const'><span class='object_link'><a href="Sam.html" title="Msf::Util::WindowsRegistry::Sam (module)">Sam</a></span></span>
|
||
<span class='kw'>when</span> <span class='symbol'>:security</span>
|
||
<span class='id identifier rubyid_require_relative'>require_relative</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>security</span><span class='tstring_end'>'</span></span>
|
||
<span class='id identifier rubyid_extend'>extend</span> <span class='const'><span class='object_link'><a href="Security.html" title="Msf::Util::WindowsRegistry::Security (module)">Security</a></span></span>
|
||
<span class='kw'>else</span>
|
||
<span class='id identifier rubyid_wlog'><span class='object_link'><a href="../../../top-level-namespace.html#wlog-instance_method" title="#wlog (method)">wlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>[Msf::Util::WindowsRegistry::RegistryParser] Unknown :name argument: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="instance_method_details" class="method_details_list">
|
||
<h2>Instance Method Details</h2>
|
||
|
||
|
||
<div class="method_details first">
|
||
<h3 class="signature first" id="enum_key-instance_method">
|
||
|
||
#<strong>enum_key</strong>(key) ⇒ <tt>Array</tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Enumerate the subkey names under ‘key`</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>key</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The parent key from which to enumerate</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>Array</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The key names</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
<p class="tag_title">Raises:</p>
|
||
<ul class="raise">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>ArgumentError</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>If the parent key is not a NK record</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
418
|
||
419
|
||
420
|
||
421
|
||
422
|
||
423
|
||
424
|
||
425
|
||
426
|
||
427
|
||
428
|
||
429
|
||
430
|
||
431
|
||
432
|
||
433
|
||
434
|
||
435
|
||
436
|
||
437
|
||
438
|
||
439
|
||
440
|
||
441</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 418</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_enum_key'>enum_key</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_parent_key'>parent_key</span> <span class='op'>=</span> <span class='id identifier rubyid_find_key'>find_key</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
||
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_parent_key'>parent_key</span>
|
||
|
||
<span class='kw'>unless</span> <span class='id identifier rubyid_parent_key'>parent_key</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='op'>&.</span><span class='id identifier rubyid_magic'>magic</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#NK_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::NK_MAGIC (constant)">NK_MAGIC</a></span></span>
|
||
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>enum_key: parent key must be a NK record</span><span class='tstring_end'>"</span></span>
|
||
<span class='kw'>end</span>
|
||
<span class='id identifier rubyid_block'>block</span> <span class='op'>=</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_parent_key'>parent_key</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_offset_sub_key_lf'>offset_sub_key_lf</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_records'>records</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_magic'>magic</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#RI_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::RI_MAGIC (constant)">RI_MAGIC</a></span></span>
|
||
<span class='comment'># ri points to lf/lh records, so we consolidate the hash records in the main records array
|
||
</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_hash_records'>hash_records</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash_record'>hash_record</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_record'>record</span> <span class='op'>=</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_hash_record'>hash_record</span><span class='period'>.</span><span class='id identifier rubyid_offset_nk'>offset_nk</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_concat'>concat</span><span class='lparen'>(</span><span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_hash_records'>hash_records</span><span class='rparen'>)</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>else</span>
|
||
<span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_concat'>concat</span><span class='lparen'>(</span><span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_hash_records'>hash_records</span><span class='rparen'>)</span>
|
||
<span class='kw'>end</span>
|
||
|
||
<span class='id identifier rubyid_records'>records</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_reg_hash'>reg_hash</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_nk'>nk</span> <span class='op'>=</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_reg_hash'>reg_hash</span><span class='period'>.</span><span class='id identifier rubyid_offset_nk'>offset_nk</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_nk'>nk</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_key_name'>key_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_b'>b</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="enum_values-instance_method">
|
||
|
||
#<strong>enum_values</strong>(key) ⇒ <tt>Array</tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Enumerate the subkey values under ‘key`</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>key</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The parent key from which to enumerate</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>Array</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The key values</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
<p class="tag_title">Raises:</p>
|
||
<ul class="raise">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>ArgumentError</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>If the parent key is not a NK record</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
448
|
||
449
|
||
450
|
||
451
|
||
452
|
||
453
|
||
454
|
||
455
|
||
456
|
||
457
|
||
458
|
||
459
|
||
460
|
||
461
|
||
462</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 448</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_enum_values'>enum_values</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_key_obj'>key_obj</span> <span class='op'>=</span> <span class='id identifier rubyid_find_key'>find_key</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
||
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_key_obj'>key_obj</span>
|
||
|
||
<span class='kw'>unless</span> <span class='id identifier rubyid_key_obj'>key_obj</span><span class='op'>&.</span><span class='id identifier rubyid_data'>data</span><span class='op'>&.</span><span class='id identifier rubyid_magic'>magic</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#NK_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::NK_MAGIC (constant)">NK_MAGIC</a></span></span>
|
||
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>enum_values: key must be a NK record</span><span class='tstring_end'>"</span></span>
|
||
<span class='kw'>end</span>
|
||
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
||
<span class='id identifier rubyid_value_list'>value_list</span> <span class='op'>=</span> <span class='id identifier rubyid_get_value_blocks'>get_value_blocks</span><span class='lparen'>(</span><span class='id identifier rubyid_key_obj'>key_obj</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_offset_value_list'>offset_value_list</span><span class='comma'>,</span> <span class='id identifier rubyid_key_obj'>key_obj</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_num_values'>num_values</span> <span class='op'>+</span> <span class='int'>1</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_value_list'>value_list</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
|
||
<span class='comment'># TODO: use #to_s to make sure value.data.name is a String
|
||
</span> <span class='id identifier rubyid_res'>res</span> <span class='op'><<</span> <span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_flag'>flag</span> <span class='op'>></span> <span class='int'>0</span> <span class='op'>?</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
|
||
<span class='kw'>end</span>
|
||
<span class='id identifier rubyid_res'>res</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="find_key-instance_method">
|
||
|
||
#<strong>find_key</strong>(key) ⇒ <tt><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></tt><sup>?</sup>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Search for a given key from the ROOT key and returns it as a block</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>key</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The registry key to look for</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></tt>, <tt>nil</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The key, if found, nil otherwise</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
268
|
||
269
|
||
270
|
||
271
|
||
272
|
||
273
|
||
274
|
||
275
|
||
276
|
||
277
|
||
278
|
||
279
|
||
280
|
||
281
|
||
282</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 268</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_find_key'>find_key</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
||
<span class='comment'># Let's strip '\' from the beginning, except for the case of
|
||
</span> <span class='comment'># only asking for the root node
|
||
</span> <span class='id identifier rubyid_key'>key</span> <span class='op'>=</span> <span class='id identifier rubyid_key'>key</span><span class='lbracket'>[</span><span class='int'>1</span><span class='op'>..</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_key'>key</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>\\</span><span class='tstring_end'>'</span></span> <span class='op'>&&</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>1</span>
|
||
|
||
<span class='id identifier rubyid_parent_key'>parent_key</span> <span class='op'>=</span> <span class='ivar'>@root_key_block</span>
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>></span> <span class='int'>0</span> <span class='op'>&&</span> <span class='id identifier rubyid_key'>key</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>!=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>\\</span><span class='tstring_end'>'</span></span>
|
||
<span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>\\</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_sub_key'>sub_key</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_find_sub_key'>find_sub_key</span><span class='lparen'>(</span><span class='id identifier rubyid_parent_key'>parent_key</span><span class='comma'>,</span> <span class='id identifier rubyid_sub_key'>sub_key</span><span class='rparen'>)</span>
|
||
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_res'>res</span>
|
||
<span class='id identifier rubyid_parent_key'>parent_key</span> <span class='op'>=</span> <span class='id identifier rubyid_res'>res</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span>
|
||
<span class='id identifier rubyid_parent_key'>parent_key</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="find_root_key-instance_method">
|
||
|
||
#<strong>find_root_key</strong> ⇒ <tt><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns the ROOT key as a block</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The ROOT key block</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
<p class="tag_title">Raises:</p>
|
||
<ul class="raise">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>StandardError</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>If an error occurs during parsing or if the ROOT key is not found</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
226
|
||
227
|
||
228
|
||
229
|
||
230
|
||
231
|
||
232
|
||
233
|
||
234
|
||
235
|
||
236
|
||
237
|
||
238
|
||
239
|
||
240</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 226</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_find_root_key'>find_root_key</span>
|
||
<span class='id identifier rubyid_reg_hbin'>reg_hbin</span> <span class='op'>=</span> <span class='kw'>nil</span>
|
||
<span class='comment'># Split the data in 4096-bytes blocks
|
||
</span> <span class='ivar'>@hive_data</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>a4096</span><span class='tstring_end'>'</span></span> <span class='op'>*</span> <span class='lparen'>(</span><span class='ivar'>@hive_data</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>/</span> <span class='int'>4096</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_data'>data</span><span class='op'>|</span>
|
||
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='int'>0</span><span class='comma'>,</span><span class='int'>4</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>hbin</span><span class='tstring_end'>'</span></span>
|
||
<span class='id identifier rubyid_reg_hbin'>reg_hbin</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="RegistryParser/RegHbin.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbin (class)">RegHbin</a></span></span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_root_key_block'>root_key_block</span> <span class='op'>=</span> <span class='id identifier rubyid_reg_hbin'>reg_hbin</span><span class='period'>.</span><span class='id identifier rubyid_reg_hbin_blocks'>reg_hbin_blocks</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_block'>block</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:magic</span><span class='rparen'>)</span> <span class='op'>&&</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_magic'>magic</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#NK_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::NK_MAGIC (constant)">NK_MAGIC</a></span></span> <span class='op'>&&</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_nk_type'>nk_type</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#ROOT_KEY-constant" title="Msf::Util::WindowsRegistry::RegistryParser::ROOT_KEY (constant)">ROOT_KEY</a></span></span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>return</span> <span class='id identifier rubyid_root_key_block'>root_key_block</span> <span class='kw'>if</span> <span class='id identifier rubyid_root_key_block'>root_key_block</span>
|
||
<span class='kw'>rescue</span> <span class='const'>IOError</span>
|
||
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>StandardError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Cannot parse the RegHbin structure</span><span class='tstring_end'>'</span></span>
|
||
<span class='kw'>end</span>
|
||
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>StandardError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Cannot find the RootKey</span><span class='tstring_end'>'</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_reg_hbin'>reg_hbin</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="find_sub_key-instance_method">
|
||
|
||
#<strong>find_sub_key</strong>(parent_key, sub_key) ⇒ <tt><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></tt><sup>?</sup>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Search for a sub key from a given base key</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>parent_key</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The base key</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<span class='name'>sub_key</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The sub key to look for under parent_key</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></tt>, <tt>nil</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The key, if found, nil otherwise</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
<p class="tag_title">Raises:</p>
|
||
<ul class="raise">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>ArgumentError</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>If the parent key is not a NK record</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
290
|
||
291
|
||
292
|
||
293
|
||
294
|
||
295
|
||
296
|
||
297
|
||
298
|
||
299
|
||
300
|
||
301
|
||
302
|
||
303
|
||
304
|
||
305
|
||
306
|
||
307
|
||
308
|
||
309
|
||
310
|
||
311
|
||
312
|
||
313
|
||
314
|
||
315
|
||
316
|
||
317</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 290</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_find_sub_key'>find_sub_key</span><span class='lparen'>(</span><span class='id identifier rubyid_parent_key'>parent_key</span><span class='comma'>,</span> <span class='id identifier rubyid_sub_key'>sub_key</span><span class='rparen'>)</span>
|
||
<span class='kw'>unless</span> <span class='id identifier rubyid_parent_key'>parent_key</span><span class='op'>&.</span><span class='id identifier rubyid_data'>data</span><span class='op'>&.</span><span class='id identifier rubyid_magic'>magic</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#NK_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::NK_MAGIC (constant)">NK_MAGIC</a></span></span>
|
||
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>find_sub_key: parent key must be a NK record</span><span class='tstring_end'>"</span></span>
|
||
<span class='kw'>end</span>
|
||
<span class='id identifier rubyid_block'>block</span> <span class='op'>=</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_parent_key'>parent_key</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_offset_sub_key_lf'>offset_sub_key_lf</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_blocks'>blocks</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_magic'>magic</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#RI_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::RI_MAGIC (constant)">RI_MAGIC</a></span></span>
|
||
<span class='comment'># ri points to lf/lh records, so we consolidate them in the main blocks array
|
||
</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_hash_records'>hash_records</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash_record'>hash_record</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_blocks'>blocks</span> <span class='op'><<</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_hash_record'>hash_record</span><span class='period'>.</span><span class='id identifier rubyid_offset_nk'>offset_nk</span><span class='rparen'>)</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>else</span>
|
||
<span class='id identifier rubyid_blocks'>blocks</span> <span class='op'><<</span> <span class='id identifier rubyid_block'>block</span>
|
||
<span class='kw'>end</span>
|
||
|
||
<span class='comment'># Let's search the hash records for the name
|
||
</span> <span class='id identifier rubyid_blocks'>blocks</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_block'>block</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_hash_records'>hash_records</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash_record'>hash_record</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_get_offset'>get_offset</span><span class='lparen'>(</span><span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_magic'>magic</span><span class='comma'>,</span> <span class='id identifier rubyid_hash_record'>hash_record</span><span class='comma'>,</span> <span class='id identifier rubyid_sub_key'>sub_key</span><span class='rparen'>)</span>
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_res'>res</span>
|
||
<span class='id identifier rubyid_nk'>nk</span> <span class='op'>=</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span>
|
||
<span class='kw'>return</span> <span class='id identifier rubyid_nk'>nk</span> <span class='kw'>if</span> <span class='id identifier rubyid_nk'>nk</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_key_name'>key_name</span> <span class='op'>==</span> <span class='id identifier rubyid_sub_key'>sub_key</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span>
|
||
|
||
<span class='kw'>nil</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="get_block-instance_method">
|
||
|
||
#<strong>get_block</strong>(offset) ⇒ <tt><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns a registry block given its offset</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>offset</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The offset of the block</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The registry block</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
323
|
||
324
|
||
325</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 323</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_offset'>offset</span><span class='rparen'>)</span>
|
||
<span class='const'><span class='object_link'><a href="RegistryParser/RegHbinBlock.html" title="Msf::Util::WindowsRegistry::RegistryParser::RegHbinBlock (class)">RegHbinBlock</a></span></span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='ivar'>@hive_data</span><span class='lbracket'>[</span><span class='int'>4096</span><span class='op'>+</span><span class='id identifier rubyid_offset'>offset</span><span class='op'>..</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span><span class='rparen'>)</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="get_data-instance_method">
|
||
|
||
#<strong>get_data</strong>(offset, count) ⇒ <tt>String</tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns the data at a given offset from the end of the header in the raw hive binary.</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>offset</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The offset from the end of the header</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<span class='name'>count</span>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The size of the data. Since the 4 first bytes are ignored, the data returned will be (count - 4) long.</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The resulting data</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
409
|
||
410
|
||
411</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 409</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_get_data'>get_data</span><span class='lparen'>(</span><span class='id identifier rubyid_offset'>offset</span><span class='comma'>,</span> <span class='id identifier rubyid_count'>count</span><span class='rparen'>)</span>
|
||
<span class='ivar'>@hive_data</span><span class='lbracket'>[</span><span class='int'>4096</span><span class='op'>+</span><span class='id identifier rubyid_offset'>offset</span><span class='comma'>,</span> <span class='id identifier rubyid_count'>count</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>4</span><span class='op'>..</span><span class='op'>-</span><span class='int'>1</span><span class='rbracket'>]</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="get_lh_hash-instance_method">
|
||
|
||
#<strong>get_lh_hash</strong>(key) ⇒ <tt>Integer</tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns the hash of a LH subkey from <a href="http://www.sentinelchicken.com/data/TheWindowsNTRegistryFileFormat.pdf">www.sentinelchicken.com/data/TheWindowsNTRegistryFileFormat.pdf</a> (Appendix C)</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>key</span>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The LH subkey</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The hash</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
358
|
||
359
|
||
360
|
||
361
|
||
362
|
||
363
|
||
364
|
||
365</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 358</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_get_lh_hash'>get_lh_hash</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='int'>0</span>
|
||
<span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_upcase'>upcase</span><span class='period'>.</span><span class='id identifier rubyid_bytes'>bytes</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_byte'>byte</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_res'>res</span> <span class='op'>*=</span> <span class='int'>37</span>
|
||
<span class='id identifier rubyid_res'>res</span> <span class='op'>+=</span> <span class='id identifier rubyid_byte'>byte</span><span class='period'>.</span><span class='id identifier rubyid_ord'>ord</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span> <span class='op'>%</span> <span class='int'>0x100000000</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="get_offset-instance_method">
|
||
|
||
#<strong>get_offset</strong>(magic, hash_rec, key) ⇒ <tt>Integer</tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns the offset of a given subkey in a hash record</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>magic</span>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The signtaure (MAGIC)</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<span class='name'>hash_rec</span>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The hash record</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<span class='name'>key</span>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The subkey to look for</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The offset of the subkey</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
333
|
||
334
|
||
335
|
||
336
|
||
337
|
||
338
|
||
339
|
||
340
|
||
341
|
||
342
|
||
343
|
||
344
|
||
345
|
||
346
|
||
347
|
||
348
|
||
349
|
||
350
|
||
351</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 333</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_get_offset'>get_offset</span><span class='lparen'>(</span><span class='id identifier rubyid_magic'>magic</span><span class='comma'>,</span> <span class='id identifier rubyid_hash_rec'>hash_rec</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
||
<span class='kw'>case</span> <span class='id identifier rubyid_magic'>magic</span>
|
||
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="#LF_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::LF_MAGIC (constant)">LF_MAGIC</a></span></span>
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_hash_rec'>hash_rec</span><span class='period'>.</span><span class='id identifier rubyid_key_name'>key_name</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(^\x00*)|(\x00*$)</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='op'>==</span> <span class='id identifier rubyid_key'>key</span><span class='lbracket'>[</span><span class='int'>0</span><span class='comma'>,</span><span class='int'>4</span><span class='rbracket'>]</span>
|
||
<span class='kw'>return</span> <span class='id identifier rubyid_hash_rec'>hash_rec</span><span class='period'>.</span><span class='id identifier rubyid_offset_nk'>offset_nk</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="#LH_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::LH_MAGIC (constant)">LH_MAGIC</a></span></span>
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_hash_rec'>hash_rec</span><span class='period'>.</span><span class='id identifier rubyid_key_name'>key_name</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>L<</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='op'>==</span> <span class='id identifier rubyid_get_lh_hash'>get_lh_hash</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
|
||
<span class='kw'>return</span> <span class='id identifier rubyid_hash_rec'>hash_rec</span><span class='period'>.</span><span class='id identifier rubyid_offset_nk'>offset_nk</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="#RI_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::RI_MAGIC (constant)">RI_MAGIC</a></span></span>
|
||
<span class='comment'># Special case here, don't know exactly why, an RI pointing to a NK
|
||
</span> <span class='id identifier rubyid_offset'>offset</span> <span class='op'>=</span> <span class='id identifier rubyid_hash_rec'>hash_rec</span><span class='period'>.</span><span class='id identifier rubyid_offset_nk'>offset_nk</span>
|
||
<span class='id identifier rubyid_nk'>nk</span> <span class='op'>=</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_offset'>offset</span><span class='rparen'>)</span>
|
||
<span class='kw'>return</span> <span class='id identifier rubyid_offset'>offset</span> <span class='kw'>if</span> <span class='id identifier rubyid_nk'>nk</span><span class='period'>.</span><span class='id identifier rubyid_key_name'>key_name</span> <span class='op'>==</span> <span class='id identifier rubyid_key'>key</span>
|
||
<span class='kw'>else</span>
|
||
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Unknown magic: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_magic'>magic</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="get_value-instance_method">
|
||
|
||
#<strong>get_value</strong>(reg_key, reg_value = nil) ⇒ <tt>Array</tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns the type and the data of a given key/value pair</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>reg_key</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The registry key</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<span class='name'>reg_value</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
<em class="default">(defaults to: <tt>nil</tt>)</em>
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The value in the registry key</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>Array</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The type (Integer) and data (String) of the given key/value as the first and second element of an array, respectively</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
248
|
||
249
|
||
250
|
||
251
|
||
252
|
||
253
|
||
254
|
||
255
|
||
256
|
||
257
|
||
258
|
||
259
|
||
260
|
||
261
|
||
262</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 248</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_get_value'>get_value</span><span class='lparen'>(</span><span class='id identifier rubyid_reg_key'>reg_key</span><span class='comma'>,</span> <span class='id identifier rubyid_reg_value'>reg_value</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_reg_key'>reg_key</span> <span class='op'>=</span> <span class='id identifier rubyid_find_key'>find_key</span><span class='lparen'>(</span><span class='id identifier rubyid_reg_key'>reg_key</span><span class='rparen'>)</span>
|
||
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_reg_key'>reg_key</span>
|
||
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_reg_key'>reg_key</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_num_values'>num_values</span> <span class='op'>></span> <span class='int'>0</span>
|
||
<span class='id identifier rubyid_value_list'>value_list</span> <span class='op'>=</span> <span class='id identifier rubyid_get_value_blocks'>get_value_blocks</span><span class='lparen'>(</span><span class='id identifier rubyid_reg_key'>reg_key</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_offset_value_list'>offset_value_list</span><span class='comma'>,</span> <span class='id identifier rubyid_reg_key'>reg_key</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_num_values'>num_values</span> <span class='op'>+</span> <span class='int'>1</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_value_list'>value_list</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>==</span> <span class='id identifier rubyid_reg_value'>reg_value</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>||</span>
|
||
<span class='id identifier rubyid_reg_value'>reg_value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&&</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_flag'>flag</span> <span class='op'><=</span> <span class='int'>0</span>
|
||
<span class='kw'>return</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_value_type'>value_type</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span> <span class='id identifier rubyid_get_value_data'>get_value_data</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>nil</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="get_value_blocks-instance_method">
|
||
|
||
#<strong>get_value_blocks</strong>(offset, count) ⇒ <tt>Array</tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns a list of ‘count“value blocks from the offsets located at `offset`</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>offset</span>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The offset where the offsets of each value is located</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
<span class='name'>count</span>
|
||
|
||
|
||
<span class='type'>(<tt>Integer</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The number of value blocks to retrieve</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>Array</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>An array of registry blocks</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
372
|
||
373
|
||
374
|
||
375
|
||
376
|
||
377
|
||
378
|
||
379
|
||
380
|
||
381
|
||
382
|
||
383
|
||
384
|
||
385</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 372</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_get_value_blocks'>get_value_blocks</span><span class='lparen'>(</span><span class='id identifier rubyid_offset'>offset</span><span class='comma'>,</span> <span class='id identifier rubyid_count'>count</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_value_list'>value_list</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
||
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
|
||
<span class='id identifier rubyid_count'>count</span><span class='period'>.</span><span class='id identifier rubyid_times'>times</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span>
|
||
<span class='id identifier rubyid_value_list'>value_list</span> <span class='op'><<</span> <span class='ivar'>@hive_data</span><span class='lbracket'>[</span><span class='int'>4096</span><span class='op'>+</span><span class='id identifier rubyid_offset'>offset</span><span class='op'>+</span><span class='id identifier rubyid_i'>i</span><span class='op'>*</span><span class='int'>4</span><span class='comma'>,</span> <span class='int'>4</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>l<</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
||
<span class='kw'>end</span>
|
||
<span class='id identifier rubyid_value_list'>value_list</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_value_offset'>value_offset</span><span class='op'>|</span>
|
||
<span class='kw'>if</span> <span class='id identifier rubyid_value_offset'>value_offset</span> <span class='op'>></span> <span class='int'>0</span>
|
||
<span class='id identifier rubyid_block'>block</span> <span class='op'>=</span> <span class='id identifier rubyid_get_block'>get_block</span><span class='lparen'>(</span><span class='id identifier rubyid_value_offset'>value_offset</span><span class='rparen'>)</span>
|
||
<span class='id identifier rubyid_res'>res</span> <span class='op'><<</span> <span class='id identifier rubyid_block'>block</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>return</span> <span class='id identifier rubyid_res'>res</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="method_details ">
|
||
<h3 class="signature " id="get_value_data-instance_method">
|
||
|
||
#<strong>get_value_data</strong>(record) ⇒ <tt>String</tt>
|
||
|
||
|
||
|
||
|
||
|
||
</h3><div class="docstring">
|
||
<div class="discussion">
|
||
|
||
<p>Returns the data of a VK record value</p>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<div class="tags">
|
||
<p class="tag_title">Parameters:</p>
|
||
<ul class="param">
|
||
|
||
<li>
|
||
|
||
<span class='name'>record</span>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The VK record</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
<p class="tag_title">Returns:</p>
|
||
<ul class="return">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>String</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>The data</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
<p class="tag_title">Raises:</p>
|
||
<ul class="raise">
|
||
|
||
<li>
|
||
|
||
|
||
<span class='type'>(<tt>ArgumentError</tt>)</span>
|
||
|
||
|
||
|
||
—
|
||
<div class='inline'>
|
||
<p>If the parent key is not a VK record</p>
|
||
</div>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</div><table class="source_code">
|
||
<tr>
|
||
<td>
|
||
<pre class="lines">
|
||
|
||
|
||
392
|
||
393
|
||
394
|
||
395
|
||
396
|
||
397
|
||
398
|
||
399
|
||
400</pre>
|
||
</td>
|
||
<td>
|
||
<pre class="code"><span class="info file"># File 'lib/msf/util/windows_registry/registry_parser.rb', line 392</span>
|
||
|
||
<span class='kw'>def</span> <span class='id identifier rubyid_get_value_data'>get_value_data</span><span class='lparen'>(</span><span class='id identifier rubyid_record'>record</span><span class='rparen'>)</span>
|
||
<span class='kw'>unless</span> <span class='id identifier rubyid_record'>record</span><span class='op'>&.</span><span class='id identifier rubyid_magic'>magic</span> <span class='op'>==</span> <span class='const'><span class='object_link'><a href="#VK_MAGIC-constant" title="Msf::Util::WindowsRegistry::RegistryParser::VK_MAGIC (constant)">VK_MAGIC</a></span></span>
|
||
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>get_value_data: record must be a VK record</span><span class='tstring_end'>"</span></span>
|
||
<span class='kw'>end</span>
|
||
<span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_data_len'>data_len</span> <span class='op'>==</span> <span class='int'>0</span>
|
||
<span class='comment'># if DataLen < 5 the value itself is stored in the Offset field
|
||
</span> <span class='kw'>return</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_offset_data'>offset_data</span><span class='period'>.</span><span class='id identifier rubyid_to_binary_s'>to_binary_s</span> <span class='kw'>if</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_data_len'>data_len</span> <span class='op'><</span> <span class='int'>0</span>
|
||
<span class='kw'>return</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_get_data'>get_data</span><span class='lparen'>(</span><span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_offset_data'>offset_data</span><span class='comma'>,</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_data_len'>data_len</span> <span class='op'>+</span> <span class='int'>4</span><span class='rparen'>)</span>
|
||
<span class='kw'>end</span></pre>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div id="footer">
|
||
Generated on Fri May 8 17:03:43 2026 by
|
||
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
||
0.9.37 (ruby-3.1.5).
|
||
</div>
|
||
|
||
</div>
|
||
</body>
|
||
</html> |