Files
metasploit-gs/api/Msf/PayloadSet.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

3155 lines
156 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Class: Msf::PayloadSet
&mdash; 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::PayloadSet";
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 (P)</a> &raquo;
<span class='title'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span>
&raquo;
<span class="title">PayloadSet</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::PayloadSet
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName"><span class='object_link'><a href="ModuleSet.html" title="Msf::ModuleSet (class)">ModuleSet</a></span></span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Hash</li>
<li class="next"><span class='object_link'><a href="ModuleSet.html" title="Msf::ModuleSet (class)">ModuleSet</a></span></li>
<li class="next">Msf::PayloadSet</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/payload_set.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>This class is a special case of the generic module set class because payloads are generated in terms of combinations between various components, such as a stager and a stage. As such, the payload set needs to be built on the fly and cannot be simply matched one-to-one with a payload module. Yeah, the term module is kind of overloaded here, but eat it!</p>
</div>
</div>
<div class="tags">
</div>
<h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
<ul class="summary">
<li class="protected ">
<span class="summary_signature">
<a href="#_instances-instance_method" title="#_instances (instance method)">#<strong>_instances</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>:nodoc:.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#payload_type_modules-instance_method" title="#payload_type_modules (instance method)">#<strong>payload_type_modules</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>:nodoc:.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#singles-instance_method" title="#singles (instance method)">#<strong>singles</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The list of singles that have been loaded.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stages-instance_method" title="#stages (instance method)">#<strong>stages</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The list of stages that have been loaded.</p>
</div></span>
</li>
</ul>
<h3 class="inherited">Attributes inherited from <span class='object_link'><a href="ModuleSet.html" title="Msf::ModuleSet (class)">ModuleSet</a></span></h3>
<p class="inherited"><span class='object_link'><a href="ModuleSet.html#ambiguous_module_reference_name_set-instance_method" title="Msf::ModuleSet#ambiguous_module_reference_name_set (method)">#ambiguous_module_reference_name_set</a></span>, <span class='object_link'><a href="ModuleSet.html#architectures_by_module-instance_method" title="Msf::ModuleSet#architectures_by_module (method)">#architectures_by_module</a></span>, <span class='object_link'><a href="ModuleSet.html#mod_extensions-instance_method" title="Msf::ModuleSet#mod_extensions (method)">#mod_extensions</a></span>, <span class='object_link'><a href="ModuleSet.html#mod_sorted-instance_method" title="Msf::ModuleSet#mod_sorted (method)">#mod_sorted</a></span>, <span class='object_link'><a href="ModuleSet.html#module_type-instance_method" title="Msf::ModuleSet#module_type (method)">#module_type</a></span>, <span class='object_link'><a href="ModuleSet.html#platforms_by_module-instance_method" title="Msf::ModuleSet#platforms_by_module (method)">#platforms_by_module</a></span></p>
<h3 class="inherited">Attributes included from <span class='object_link'><a href="Framework/Offspring.html" title="Msf::Framework::Offspring (module)">Framework::Offspring</a></span></h3>
<p class="inherited"><span class='object_link'><a href="Framework/Offspring.html#framework-instance_method" title="Msf::Framework::Offspring#framework (method)">#framework</a></span></p>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="protected ">
<span class="summary_signature">
<a href="#_adapters-instance_method" title="#_adapters (instance method)">#<strong>_adapters</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#_singles-instance_method" title="#_singles (instance method)">#<strong>_singles</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Return the hash of single payloads.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#_stagers-instance_method" title="#_stagers (instance method)">#<strong>_stagers</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Return the hash of stager payloads.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#_stages-instance_method" title="#_stages (instance method)">#<strong>_stages</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Return the hash of stage payloads.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_blob_cache-instance_method" title="#add_blob_cache (instance method)">#<strong>add_blob_cache</strong>(key, blob, offsets) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Adds a blob to the blob cache so that the payload does not have to be recompiled in the future.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_cached_module-instance_method" title="#add_cached_module (instance method)">#<strong>add_cached_module</strong>(cached_module_metadata) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_module-instance_method" title="#add_module (instance method)">#<strong>add_module</strong>(payload_module, reference_name, modinfo = {}) &#x21d2; void </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method is called when a new payload module class is loaded up.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_single-instance_method" title="#add_single (instance method)">#<strong>add_single</strong>(p, name, modinfo, adapted_refname: nil, adapter_refname: nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method adds a single payload to the set and adds it to the singles hash.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_stage-instance_method" title="#add_stage (instance method)">#<strong>add_stage</strong>(p, full_name, stage_name, handler_type, modinfo) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method adds a stage payload to the set and adds it to the stages hash using the supplied handler type.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#build_adapted_name-instance_method" title="#build_adapted_name (instance method)">#<strong>build_adapted_name</strong>(aname, pname) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#build_payload-instance_method" title="#build_payload (instance method)">#<strong>build_payload</strong>(*modules) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Builds a duplicate, extended version of the Payload base class using the supplied modules.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#calculate_adapted_single_payload-instance_method" title="#calculate_adapted_single_payload (instance method)">#<strong>calculate_adapted_single_payload</strong>(adapter_name:, adapter_info:, single_info:, single_payload:) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#calculate_adapted_staged_payload-instance_method" title="#calculate_adapted_staged_payload (instance method)">#<strong>calculate_adapted_staged_payload</strong>(staged_payload:, adapter_name:, stage_info:, stager_info:, adapter_info:) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#calculate_single_payload-instance_method" title="#calculate_single_payload (instance method)">#<strong>calculate_single_payload</strong>(single_name:, single_info:) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#calculate_staged_payload-instance_method" title="#calculate_staged_payload (instance method)">#<strong>calculate_staged_payload</strong>(stage_name:, stager_name:, stage_info:, stager_info:) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#check_blob_cache-instance_method" title="#check_blob_cache (instance method)">#<strong>check_blob_cache</strong>(key) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Checks to see if a payload has a blob cache entry.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#each_module_filter-instance_method" title="#each_module_filter (instance method)">#<strong>each_module_filter</strong>(opts, name, mod) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Performs custom filtering during each_module enumeration.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#find_payload-instance_method" title="#find_payload (instance method)">#<strong>find_payload</strong>(platform, arch, handler, session, payload_type) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Looks for a payload that matches the specified requirements and returns an instance of that payload.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#find_payload_from_set-instance_method" title="#find_payload_from_set (instance method)">#<strong>find_payload_from_set</strong>(set, platform, arch, handler, session, payload_type) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Looks for a payload from a given set that matches the specified requirements and returns an instance of that payload.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#flush_blob_cache-instance_method" title="#flush_blob_cache (instance method)">#<strong>flush_blob_cache</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Flushes all entries from the blob cache.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong> &#x21d2; PayloadSet </a>
</span>
<span class="note title constructor">constructor</span>
<span class="summary_desc"><div class='inline'>
<p>Creates an instance of a payload set which is just a specialized module set class that has custom handling for payloads.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#instance-instance_method" title="#instance (instance method)">#<strong>instance</strong>(name) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns a single read-only instance of the supplied payload name such that specific attributes, like compatibility, can be evaluated.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#load_payload_component-instance_method" title="#load_payload_component (instance method)">#<strong>load_payload_component</strong>(payload_type, refname) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#on_module_reload-instance_method" title="#on_module_reload (instance method)">#<strong>on_module_reload</strong>(mod) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>When a payload module is reloaded, the blob cache entry associated with it must be removed (if one exists).</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#recalculate-instance_method" title="#recalculate (instance method)">#<strong>recalculate</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method builds the hash of alias names based on all the permutations of singles, stagers, and stages.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stage_and_stager_compatible%3F-instance_method" title="#stage_and_stager_compatible? (instance method)">#<strong>stage_and_stager_compatible?</strong>(stager_info:, stage_info:, stager_name:, stage_name:) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stager_dependencies_available%3F-instance_method" title="#stager_dependencies_available? (instance method)">#<strong>stager_dependencies_available?</strong>(stager_name:, stager_dependencies:) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stagers-instance_method" title="#stagers (instance method)">#<strong>stagers</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the hash of payload stagers that have been loaded.</p>
</div></span>
</li>
</ul>
<h3 class="inherited">Methods inherited from <span class='object_link'><a href="ModuleSet.html" title="Msf::ModuleSet (class)">ModuleSet</a></span></h3>
<p class="inherited"><span class='object_link'><a href="ModuleSet.html#[]-instance_method" title="Msf::ModuleSet#[] (method)">#[]</a></span>, <span class='object_link'><a href="ModuleSet.html#create-instance_method" title="Msf::ModuleSet#create (method)">#create</a></span>, <span class='object_link'><a href="ModuleSet.html#each-instance_method" title="Msf::ModuleSet#each (method)">#each</a></span>, <span class='object_link'><a href="ModuleSet.html#each_module-instance_method" title="Msf::ModuleSet#each_module (method)">#each_module</a></span>, <span class='object_link'><a href="ModuleSet.html#each_module_list-instance_method" title="Msf::ModuleSet#each_module_list (method)">#each_module_list</a></span>, <span class='object_link'><a href="ModuleSet.html#each_module_ranked-instance_method" title="Msf::ModuleSet#each_module_ranked (method)">#each_module_ranked</a></span>, <span class='object_link'><a href="ModuleSet.html#force_load_set-instance_method" title="Msf::ModuleSet#force_load_set (method)">#force_load_set</a></span>, <span class='object_link'><a href="ModuleSet.html#load_module_class-instance_method" title="Msf::ModuleSet#load_module_class (method)">#load_module_class</a></span>, <span class='object_link'><a href="ModuleSet.html#module_metadata-instance_method" title="Msf::ModuleSet#module_metadata (method)">#module_metadata</a></span>, <span class='object_link'><a href="ModuleSet.html#module_refnames-instance_method" title="Msf::ModuleSet#module_refnames (method)">#module_refnames</a></span>, <span class='object_link'><a href="ModuleSet.html#rank_modules-instance_method" title="Msf::ModuleSet#rank_modules (method)">#rank_modules</a></span>, <span class='object_link'><a href="ModuleSet.html#valid%3F-instance_method" title="Msf::ModuleSet#valid? (method)">#valid?</a></span></p>
<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> &#x21d2; <tt><span class='object_link'><a href="" title="Msf::PayloadSet (class)">PayloadSet</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Creates an instance of a payload set which is just a specialized module set class that has custom handling for payloads.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 20</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span>
<span class='kw'>super</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Msf.html#MODULE_PAYLOAD-constant" title="Msf::MODULE_PAYLOAD (constant)">MODULE_PAYLOAD</a></span></span><span class='rparen'>)</span>
<span class='comment'># A hash of each of the payload types that holds an array
</span> <span class='comment'># for all of the associated modules
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_payload_type_modules'>payload_type_modules</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='comment'># Initialize the hash entry for each type to an empty list
</span> <span class='lbracket'>[</span>
<span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Single-constant" title="Msf::Payload::Type::Single (constant)">Single</a></span></span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stager-constant" title="Msf::Payload::Type::Stager (constant)">Stager</a></span></span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stage-constant" title="Msf::Payload::Type::Stage (constant)">Stage</a></span></span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Adapter-constant" title="Msf::Payload::Type::Adapter (constant)">Adapter</a></span></span>
<span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_type'>type</span><span class='op'>|</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_payload_type_modules'>payload_type_modules</span><span class='lbracket'>[</span><span class='id identifier rubyid_type'>type</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='rbrace'>}</span>
<span class='comment'># Initialize hashes for each of the stages and singles. Stagers
</span> <span class='comment'># never exist independent. The stages hash will have entries that
</span> <span class='comment'># point to another hash that point to the per-stager implementation
</span> <span class='comment'># payload class. For instance:
</span> <span class='comment'>#
</span> <span class='comment'># [&#39;windows/shell&#39;][&#39;reverse_tcp&#39;]
</span> <span class='comment'>#
</span> <span class='comment'># Singles will simply point to the single payload class.
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_stages'>stages</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_singles'>singles</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='comment'># Single instance cache of modules for use with doing quick referencing
</span> <span class='comment'># of attributes that would require an instance.
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid__instances'>_instances</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='comment'># Initializes an empty blob cache
</span> <span class='ivar'>@blob_cache</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_attr_details" class="attr_details">
<h2>Instance Attribute Details</h2>
<span id="_instances=-instance_method"></span>
<div class="method_details first">
<h3 class="signature first" id="_instances-instance_method">
#<strong>_instances</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>:nodoc:</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
662
663
664</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 662</span>
<span class='kw'>def</span> <span class='id identifier rubyid__instances'>_instances</span>
<span class='ivar'>@_instances</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="payload_type_modules=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="payload_type_modules-instance_method">
#<strong>payload_type_modules</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>:nodoc:</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
660
661
662</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 660</span>
<span class='kw'>def</span> <span class='id identifier rubyid_payload_type_modules'>payload_type_modules</span>
<span class='ivar'>@payload_type_modules</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="singles=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="singles-instance_method">
#<strong>singles</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The list of singles that have been loaded.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
605
606
607</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 605</span>
<span class='kw'>def</span> <span class='id identifier rubyid_singles'>singles</span>
<span class='ivar'>@singles</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="stages=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="stages-instance_method">
#<strong>stages</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The list of stages that have been loaded.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
601
602
603</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 601</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stages'>stages</span>
<span class='ivar'>@stages</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="_adapters-instance_method">
#<strong>_adapters</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
609
610
611</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 609</span>
<span class='kw'>def</span> <span class='id identifier rubyid__adapters'>_adapters</span>
<span class='kw'>return</span> <span class='id identifier rubyid_payload_type_modules'>payload_type_modules</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Adapter-constant" title="Msf::Payload::Type::Adapter (constant)">Adapter</a></span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="_singles-instance_method">
#<strong>_singles</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Return the hash of single payloads</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
616
617
618</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 616</span>
<span class='kw'>def</span> <span class='id identifier rubyid__singles'>_singles</span>
<span class='kw'>return</span> <span class='id identifier rubyid_payload_type_modules'>payload_type_modules</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Single-constant" title="Msf::Payload::Type::Single (constant)">Single</a></span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="_stagers-instance_method">
#<strong>_stagers</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Return the hash of stager payloads</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
623
624
625</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 623</span>
<span class='kw'>def</span> <span class='id identifier rubyid__stagers'>_stagers</span>
<span class='kw'>return</span> <span class='id identifier rubyid_payload_type_modules'>payload_type_modules</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stager-constant" title="Msf::Payload::Type::Stager (constant)">Stager</a></span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="_stages-instance_method">
#<strong>_stages</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Return the hash of stage payloads</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
630
631
632</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 630</span>
<span class='kw'>def</span> <span class='id identifier rubyid__stages'>_stages</span>
<span class='kw'>return</span> <span class='id identifier rubyid_payload_type_modules'>payload_type_modules</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stage-constant" title="Msf::Payload::Type::Stage (constant)">Stage</a></span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_blob_cache-instance_method">
#<strong>add_blob_cache</strong>(key, blob, offsets) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Adds a blob to the blob cache so that the payload does not have to be recompiled in the future</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
579
580
581</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 579</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_blob_cache'>add_blob_cache</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_blob'>blob</span><span class='comma'>,</span> <span class='id identifier rubyid_offsets'>offsets</span><span class='rparen'>)</span>
<span class='ivar'>@blob_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span> <span class='id identifier rubyid_blob'>blob</span><span class='comma'>,</span> <span class='id identifier rubyid_offsets'>offsets</span> <span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_cached_module-instance_method">
#<strong>add_cached_module</strong>(cached_module_metadata) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 348</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_cached_module'>add_cached_module</span><span class='lparen'>(</span><span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='rparen'>)</span>
<span class='kw'>case</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_payload_type'>payload_type</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Single-constant" title="Msf::Payload::Type::Single (constant)">Single</a></span></span>
<span class='id identifier rubyid_single_name'>single_name</span> <span class='op'>=</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_ref_name'>ref_name</span>
<span class='id identifier rubyid_single_info'>single_info</span> <span class='op'>=</span> <span class='id identifier rubyid_load_payload_component'>load_payload_component</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Single-constant" title="Msf::Payload::Type::Single (constant)">Single</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_single_name'>single_name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_calculate_single_payload'>calculate_single_payload</span><span class='lparen'>(</span><span class='label'>single_name:</span> <span class='id identifier rubyid_single_name'>single_name</span><span class='comma'>,</span> <span class='label'>single_info:</span> <span class='id identifier rubyid_single_info'>single_info</span><span class='rparen'>)</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stager-constant" title="Msf::Payload::Type::Stager (constant)">Stager</a></span></span>
<span class='id identifier rubyid_stager_refname'>stager_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_stager_refname'>stager_refname</span>
<span class='id identifier rubyid_stager_info'>stager_info</span> <span class='op'>=</span> <span class='id identifier rubyid_load_payload_component'>load_payload_component</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stager-constant" title="Msf::Payload::Type::Stager (constant)">Stager</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_stager_refname'>stager_refname</span><span class='rparen'>)</span>
<span class='id identifier rubyid_stage_name'>stage_name</span> <span class='op'>=</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_stage_refname'>stage_refname</span>
<span class='id identifier rubyid_stage_info'>stage_info</span> <span class='op'>=</span> <span class='id identifier rubyid_load_payload_component'>load_payload_component</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stage-constant" title="Msf::Payload::Type::Stage (constant)">Stage</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_stage_name'>stage_name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_calculate_staged_payload'>calculate_staged_payload</span><span class='lparen'>(</span><span class='label'>stage_name:</span> <span class='id identifier rubyid_stage_name'>stage_name</span><span class='comma'>,</span>
<span class='label'>stager_name:</span> <span class='id identifier rubyid_stager_refname'>stager_refname</span><span class='comma'>,</span>
<span class='label'>stage_info:</span> <span class='id identifier rubyid_stage_info'>stage_info</span><span class='comma'>,</span>
<span class='label'>stager_info:</span> <span class='id identifier rubyid_stager_info'>stager_info</span><span class='rparen'>)</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Adapter-constant" title="Msf::Payload::Type::Adapter (constant)">Adapter</a></span></span>
<span class='id identifier rubyid_adapter_name'>adapter_name</span> <span class='op'>=</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_adapter_refname'>adapter_refname</span>
<span class='id identifier rubyid_adapter_info'>adapter_info</span> <span class='op'>=</span> <span class='id identifier rubyid_load_payload_component'>load_payload_component</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Adapter-constant" title="Msf::Payload::Type::Adapter (constant)">Adapter</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_staged'>staged</span>
<span class='id identifier rubyid_stage_name'>stage_name</span> <span class='op'>=</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_stage_refname'>stage_refname</span>
<span class='id identifier rubyid_stage_info'>stage_info</span> <span class='op'>=</span> <span class='id identifier rubyid_load_payload_component'>load_payload_component</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stage-constant" title="Msf::Payload::Type::Stage (constant)">Stage</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_stage_name'>stage_name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_stager_name'>stager_name</span><span class='op'>=</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_stager_refname'>stager_refname</span>
<span class='id identifier rubyid_stager_info'>stager_info</span> <span class='op'>=</span> <span class='id identifier rubyid_load_payload_component'>load_payload_component</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stager-constant" title="Msf::Payload::Type::Stager (constant)">Stager</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_stager_name'>stager_name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_staged_payload'>staged_payload</span> <span class='op'>=</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_adapted_refname'>adapted_refname</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_calculate_adapted_staged_payload'>calculate_adapted_staged_payload</span><span class='lparen'>(</span><span class='label'>staged_payload:</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span><span class='comma'>,</span>
<span class='label'>adapter_name:</span> <span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='comma'>,</span>
<span class='label'>stage_info:</span> <span class='id identifier rubyid_stage_info'>stage_info</span><span class='comma'>,</span>
<span class='label'>stager_info:</span> <span class='id identifier rubyid_stager_info'>stager_info</span><span class='comma'>,</span>
<span class='label'>adapter_info:</span> <span class='id identifier rubyid_adapter_info'>adapter_info</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_single_name'>single_name</span> <span class='op'>=</span> <span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_adapted_refname'>adapted_refname</span>
<span class='id identifier rubyid_single_info'>single_info</span> <span class='op'>=</span> <span class='id identifier rubyid_load_payload_component'>load_payload_component</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Single-constant" title="Msf::Payload::Type::Single (constant)">Single</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_single_name'>single_name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_single_payload'>single_payload</span> <span class='op'>=</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_single_name'>single_name</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_calculate_adapted_single_payload'>calculate_adapted_single_payload</span><span class='lparen'>(</span><span class='label'>adapter_name:</span> <span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='comma'>,</span>
<span class='label'>adapter_info:</span> <span class='id identifier rubyid_adapter_info'>adapter_info</span><span class='comma'>,</span>
<span class='label'>single_info:</span> <span class='id identifier rubyid_single_info'>single_info</span><span class='comma'>,</span>
<span class='label'>single_payload:</span> <span class='id identifier rubyid_single_payload'>single_payload</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="MissingPayloadError.html" title="Msf::MissingPayloadError (class)">MissingPayloadError</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Missing payload component for </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_ref_name'>ref_name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>rescue</span> <span class='const'>StandardError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cached_module_metadata'>cached_module_metadata</span><span class='period'>.</span><span class='id identifier rubyid_ref_name'>ref_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> failed to load</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_module-instance_method">
#<strong>add_module</strong>(payload_module, reference_name, modinfo = {}) &#x21d2; <tt>void</tt>
</h3><div class="docstring">
<div class="discussion">
<p class="note returns_void">This method returns an undefined value.</p>
<p>This method is called when a new payload module class is loaded up. For the payload set we simply create an instance of the class and do some magic to figure out if its a single, stager, or stage. Depending on which it is, we add it to the appropriate list.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>payload_module</span>
<span class='type'>(<tt>::Module</tt>)</span>
&mdash;
<div class='inline'>
<p>The module name.</p>
</div>
</li>
<li>
<span class='name'>reference_name</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The module reference name.</p>
</div>
</li>
<li>
<span class='name'>modinfo</span>
<span class='type'>(<tt>Hash{String =&gt; Array}</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>additional information about the module.</p>
</div>
</li>
</ul>
<p class="tag_title">Options Hash (<tt>modinfo</tt>):</p>
<ul class="option">
<li>
<span class="name">'files'</span>
<span class="type">(<tt>Array&lt;String&gt;</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>List of paths to the ruby source files where <code>class_or_module</code> is defined.</p>
</div>
</li>
<li>
<span class="name">'paths'</span>
<span class="type">(<tt>Array&lt;String&gt;</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>List of module reference names.</p>
</div>
</li>
<li>
<span class="name">'type'</span>
<span class="type">(<tt>String</tt>)</span>
<span class="default">
</span>
&mdash; <div class='inline'>
<p>The module type, should match positional <code>type</code> argument.</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 312</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_module'>add_module</span><span class='lparen'>(</span><span class='id identifier rubyid_payload_module'>payload_module</span><span class='comma'>,</span> <span class='id identifier rubyid_reference_name'>reference_name</span><span class='comma'>,</span> <span class='id identifier rubyid_modinfo'>modinfo</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_modinfo'>modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cached_metadata</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>return</span> <span class='id identifier rubyid_add_cached_module'>add_cached_module</span><span class='lparen'>(</span><span class='id identifier rubyid_modinfo'>modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cached_metadata</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_match_data'>match_data</span> <span class='op'>=</span> <span class='id identifier rubyid_reference_name'>reference_name</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^(adapters|singles|stagers|stages)</span><span class='embexpr_beg'>#{</span><span class='const'>File</span><span class='op'>::</span><span class='const'>SEPARATOR</span><span class='embexpr_end'>}</span><span class='tstring_content'>(.*)$</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_ptype'>ptype</span> <span class='op'>=</span> <span class='id identifier rubyid_match_data'>match_data</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_reference_name'>reference_name</span> <span class='op'>=</span> <span class='id identifier rubyid_match_data'>match_data</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='comment'># Duplicate the Payload base class and extend it with the module
</span> <span class='comment'># class that is passed in. This allows us to inspect the actual
</span> <span class='comment'># module to see what type it is, and to grab other information for
</span> <span class='comment'># our own evil purposes.
</span> <span class='id identifier rubyid_instance'>instance</span> <span class='op'>=</span> <span class='id identifier rubyid_build_payload'>build_payload</span><span class='lparen'>(</span><span class='id identifier rubyid_payload_module'>payload_module</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='comment'># Create an array of information about this payload module
</span> <span class='id identifier rubyid_pinfo'>pinfo</span> <span class='op'>=</span>
<span class='lbracket'>[</span>
<span class='id identifier rubyid_payload_module'>payload_module</span><span class='comma'>,</span>
<span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_handler_klass'>handler_klass</span><span class='comma'>,</span>
<span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_platform'>platform</span><span class='comma'>,</span>
<span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_arch'>arch</span><span class='comma'>,</span>
<span class='id identifier rubyid_instance'>instance</span><span class='comma'>,</span>
<span class='id identifier rubyid_modinfo'>modinfo</span>
<span class='rbracket'>]</span>
<span class='comment'># Use the module&#39;s preferred alias if it has one
</span> <span class='id identifier rubyid_reference_name'>reference_name</span> <span class='op'>=</span> <span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_alias'>alias</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_alias'>alias</span><span class='rparen'>)</span>
<span class='comment'># Store the module and alias name for this payload. We
</span> <span class='comment'># also convey other information about the module, such as
</span> <span class='comment'># the platforms and architectures it supports
</span> <span class='id identifier rubyid_payload_type_modules'>payload_type_modules</span><span class='lbracket'>[</span><span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_payload_type'>payload_type</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_reference_name'>reference_name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_pinfo'>pinfo</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_single-instance_method">
#<strong>add_single</strong>(p, name, modinfo, adapted_refname: nil, adapter_refname: nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method adds a single payload to the set and adds it to the singles hash.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 504</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_single'>add_single</span><span class='lparen'>(</span><span class='id identifier rubyid_p'>p</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_modinfo'>modinfo</span><span class='comma'>,</span> <span class='label'>adapted_refname:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>adapter_refname:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_framework'>framework</span> <span class='op'>=</span> <span class='id identifier rubyid_framework'>framework</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_file_path'>file_path</span> <span class='op'>=</span> <span class='id identifier rubyid_modinfo'>modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>files</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_adapted_refname'>adapted_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_adapted_refname'>adapted_refname</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_adapter_refname'>adapter_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_adapter_refname'>adapter_refname</span>
<span class='comment'># Associate this class with the single payload&#39;s name
</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_p'>p</span>
<span class='comment'># Add the singles hash
</span> <span class='id identifier rubyid_singles'>singles</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_p'>p</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Built single payload </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>core</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../Rex/Logging.html#LEV_2-constant" title="Rex::Logging::LEV_2 (constant)">LEV_2</a></span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_stage-instance_method">
#<strong>add_stage</strong>(p, full_name, stage_name, handler_type, modinfo) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method adds a stage payload to the set and adds it to the stages hash using the supplied handler type.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 524</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_stage'>add_stage</span><span class='lparen'>(</span><span class='id identifier rubyid_p'>p</span><span class='comma'>,</span> <span class='id identifier rubyid_full_name'>full_name</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_name'>stage_name</span><span class='comma'>,</span> <span class='id identifier rubyid_handler_type'>handler_type</span><span class='comma'>,</span> <span class='id identifier rubyid_modinfo'>modinfo</span><span class='rparen'>)</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_framework'>framework</span> <span class='op'>=</span> <span class='id identifier rubyid_framework'>framework</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span> <span class='op'>=</span> <span class='id identifier rubyid_full_name'>full_name</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_file_path'>file_path</span> <span class='op'>=</span> <span class='id identifier rubyid_modinfo'>modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>files</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='comment'># Associate this stage&#39;s full name with the payload class in the set
</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_full_name'>full_name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_p'>p</span>
<span class='comment'># Create the hash entry for this stage and then create
</span> <span class='comment'># the associated entry for the handler type
</span> <span class='id identifier rubyid_stages'>stages</span><span class='lbracket'>[</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='op'>!</span><span class='id identifier rubyid_stages'>stages</span><span class='lbracket'>[</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='comment'># Add it to this stage&#39;s stager hash
</span> <span class='id identifier rubyid_stages'>stages</span><span class='lbracket'>[</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_handler_type'>handler_type</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_p'>p</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Built staged payload </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_full_name'>full_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>core</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../Rex/Logging.html#LEV_2-constant" title="Rex::Logging::LEV_2 (constant)">LEV_2</a></span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="build_adapted_name-instance_method">
#<strong>build_adapted_name</strong>(aname, pname) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
651
652
653
654
655
656
657
658</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 651</span>
<span class='kw'>def</span> <span class='id identifier rubyid_build_adapted_name'>build_adapted_name</span><span class='lparen'>(</span><span class='id identifier rubyid_aname'>aname</span><span class='comma'>,</span> <span class='id identifier rubyid_pname'>pname</span><span class='rparen'>)</span>
<span class='id identifier rubyid_aparts'>aparts</span> <span class='op'>=</span> <span class='id identifier rubyid_aname'>aname</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_pparts'>pparts</span> <span class='op'>=</span> <span class='id identifier rubyid_pname'>pname</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_pparts'>pparts</span><span class='period'>.</span><span class='id identifier rubyid_shift'>shift</span> <span class='kw'>if</span> <span class='id identifier rubyid_aparts'>aparts</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span><span class='period'>.</span><span class='id identifier rubyid_start_with?'>start_with?</span><span class='lparen'>(</span><span class='id identifier rubyid_pparts'>pparts</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='rparen'>)</span>
<span class='id identifier rubyid_aparts'>aparts</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_apart'>apart</span><span class='op'>|</span> <span class='id identifier rubyid_pparts'>pparts</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_apart'>apart</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_pparts'>pparts</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_apart'>apart</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
<span class='lparen'>(</span><span class='id identifier rubyid_aparts'>aparts</span> <span class='op'>+</span> <span class='id identifier rubyid_pparts'>pparts</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_join'><span class='object_link'><a href="../top-level-namespace.html#join-instance_method" title="#join (method)">join</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="build_payload-instance_method">
#<strong>build_payload</strong>(*modules) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Builds a duplicate, extended version of the Payload base class using the supplied modules.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
638
639
640
641
642
643
644
645
646
647
648
649</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 638</span>
<span class='kw'>def</span> <span class='id identifier rubyid_build_payload'>build_payload</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_modules'>modules</span><span class='rparen'>)</span>
<span class='id identifier rubyid_klass'>klass</span> <span class='op'>=</span> <span class='const'>Class</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='rparen'>)</span>
<span class='comment'># Remove nil modules
</span> <span class='id identifier rubyid_modules'>modules</span><span class='period'>.</span><span class='id identifier rubyid_compact!'>compact!</span>
<span class='comment'># Include the modules supplied to us with the mad skillz
</span> <span class='comment'># spoonfu style
</span> <span class='id identifier rubyid_klass'>klass</span><span class='period'>.</span><span class='id identifier rubyid_include'>include</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_modules'>modules</span><span class='period'>.</span><span class='id identifier rubyid_reverse'>reverse</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_klass'>klass</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="calculate_adapted_single_payload-instance_method">
#<strong>calculate_adapted_single_payload</strong>(adapter_name:, adapter_info:, single_info:, single_payload:) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
148
149
150
151
152
153
154
155
156
157
158
159
160</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 148</span>
<span class='kw'>def</span> <span class='id identifier rubyid_calculate_adapted_single_payload'>calculate_adapted_single_payload</span><span class='lparen'>(</span><span class='label'>adapter_name:</span><span class='comma'>,</span> <span class='label'>adapter_info:</span><span class='comma'>,</span> <span class='label'>single_info:</span><span class='comma'>,</span> <span class='label'>single_payload:</span><span class='rparen'>)</span>
<span class='id identifier rubyid_adapter_mod'>adapter_mod</span><span class='comma'>,</span> <span class='id identifier rubyid__'>_</span><span class='comma'>,</span> <span class='id identifier rubyid__adapter_platform'>_adapter_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__adapter_arch'>_adapter_arch</span><span class='comma'>,</span> <span class='id identifier rubyid_adapter_inst'>adapter_inst</span><span class='comma'>,</span> <span class='id identifier rubyid_adapted_modinfo'>adapted_modinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_adapter_info'>adapter_info</span>
<span class='id identifier rubyid_single_mod'>single_mod</span><span class='comma'>,</span> <span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid__single_platform'>_single_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__single_arch'>_single_arch</span><span class='comma'>,</span> <span class='id identifier rubyid__single_inst'>_single_inst</span><span class='comma'>,</span> <span class='id identifier rubyid__single_modinfo'>_single_modinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_single_info'>single_info</span>
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_single_payload'>single_payload</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_adapter_inst'>adapter_inst</span><span class='period'>.</span><span class='id identifier rubyid_compatible?'>compatible?</span><span class='lparen'>(</span><span class='id identifier rubyid_single_payload'>single_payload</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='rparen'>)</span>
<span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_build_payload'>build_payload</span><span class='lparen'>(</span><span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid_single_mod'>single_mod</span><span class='comma'>,</span> <span class='id identifier rubyid_adapter_mod'>adapter_mod</span><span class='rparen'>)</span>
<span class='id identifier rubyid_adapted_name'>adapted_name</span> <span class='op'>=</span> <span class='id identifier rubyid_build_adapted_name'>build_adapted_name</span><span class='lparen'>(</span><span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='comma'>,</span> <span class='id identifier rubyid_single_payload'>single_payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span><span class='rparen'>)</span>
<span class='id identifier rubyid_add_single'>add_single</span><span class='lparen'>(</span><span class='id identifier rubyid_payload'>payload</span><span class='comma'>,</span> <span class='id identifier rubyid_adapted_name'>adapted_name</span><span class='comma'>,</span> <span class='id identifier rubyid_adapted_modinfo'>adapted_modinfo</span><span class='comma'>,</span> <span class='label'>adapted_refname:</span> <span class='id identifier rubyid_single_payload'>single_payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span><span class='comma'>,</span> <span class='label'>adapter_refname:</span> <span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_payload'>payload</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="calculate_adapted_staged_payload-instance_method">
#<strong>calculate_adapted_staged_payload</strong>(staged_payload:, adapter_name:, stage_info:, stager_info:, adapter_info:) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 275</span>
<span class='kw'>def</span> <span class='id identifier rubyid_calculate_adapted_staged_payload'>calculate_adapted_staged_payload</span><span class='lparen'>(</span><span class='label'>staged_payload:</span><span class='comma'>,</span> <span class='label'>adapter_name:</span><span class='comma'>,</span> <span class='label'>stage_info:</span><span class='comma'>,</span> <span class='label'>stager_info:</span><span class='comma'>,</span> <span class='label'>adapter_info:</span><span class='rparen'>)</span>
<span class='id identifier rubyid_stage_mod'>stage_mod</span><span class='comma'>,</span> <span class='id identifier rubyid__'>_</span><span class='comma'>,</span> <span class='id identifier rubyid__stage_platform'>_stage_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__stage_arch'>_stage_arch</span><span class='comma'>,</span> <span class='id identifier rubyid__stage_inst'>_stage_inst</span> <span class='op'>=</span> <span class='id identifier rubyid_stage_info'>stage_info</span>
<span class='id identifier rubyid_stager_mod'>stager_mod</span><span class='comma'>,</span> <span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_platform'>_stager_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_arch'>_stager_arch</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_inst'>_stager_inst</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_modinfo'>_stager_modinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_stager_info'>stager_info</span>
<span class='id identifier rubyid_adapter_mod'>adapter_mod</span><span class='comma'>,</span> <span class='id identifier rubyid__'>_</span><span class='comma'>,</span> <span class='id identifier rubyid__adapter_platform'>_adapter_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__adapter_arch'>_adapter_arch</span><span class='comma'>,</span> <span class='id identifier rubyid_adapter_inst'>adapter_inst</span><span class='comma'>,</span> <span class='id identifier rubyid_adapter_modinfo'>adapter_modinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_adapter_info'>adapter_info</span>
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_adapter_inst'>adapter_inst</span><span class='period'>.</span><span class='id identifier rubyid_compatible?'>compatible?</span><span class='lparen'>(</span><span class='id identifier rubyid_staged_payload'>staged_payload</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='rparen'>)</span>
<span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_build_payload'>build_payload</span><span class='lparen'>(</span><span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid_stager_mod'>stager_mod</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_mod'>stage_mod</span><span class='comma'>,</span> <span class='id identifier rubyid_adapter_mod'>adapter_mod</span><span class='rparen'>)</span>
<span class='id identifier rubyid_adapted_refname'>adapted_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_build_adapted_name'>build_adapted_name</span><span class='lparen'>(</span><span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='comma'>,</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span><span class='rparen'>)</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span> <span class='op'>=</span> <span class='id identifier rubyid_adapted_refname'>adapted_refname</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_framework'>framework</span> <span class='op'>=</span> <span class='id identifier rubyid_framework'>framework</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_file_path'>file_path</span> <span class='op'>=</span> <span class='id identifier rubyid_adapter_modinfo'>adapter_modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>files</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_adapted_refname'>adapted_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_adapter_refname'>adapter_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_adapter_name'>adapter_name</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_stage_refname'>stage_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span><span class='period'>.</span><span class='id identifier rubyid_stage_refname'>stage_refname</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_stager_refname'>stager_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span><span class='period'>.</span><span class='id identifier rubyid_stager_refname'>stager_refname</span>
<span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_payload'>payload</span>
<span class='id identifier rubyid_payload'>payload</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="calculate_single_payload-instance_method">
#<strong>calculate_single_payload</strong>(single_name:, single_info:) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 126</span>
<span class='kw'>def</span> <span class='id identifier rubyid_calculate_single_payload'>calculate_single_payload</span><span class='lparen'>(</span><span class='label'>single_name:</span><span class='comma'>,</span> <span class='label'>single_info:</span><span class='rparen'>)</span>
<span class='id identifier rubyid_mod'>mod</span><span class='comma'>,</span> <span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid__single_platform'>_single_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__single_arch'>_single_arch</span><span class='comma'>,</span> <span class='id identifier rubyid_single_inst'>single_inst</span><span class='comma'>,</span> <span class='id identifier rubyid_single_modinfo'>single_modinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_single_info'>single_info</span>
<span class='comment'># if the payload has a dependency, check
</span> <span class='comment'># if it is supported on the system
</span> <span class='id identifier rubyid_payload_dependencies'>payload_dependencies</span> <span class='op'>=</span> <span class='id identifier rubyid_single_inst'>single_inst</span><span class='period'>.</span><span class='id identifier rubyid_dependencies'>dependencies</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_payload_dependencies'>payload_dependencies</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_supported'>supported</span> <span class='op'>=</span> <span class='id identifier rubyid_payload_dependencies'>payload_dependencies</span><span class='period'>.</span><span class='id identifier rubyid_all?'>all?</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:available?</span><span class='rparen'>)</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Dependency for </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_single_name'>single_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> is not supported</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_supported'>supported</span>
<span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_supported'>supported</span>
<span class='kw'>end</span>
<span class='comment'># Build the payload dupe using the determined handler
</span> <span class='comment'># and module
</span> <span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_build_payload'>build_payload</span><span class='lparen'>(</span><span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='comment'># Add it to the set
</span> <span class='id identifier rubyid_add_single'>add_single</span><span class='lparen'>(</span><span class='id identifier rubyid_payload'>payload</span><span class='comma'>,</span> <span class='id identifier rubyid_single_name'>single_name</span><span class='comma'>,</span> <span class='id identifier rubyid_single_modinfo'>single_modinfo</span><span class='rparen'>)</span>
<span class='id identifier rubyid_payload'>payload</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="calculate_staged_payload-instance_method">
#<strong>calculate_staged_payload</strong>(stage_name:, stager_name:, stage_info:, stager_info:) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 232</span>
<span class='kw'>def</span> <span class='id identifier rubyid_calculate_staged_payload'>calculate_staged_payload</span><span class='lparen'>(</span><span class='label'>stage_name:</span><span class='comma'>,</span> <span class='label'>stager_name:</span><span class='comma'>,</span> <span class='label'>stage_info:</span><span class='comma'>,</span> <span class='label'>stager_info:</span><span class='rparen'>)</span>
<span class='comment'># if the stager or stage has a dependency, check
</span> <span class='comment'># if they are compatible
</span> <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_stage_and_stager_compatible?'>stage_and_stager_compatible?</span><span class='lparen'>(</span><span class='label'>stager_info:</span> <span class='id identifier rubyid_stager_info'>stager_info</span><span class='comma'>,</span>
<span class='label'>stage_info:</span> <span class='id identifier rubyid_stage_info'>stage_info</span><span class='comma'>,</span>
<span class='label'>stager_name:</span> <span class='id identifier rubyid_stager_name'>stager_name</span><span class='comma'>,</span>
<span class='label'>stage_name:</span> <span class='id identifier rubyid_stage_name'>stage_name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_stager_mod'>stager_mod</span><span class='comma'>,</span> <span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_platform'>_stager_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_arch'>_stager_arch</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_inst'>_stager_inst</span><span class='comma'>,</span> <span class='id identifier rubyid_stager_modinfo'>stager_modinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_stager_info'>stager_info</span>
<span class='id identifier rubyid_stage_mod'>stage_mod</span><span class='comma'>,</span> <span class='id identifier rubyid__'>_</span><span class='comma'>,</span> <span class='id identifier rubyid__stage_platform'>_stage_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__stage_arch'>_stage_arch</span><span class='comma'>,</span> <span class='id identifier rubyid__stage_inst'>_stage_inst</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_modinfo'>stage_modinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_stage_info'>stage_info</span>
<span class='comment'># Build the payload dupe using the handler, stager,
</span> <span class='comment'># and stage
</span> <span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_build_payload'>build_payload</span><span class='lparen'>(</span><span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid_stager_mod'>stager_mod</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_mod'>stage_mod</span><span class='rparen'>)</span>
<span class='comment'># If the stager has an alias for the handler type (such as is the
</span> <span class='comment'># case for ordinal based stagers), use it in preference of the
</span> <span class='comment'># handler&#39;s actual type.
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_stager_mod'>stager_mod</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>handler_type_alias</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='id identifier rubyid_handler_type'>handler_type</span> <span class='op'>=</span> <span class='id identifier rubyid_stager_mod'>stager_mod</span><span class='period'>.</span><span class='id identifier rubyid_handler_type_alias'>handler_type_alias</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_handler_type'>handler_type</span> <span class='op'>=</span> <span class='id identifier rubyid_handler'>handler</span><span class='period'>.</span><span class='id identifier rubyid_handler_type'>handler_type</span>
<span class='kw'>end</span>
<span class='comment'># Associate the name as a combination of the stager and stage
</span> <span class='id identifier rubyid_staged_refname'>staged_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_stage_name'>stage_name</span>
<span class='comment'># If a valid handler exists for this stager, then combine it
</span> <span class='id identifier rubyid_staged_refname'>staged_refname</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_handler_type'>handler_type</span>
<span class='comment'># Sets the modules derived name
</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span> <span class='op'>=</span> <span class='id identifier rubyid_staged_refname'>staged_refname</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_stage_refname'>stage_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_stage_name'>stage_name</span>
<span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_stager_refname'>stager_refname</span> <span class='op'>=</span> <span class='id identifier rubyid_stager_name'>stager_name</span>
<span class='comment'># Add the stage
</span> <span class='id identifier rubyid_add_stage'>add_stage</span><span class='lparen'>(</span><span class='id identifier rubyid_payload'>payload</span><span class='comma'>,</span> <span class='id identifier rubyid_staged_refname'>staged_refname</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_name'>stage_name</span><span class='comma'>,</span> <span class='id identifier rubyid_handler_type'>handler_type</span><span class='comma'>,</span> <span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>files</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_stager_modinfo'>stager_modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>files</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>+</span> <span class='id identifier rubyid_stage_modinfo'>stage_modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>files</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>paths</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_stager_modinfo'>stager_modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>paths</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>+</span> <span class='id identifier rubyid_stage_modinfo'>stage_modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>paths</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_stager_modinfo'>stager_modinfo</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>type</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_payload'>payload</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="check_blob_cache-instance_method">
#<strong>check_blob_cache</strong>(key) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Checks to see if a payload has a blob cache entry. If it does, the blob is returned to the caller.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
587
588
589</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 587</span>
<span class='kw'>def</span> <span class='id identifier rubyid_check_blob_cache'>check_blob_cache</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
<span class='ivar'>@blob_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="each_module_filter-instance_method">
#<strong>each_module_filter</strong>(opts, name, mod) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Performs custom filtering during each_module enumeration. This allows us to filter out certain stagers as necessary.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
60
61
62</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 60</span>
<span class='kw'>def</span> <span class='id identifier rubyid_each_module_filter'>each_module_filter</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="find_payload-instance_method">
#<strong>find_payload</strong>(platform, arch, handler, session, payload_type) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Looks for a payload that matches the specified requirements and returns an instance of that payload.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 449</span>
<span class='kw'>def</span> <span class='id identifier rubyid_find_payload'>find_payload</span><span class='lparen'>(</span><span class='id identifier rubyid_platform'>platform</span><span class='comma'>,</span> <span class='id identifier rubyid_arch'>arch</span><span class='comma'>,</span> <span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid_session'>session</span><span class='comma'>,</span> <span class='id identifier rubyid_payload_type'>payload_type</span><span class='rparen'>)</span>
<span class='comment'># Pre-filter based on platform and architecture.
</span> <span class='id identifier rubyid_each_module'>each_module</span><span class='lparen'>(</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Platform</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_platform'>platform</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Arch</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_arch'>arch</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='op'>|</span>
<span class='id identifier rubyid_p'>p</span> <span class='op'>=</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='comment'># We can&#39;t substitute one generic with another one.
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Generic.html" title="Msf::Payload::Generic (module)">Generic</a></span></span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='comment'># Check to see if the handler classes match.
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_handler'>handler</span> <span class='kw'>and</span> <span class='kw'>not</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_handler_klass'>handler_klass</span><span class='period'>.</span><span class='id identifier rubyid_ancestors'>ancestors</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_handler'>handler</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='comment'># Check to see if the session classes match.
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_session'>session</span> <span class='kw'>and</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_session'>session</span> <span class='kw'>and</span> <span class='kw'>not</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_ancestors'>ancestors</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_session'>session</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='comment'># Check for matching payload types
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_payload_type'>payload_type</span> <span class='kw'>and</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_payload_type'>payload_type</span> <span class='op'>!=</span> <span class='id identifier rubyid_payload_type'>payload_type</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_p'>p</span>
<span class='rbrace'>}</span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="find_payload_from_set-instance_method">
#<strong>find_payload_from_set</strong>(set, platform, arch, handler, session, payload_type) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Looks for a payload from a given set that matches the specified requirements and returns an instance of that payload.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 479</span>
<span class='kw'>def</span> <span class='id identifier rubyid_find_payload_from_set'>find_payload_from_set</span><span class='lparen'>(</span><span class='id identifier rubyid_set'>set</span><span class='comma'>,</span> <span class='id identifier rubyid_platform'>platform</span><span class='comma'>,</span> <span class='id identifier rubyid_arch'>arch</span><span class='comma'>,</span> <span class='id identifier rubyid_handler'>handler</span><span class='comma'>,</span> <span class='id identifier rubyid_session'>session</span><span class='comma'>,</span> <span class='id identifier rubyid_payload_type'>payload_type</span><span class='rparen'>)</span>
<span class='id identifier rubyid_set'>set</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_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='op'>|</span>
<span class='id identifier rubyid_p'>p</span> <span class='op'>=</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='comment'># We can&#39;t substitute one generic with another one.
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Generic.html" title="Msf::Payload::Generic (module)">Generic</a></span></span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='comment'># Check to see if the handler classes match.
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_handler'>handler</span> <span class='kw'>and</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_handler_klass'>handler_klass</span> <span class='op'>!=</span> <span class='id identifier rubyid_handler'>handler</span><span class='rparen'>)</span>
<span class='comment'># Check to see if the session classes match.
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_session'>session</span> <span class='kw'>and</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_session'>session</span> <span class='op'>!=</span> <span class='id identifier rubyid_session'>session</span><span class='rparen'>)</span>
<span class='comment'># Check for matching payload types
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_payload_type'>payload_type</span> <span class='kw'>and</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_payload_type'>payload_type</span> <span class='op'>!=</span> <span class='id identifier rubyid_payload_type'>payload_type</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_p'>p</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="flush_blob_cache-instance_method">
#<strong>flush_blob_cache</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Flushes all entries from the blob cache</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
594
595
596</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 594</span>
<span class='kw'>def</span> <span class='id identifier rubyid_flush_blob_cache'>flush_blob_cache</span>
<span class='ivar'>@blob_cache</span><span class='period'>.</span><span class='id identifier rubyid_clear'>clear</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="instance-instance_method">
#<strong>instance</strong>(name) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns a single read-only instance of the supplied payload name such that specific attributes, like compatibility, can be evaluated. The payload instance returned should NOT be used for anything other than reading.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
548
549
550
551
552
553
554</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 548</span>
<span class='kw'>def</span> <span class='id identifier rubyid_instance'>instance</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid__instances'>_instances</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid__instances'>_instances</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid__instances'>_instances</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="load_payload_component-instance_method">
#<strong>load_payload_component</strong>(payload_type, refname) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 401</span>
<span class='kw'>def</span> <span class='id identifier rubyid_load_payload_component'>load_payload_component</span><span class='lparen'>(</span><span class='id identifier rubyid_payload_type'>payload_type</span><span class='comma'>,</span> <span class='id identifier rubyid_refname'>refname</span><span class='rparen'>)</span>
<span class='id identifier rubyid_payload_type_cache'>payload_type_cache</span><span class='comma'>,</span> <span class='id identifier rubyid_folder_name'>folder_name</span> <span class='op'>=</span> <span class='kw'>case</span> <span class='id identifier rubyid_payload_type'>payload_type</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Single-constant" title="Msf::Payload::Type::Single (constant)">Single</a></span></span>
<span class='lbracket'>[</span><span class='id identifier rubyid__singles'>_singles</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>singles</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stage-constant" title="Msf::Payload::Type::Stage (constant)">Stage</a></span></span>
<span class='lbracket'>[</span><span class='id identifier rubyid__stages'>_stages</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>stages</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Stager-constant" title="Msf::Payload::Type::Stager (constant)">Stager</a></span></span>
<span class='lbracket'>[</span><span class='id identifier rubyid__stagers'>_stagers</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>stagers</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>when</span> <span class='const'><span class='object_link'><a href="Payload.html" title="Msf::Payload (class)">Payload</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html" title="Msf::Payload::Type (module)">Type</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Payload/Type.html#Adapter-constant" title="Msf::Payload::Type::Adapter (constant)">Adapter</a></span></span>
<span class='lbracket'>[</span><span class='id identifier rubyid__adapters'>_adapters</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>adapters</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Invalid payload type: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_payload_type'>payload_type</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_payload_component_info'>payload_component_info</span> <span class='op'>=</span> <span class='id identifier rubyid_payload_type_cache'>payload_type_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_refname'>refname</span><span class='rbracket'>]</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_payload_component_info'>payload_component_info</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="MissingPayloadError.html" title="Msf::MissingPayloadError (class)">MissingPayloadError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_refname'>refname</span><span class='embexpr_end'>}</span><span class='tstring_content'> is not available</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='id identifier rubyid_payload_component_info'>payload_component_info</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="on_module_reload-instance_method">
#<strong>on_module_reload</strong>(mod) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>When a payload module is reloaded, the blob cache entry associated with it must be removed (if one exists)</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
567
568
569
570
571
572
573</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 567</span>
<span class='kw'>def</span> <span class='id identifier rubyid_on_module_reload'>on_module_reload</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='ivar'>@blob_cache</span><span class='period'>.</span><span class='id identifier rubyid_each_key'>each_key</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_start_with?'>start_with?</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span>
<span class='ivar'>@blob_cache</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="recalculate-instance_method">
#<strong>recalculate</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method builds the hash of alias names based on all the permutations of singles, stagers, and stages.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 68</span>
<span class='kw'>def</span> <span class='id identifier rubyid_recalculate'>recalculate</span>
<span class='id identifier rubyid_new_keys'>new_keys</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='comment'># Recalculate single payloads
</span> <span class='id identifier rubyid__singles'>_singles</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_single_name'>single_name</span><span class='comma'>,</span> <span class='id identifier rubyid_single_info'>single_info</span><span class='op'>|</span>
<span class='id identifier rubyid_single_payload'>single_payload</span> <span class='op'>=</span> <span class='id identifier rubyid_calculate_single_payload'>calculate_single_payload</span><span class='lparen'>(</span><span class='label'>single_name:</span> <span class='id identifier rubyid_single_name'>single_name</span><span class='comma'>,</span> <span class='label'>single_info:</span> <span class='id identifier rubyid_single_info'>single_info</span><span class='rparen'>)</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_single_payload'>single_payload</span>
<span class='id identifier rubyid_new_keys'>new_keys</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_single_name'>single_name</span>
<span class='id identifier rubyid__adapters'>_adapters</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='comma'>,</span> <span class='id identifier rubyid_adapter_info'>adapter_info</span><span class='op'>|</span>
<span class='id identifier rubyid_adapted_single'>adapted_single</span> <span class='op'>=</span> <span class='id identifier rubyid_calculate_adapted_single_payload'>calculate_adapted_single_payload</span><span class='lparen'>(</span><span class='label'>adapter_name:</span> <span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='comma'>,</span>
<span class='label'>adapter_info:</span> <span class='id identifier rubyid_adapter_info'>adapter_info</span><span class='comma'>,</span>
<span class='label'>single_info:</span> <span class='id identifier rubyid_single_info'>single_info</span><span class='comma'>,</span>
<span class='label'>single_payload:</span> <span class='id identifier rubyid_single_payload'>single_payload</span><span class='rparen'>)</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_adapted_single'>adapted_single</span>
<span class='id identifier rubyid_new_keys'>new_keys</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_adapted_single'>adapted_single</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='comment'># Recalculate staged payloads
</span> <span class='id identifier rubyid__stagers'>_stagers</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_stager_name'>stager_name</span><span class='comma'>,</span> <span class='id identifier rubyid_stager_info'>stager_info</span><span class='op'>|</span>
<span class='id identifier rubyid__stager_mod'>_stager_mod</span><span class='comma'>,</span> <span class='id identifier rubyid__handler'>_handler</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_platform'>_stager_platform</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_arch'>_stager_arch</span><span class='comma'>,</span> <span class='id identifier rubyid_stager_inst'>stager_inst</span><span class='comma'>,</span> <span class='id identifier rubyid__stager_modinfo'>_stager_modinfo</span> <span class='op'>=</span> <span class='id identifier rubyid_stager_info'>stager_info</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_stager_dependencies_available?'>stager_dependencies_available?</span><span class='lparen'>(</span><span class='label'>stager_name:</span> <span class='id identifier rubyid_stager_name'>stager_name</span><span class='comma'>,</span> <span class='label'>stager_dependencies:</span> <span class='id identifier rubyid_stager_inst'>stager_inst</span><span class='period'>.</span><span class='id identifier rubyid_dependencies'>dependencies</span><span class='rparen'>)</span>
<span class='comment'># Walk the array of stages
</span> <span class='id identifier rubyid__stages'>_stages</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_info'>stage_info</span><span class='op'>|</span>
<span class='id identifier rubyid_staged_payload'>staged_payload</span> <span class='op'>=</span> <span class='id identifier rubyid_calculate_staged_payload'>calculate_staged_payload</span><span class='lparen'>(</span><span class='label'>stage_name:</span> <span class='id identifier rubyid_stage_name'>stage_name</span><span class='comma'>,</span>
<span class='label'>stager_name:</span> <span class='id identifier rubyid_stager_name'>stager_name</span><span class='comma'>,</span>
<span class='label'>stage_info:</span> <span class='id identifier rubyid_stage_info'>stage_info</span><span class='comma'>,</span>
<span class='label'>stager_info:</span> <span class='id identifier rubyid_stager_info'>stager_info</span><span class='rparen'>)</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span>
<span class='id identifier rubyid_new_keys'>new_keys</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span>
<span class='id identifier rubyid__adapters'>_adapters</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='comma'>,</span> <span class='id identifier rubyid_adapter_info'>adapter_info</span><span class='op'>|</span>
<span class='id identifier rubyid_adapted_staged_payload'>adapted_staged_payload</span> <span class='op'>=</span> <span class='id identifier rubyid_calculate_adapted_staged_payload'>calculate_adapted_staged_payload</span><span class='lparen'>(</span><span class='label'>staged_payload:</span> <span class='id identifier rubyid_staged_payload'>staged_payload</span><span class='comma'>,</span>
<span class='label'>adapter_name:</span> <span class='id identifier rubyid_adapter_name'>adapter_name</span><span class='comma'>,</span>
<span class='label'>stage_info:</span> <span class='id identifier rubyid_stage_info'>stage_info</span><span class='comma'>,</span>
<span class='label'>stager_info:</span> <span class='id identifier rubyid_stager_info'>stager_info</span><span class='comma'>,</span>
<span class='label'>adapter_info:</span> <span class='id identifier rubyid_adapter_info'>adapter_info</span><span class='rparen'>)</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_adapted_staged_payload'>adapted_staged_payload</span>
<span class='id identifier rubyid_new_keys'>new_keys</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span> <span class='id identifier rubyid_adapted_staged_payload'>adapted_staged_payload</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='comment'># Blow away anything that was cached but didn&#39;t exist during the
</span> <span class='comment'># recalculation
</span> <span class='id identifier rubyid_replace'>replace</span><span class='lparen'>(</span><span class='id identifier rubyid_slice'>slice</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_new_keys'>new_keys</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_flush_blob_cache'>flush_blob_cache</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="stage_and_stager_compatible?-instance_method">
#<strong>stage_and_stager_compatible?</strong>(stager_info:, stage_info:, stager_name:, stage_name:) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 173</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stage_and_stager_compatible?'>stage_and_stager_compatible?</span><span class='lparen'>(</span><span class='label'>stager_info:</span><span class='comma'>,</span> <span class='label'>stage_info:</span><span class='comma'>,</span> <span class='label'>stager_name:</span><span class='comma'>,</span> <span class='label'>stage_name:</span><span class='rparen'>)</span>
<span class='id identifier rubyid__stager_mod'>_stager_mod</span><span class='comma'>,</span> <span class='id identifier rubyid__handler'>_handler</span><span class='comma'>,</span> <span class='id identifier rubyid_stager_platform'>stager_platform</span><span class='comma'>,</span> <span class='id identifier rubyid_stager_arch'>stager_arch</span><span class='comma'>,</span> <span class='id identifier rubyid_stager_inst'>stager_inst</span> <span class='op'>=</span> <span class='id identifier rubyid_stager_info'>stager_info</span>
<span class='id identifier rubyid__stage_mod'>_stage_mod</span><span class='comma'>,</span> <span class='id identifier rubyid__'>_</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_platform'>stage_platform</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_arch'>stage_arch</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_inst'>stage_inst</span> <span class='op'>=</span> <span class='id identifier rubyid_stage_info'>stage_info</span>
<span class='id identifier rubyid_stager_dependencies'>stager_dependencies</span> <span class='op'>=</span> <span class='id identifier rubyid_stager_inst'>stager_inst</span><span class='period'>.</span><span class='id identifier rubyid_dependencies'>dependencies</span>
<span class='id identifier rubyid_stage_dependencies'>stage_dependencies</span> <span class='op'>=</span> <span class='id identifier rubyid_stage_inst'>stage_inst</span><span class='period'>.</span><span class='id identifier rubyid_dependencies'>dependencies</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_stager_dependencies'>stager_dependencies</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_stage_dependencies'>stage_dependencies</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>unless</span> <span class='id identifier rubyid_stager_dependencies'>stager_dependencies</span> <span class='op'>==</span> <span class='id identifier rubyid_stage_dependencies'>stage_dependencies</span>
<span class='kw'>end</span>
<span class='comment'># No intersection between platforms on the payloads?
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_stager_platform'>stager_platform</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='id identifier rubyid_stage_platform'>stage_platform</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='id identifier rubyid_stager_platform'>stager_platform</span> <span class='op'>&amp;</span> <span class='id identifier rubyid_stage_platform'>stage_platform</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Stager </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_name'>stager_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> and stage </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> have incompatible platforms: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_platform'>stager_platform</span><span class='period'>.</span><span class='id identifier rubyid_names'>names</span><span class='embexpr_end'>}</span><span class='tstring_content'> - </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_platform'>stage_platform</span><span class='period'>.</span><span class='id identifier rubyid_names'>names</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>core</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../Rex/Logging.html#LEV_2-constant" title="Rex::Logging::LEV_2 (constant)">LEV_2</a></span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='comment'># No intersection between architectures on the payloads?
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_stager_arch'>stager_arch</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='id identifier rubyid_stage_arch'>stage_arch</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_stager_arch'>stager_arch</span> <span class='op'>&amp;</span> <span class='id identifier rubyid_stage_arch'>stage_arch</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Stager </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_name'>stager_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> and stage </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> have incompatible architectures: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_arch'>stager_arch</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='embexpr_end'>}</span><span class='tstring_content'> - </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_arch'>stage_arch</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>core</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../Rex/Logging.html#LEV_2-constant" title="Rex::Logging::LEV_2 (constant)">LEV_2</a></span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='comment'># If the stage has a convention, make sure it&#39;s compatible with
</span> <span class='comment'># the stager&#39;s
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_stage_inst'>stage_inst</span><span class='rparen'>)</span> <span class='kw'>and</span> <span class='lparen'>(</span><span class='id identifier rubyid_stage_inst'>stage_inst</span><span class='period'>.</span><span class='id identifier rubyid_compatible?'>compatible?</span><span class='lparen'>(</span><span class='id identifier rubyid_stager_inst'>stager_inst</span><span class='rparen'>)</span> <span class='op'>==</span> <span class='kw'>false</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Stager </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_name'>stager_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> and stage </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> are incompatible.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>core</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../Rex/Logging.html#LEV_2-constant" title="Rex::Logging::LEV_2 (constant)">LEV_2</a></span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='comment'># No intersection between platforms on the payloads?
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_stager_platform'>stager_platform</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='id identifier rubyid_stage_platform'>stage_platform</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='id identifier rubyid_stager_platform'>stager_platform</span> <span class='op'>&amp;</span> <span class='id identifier rubyid_stage_platform'>stage_platform</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Stager </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_name'>stager_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> and stage </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> have incompatible platforms: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_platform'>stager_platform</span><span class='period'>.</span><span class='id identifier rubyid_names'>names</span><span class='embexpr_end'>}</span><span class='tstring_content'> - </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_platform'>stage_platform</span><span class='period'>.</span><span class='id identifier rubyid_names'>names</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>core</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../Rex/Logging.html#LEV_2-constant" title="Rex::Logging::LEV_2 (constant)">LEV_2</a></span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='comment'># No intersection between architectures on the payloads?
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_stager_arch'>stager_arch</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='id identifier rubyid_stage_arch'>stage_arch</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_stager_arch'>stager_arch</span> <span class='op'>&amp;</span> <span class='id identifier rubyid_stage_arch'>stage_arch</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Stager </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_name'>stager_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> and stage </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> have incompatible architectures: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_arch'>stager_arch</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='embexpr_end'>}</span><span class='tstring_content'> - </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_arch'>stage_arch</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>core</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../Rex/Logging.html#LEV_2-constant" title="Rex::Logging::LEV_2 (constant)">LEV_2</a></span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='comment'># If the stage has a convention, make sure it&#39;s compatible with
</span> <span class='comment'># the stager&#39;s
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_stage_inst'>stage_inst</span><span class='rparen'>)</span> <span class='kw'>and</span> <span class='lparen'>(</span><span class='id identifier rubyid_stage_inst'>stage_inst</span><span class='period'>.</span><span class='id identifier rubyid_compatible?'>compatible?</span><span class='lparen'>(</span><span class='id identifier rubyid_stager_inst'>stager_inst</span><span class='rparen'>)</span> <span class='op'>==</span> <span class='kw'>false</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Stager </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_name'>stager_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> and stage </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stage_name'>stage_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> are incompatible.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>core</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../Rex/Logging.html#LEV_2-constant" title="Rex::Logging::LEV_2 (constant)">LEV_2</a></span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='kw'>true</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="stager_dependencies_available?-instance_method">
#<strong>stager_dependencies_available?</strong>(stager_name:, stager_dependencies:) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
162
163
164
165
166
167
168
169
170
171</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 162</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stager_dependencies_available?'>stager_dependencies_available?</span><span class='lparen'>(</span><span class='label'>stager_name:</span><span class='comma'>,</span> <span class='label'>stager_dependencies:</span><span class='rparen'>)</span>
<span class='comment'># Pass if the stager has a dependency
</span> <span class='comment'># and doesn&#39;t have the dependency installed
</span> <span class='id identifier rubyid_supported'>supported</span> <span class='op'>=</span> <span class='kw'>true</span> <span class='comment'># Default to true for stagers with no dependencies
</span> <span class='kw'>unless</span> <span class='id identifier rubyid_stager_dependencies'>stager_dependencies</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_supported'>supported</span> <span class='op'>=</span> <span class='id identifier rubyid_stager_dependencies'>stager_dependencies</span><span class='period'>.</span><span class='id identifier rubyid_all?'>all?</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:available?</span><span class='rparen'>)</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Dependency for </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_stager_name'>stager_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> is not supported</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_supported'>supported</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_supported'>supported</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="stagers-instance_method">
#<strong>stagers</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the hash of payload stagers that have been loaded.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
559
560
561</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/payload_set.rb', line 559</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stagers'>stagers</span>
<span class='id identifier rubyid__stagers'>_stagers</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:03:20 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>