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

1630 lines
73 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::Util::PayloadCachedSize
&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::Util::PayloadCachedSize";
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'><span class='object_link'><a href="../Util.html" title="Msf::Util (module)">Util</a></span></span>
&raquo;
<span class="title">PayloadCachedSize</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Class: Msf::Util::PayloadCachedSize
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName">Object</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Msf::Util::PayloadCachedSize</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/util/payload_cached_size.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>The class provides helper methods for verifying and updating the embedded CachedSize constant within payload modules.</p>
</div>
</div>
<div class="tags">
</div>
<h2>
Constant Summary
<small><a href="#" class="constants_summary_toggle">collapse</a></small>
</h2>
<dl class="constants">
<dt id="OPTS-constant" class="">OPTS =
</dt>
<dd><pre class="code"><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Format</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>raw</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>VERBOSE</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>false</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>CPORT</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>4444</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LPORT</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>4444</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RPORT</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>4444</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>CMD</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/bin/sh</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>URL</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>http://a.com</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PATH</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>BUNDLE</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data/isight.bundle</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DLL</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>external/source/byakugan/bin/XPSP2/detoured.dll</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RC4PASSWORD</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Metasploit</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DNSZONE</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>corelan.eu</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PEXEC</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/bin/sh</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>HttpUserAgent</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>StagerURILength</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>5</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FD</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>100</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>MeterpreterDebugBuild</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>false</span>
<span class='rbrace'>}</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Encoder</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>nil</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DisableNops</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span>
<span class='rbrace'>}</span></pre></dd>
<dt id="OPTS_ARCH_X64-constant" class="">OPTS_ARCH_X64 =
</dt>
<dd><pre class="code"><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DLL</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data/vncdll.x64.dll</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PE</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data/vncdll.x64.dll</span><span class='tstring_end'>&#39;</span></span>
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
<dt id="OPTS_ARCH_X86-constant" class="">OPTS_ARCH_X86 =
</dt>
<dd><pre class="code"><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DLL</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data/vncdll.x86.dll</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PE</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data/vncdll.x86.dll</span><span class='tstring_end'>&#39;</span></span>
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
<dt id="OPTS_IPV4-constant" class="">OPTS_IPV4 =
</dt>
<dd><pre class="code"><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LHOST</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>223.255.255.255</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOST</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>255.255.255.255</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>KHOST</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>255.255.255.255</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>AHOST</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>255.255.255.255</span><span class='tstring_end'>&#39;</span></span>
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
<dt id="OPTS_IPV6-constant" class="">OPTS_IPV6 =
</dt>
<dd><pre class="code"><span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LHOST</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOST</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>KHOST</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>AHOST</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff</span><span class='tstring_end'>&#39;</span></span>
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
</dl>
<h2>
Class Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#cache_size_errors_for-class_method" title="cache_size_errors_for (class method)">.<strong>cache_size_errors_for</strong>(framework, mod) &#x21d2; String<sup>?</sup> </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Checks for errors or inconsistencies in the CachedSize value for a payload module.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#compute_cached_size-class_method" title="compute_cached_size (class method)">.<strong>compute_cached_size</strong>(framework, mod, generation_count: 10) &#x21d2; Integer, String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Calculates the CachedSize value for a payload module.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#is_cached_size_accurate%3F-class_method" title="is_cached_size_accurate? (class method)">.<strong>is_cached_size_accurate?</strong>(framework, mod) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Determines whether a payloads CachedSize is up to date.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#is_dynamic%3F-class_method" title="is_dynamic? (class method)">.<strong>is_dynamic?</strong>(framework, mod, generation_count: 10) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Determines whether a payload generates a static sized output.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#module_options-class_method" title="module_options (class method)">.<strong>module_options</strong>(mod) &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get a set of sane default options for the module so it can generate a payload for size analysis.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#update_cache_constant-class_method" title="update_cache_constant (class method)">.<strong>update_cache_constant</strong>(data, cached_size) &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Inserts or updates the CachedSize constant in the text of a payload module.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#update_cached_size-class_method" title="update_cached_size (class method)">.<strong>update_cached_size</strong>(mod, cached_size) &#x21d2; void </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Insert or update the CachedSize value into a payload module file.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#update_module_cached_size-class_method" title="update_module_cached_size (class method)">.<strong>update_module_cached_size</strong>(framework, mod) &#x21d2; String, Integer </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Updates the payload module specified with the current CachedSize.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#update_stage_sizes_constant-class_method" title="update_stage_sizes_constant (class method)">.<strong>update_stage_sizes_constant</strong>(data, stages_with_sizes) &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Inserts or updates the CachedSizeOverrides constant in the text of a payload module, removing any previous CachedSizeStages, # Other stager sizes, or CachedSizeOverrides lines.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#update_stager_cached_sizes-class_method" title="update_stager_cached_sizes (class method)">.<strong>update_stager_cached_sizes</strong>(mod, stages_with_sizes) &#x21d2; void </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Insert or update the CachedSize value into a payload module file.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#update_stager_module_cached_size-class_method" title="update_stager_module_cached_size (class method)">.<strong>update_stager_module_cached_size</strong>(framework, stages) &#x21d2; Integer, String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Updates the stager payload module with the most frequent CachedSize value and sets CachedSizeOverrides for other stages.</p>
</div></span>
</li>
</ul>
<div id="class_method_details" class="method_details_list">
<h2>Class Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="cache_size_errors_for-class_method">
.<strong>cache_size_errors_for</strong>(framework, mod) &#x21d2; <tt>String</tt><sup>?</sup>
</h3><div class="docstring">
<div class="discussion">
<p>Checks for errors or inconsistencies in the CachedSize value for a payload module. Returns nil if the cache is correct, or a string describing the error if not.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>framework</span>
<span class='type'>(<tt><span class='object_link'><a href="../Framework.html" title="Msf::Framework (class)">Msf::Framework</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The Metasploit framework instance used for payload generation</p>
</div>
</li>
<li>
<span class='name'>mod</span>
<span class='type'>(<tt><span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The payload module to check</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>, <tt>nil</tt>)</span>
&mdash;
<div class='inline'>
<p>Error message if there is a problem, or nil if the cache is correct</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 217</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_cache_size_errors_for'>cache_size_errors_for</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='id identifier rubyid_is_payload_size_different_on_each_generation'>is_payload_size_different_on_each_generation</span> <span class='op'>=</span> <span class='id identifier rubyid_is_dynamic?'>is_dynamic?</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span><span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='id identifier rubyid_module_marked_as_dynamic'>module_marked_as_dynamic</span> <span class='op'>=</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_dynamic_size?'>dynamic_size?</span>
<span class='id identifier rubyid_payload_cached_static_size'>payload_cached_static_size</span> <span class='op'>=</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_cached_size'>cached_size</span>
<span class='comment'># Validate dynamic scenario
</span> <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_is_payload_size_different_on_each_generation'>is_payload_size_different_on_each_generation</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_module_marked_as_dynamic'>module_marked_as_dynamic</span>
<span class='kw'>if</span> <span class='id identifier rubyid_is_payload_size_different_on_each_generation'>is_payload_size_different_on_each_generation</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_module_marked_as_dynamic'>module_marked_as_dynamic</span>
<span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Module generated different sizes for each generation attempt. CacheSize must be set to :dynamic</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_payload_cached_static_size'>payload_cached_static_size</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Module missing CachedSize and not marked as dynamic</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span>
<span class='id identifier rubyid_payload_size_after_one_generation'>payload_size_after_one_generation</span> <span class='op'>=</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_replicant'>replicant</span><span class='period'>.</span><span class='id identifier rubyid_generate_simple'>generate_simple</span><span class='lparen'>(</span><span class='id identifier rubyid_module_options'>module_options</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_bytesize'>bytesize</span>
<span class='comment'># Validate static scenario
</span> <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_payload_cached_static_size'>payload_cached_static_size</span> <span class='op'>==</span> <span class='id identifier rubyid_payload_size_after_one_generation'>payload_size_after_one_generation</span>
<span class='kw'>if</span> <span class='id identifier rubyid_payload_cached_static_size'>payload_cached_static_size</span> <span class='op'>!=</span> <span class='id identifier rubyid_payload_size_after_one_generation'>payload_size_after_one_generation</span>
<span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Module marked as having size </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_payload_cached_static_size'>payload_cached_static_size</span><span class='embexpr_end'>}</span><span class='tstring_content'> but after one generation was </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_payload_size_after_one_generation'>payload_size_after_one_generation</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>unhandled scenario</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="compute_cached_size-class_method">
.<strong>compute_cached_size</strong>(framework, mod, generation_count: 10) &#x21d2; <tt>Integer</tt>, <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Calculates the CachedSize value for a payload module</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>mod</span>
<span class='type'>(<tt><span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The class of the payload module to update</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Integer</tt>, <tt>String</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
171
172
173
174
175</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 171</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_compute_cached_size'>compute_cached_size</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='comma'>,</span> <span class='label'>generation_count:</span> <span class='int'>10</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>:dynamic</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_is_dynamic?'>is_dynamic?</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='comma'>,</span> <span class='label'>generation_count:</span> <span class='id identifier rubyid_generation_count'>generation_count</span><span class='rparen'>)</span>
<span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_replicant'>replicant</span><span class='period'>.</span><span class='id identifier rubyid_generate_simple'>generate_simple</span><span class='lparen'>(</span><span class='id identifier rubyid_module_options'>module_options</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_bytesize'>bytesize</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="is_cached_size_accurate?-class_method">
.<strong>is_cached_size_accurate?</strong>(framework, mod) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Determines whether a payloads CachedSize is up to date</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>mod</span>
<span class='type'>(<tt><span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The class of the payload module to update</p>
</div>
</li>
</ul>
<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">
204
205
206
207
208
209</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 204</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_is_cached_size_accurate?'>is_cached_size_accurate?</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</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'>true</span> <span class='kw'>if</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_dynamic_size?'>dynamic_size?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_is_dynamic?'>is_dynamic?</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</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'>if</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_cached_size'>cached_size</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_cached_size'>cached_size</span> <span class='op'>==</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_replicant'>replicant</span><span class='period'>.</span><span class='id identifier rubyid_generate_simple'>generate_simple</span><span class='lparen'>(</span><span class='id identifier rubyid_module_options'>module_options</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_bytesize'>bytesize</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="is_dynamic?-class_method">
.<strong>is_dynamic?</strong>(framework, mod, generation_count: 10) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Determines whether a payload generates a static sized output</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>mod</span>
<span class='type'>(<tt><span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The class of the payload module to update</p>
</div>
</li>
<li>
<span class='name'>generation_count</span>
<span class='type'>(<tt>Integer</tt>)</span>
<em class="default">(defaults to: <tt>10</tt>)</em>
&mdash;
<div class='inline'>
<p>The number of iterations to use to verify that the size is static.</p>
</div>
</li>
</ul>
<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">
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 183</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_is_dynamic?'>is_dynamic?</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='comma'>,</span> <span class='label'>generation_count:</span> <span class='int'>10</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_const_defined?'>const_defined?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ForceDynamicCachedSize</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='op'>::</span><span class='const'>ForceDynamicCachedSize</span>
<span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='id identifier rubyid_module_options'>module_options</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='id identifier rubyid_last_bytesize'>last_bytesize</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='id identifier rubyid_generation_count'>generation_count</span><span class='period'>.</span><span class='id identifier rubyid_times'>times</span> <span class='kw'>do</span>
<span class='comment'># Ensure a new module instance is created for each attempt, as some options are randomized on load - such as tmp file path names etc
</span> <span class='id identifier rubyid_new_mod'>new_mod</span> <span class='op'>=</span> <span class='id identifier rubyid_framework'>framework</span><span class='period'>.</span><span class='id identifier rubyid_payloads'>payloads</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span><span class='rparen'>)</span>
<span class='id identifier rubyid_bytesize'>bytesize</span> <span class='op'>=</span> <span class='id identifier rubyid_new_mod'>new_mod</span><span class='period'>.</span><span class='id identifier rubyid_generate_simple'>generate_simple</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_bytesize'>bytesize</span>
<span class='id identifier rubyid_last_bytesize'>last_bytesize</span> <span class='op'>||=</span> <span class='id identifier rubyid_bytesize'>bytesize</span>
<span class='kw'>if</span> <span class='id identifier rubyid_last_bytesize'>last_bytesize</span> <span class='op'>!=</span> <span class='id identifier rubyid_bytesize'>bytesize</span>
<span class='kw'>return</span> <span class='kw'>true</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>false</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="module_options-class_method">
.<strong>module_options</strong>(mod) &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get a set of sane default options for the module so it can generate a payload for size analysis.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>mod</span>
<span class='type'>(<tt><span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The class of the payload module to get options for</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 250</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_module_options'>module_options</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#OPTS-constant" title="Msf::Util::PayloadCachedSize::OPTS (constant)">OPTS</a></span></span><span class='period'>.</span><span class='id identifier rubyid_clone'>clone</span>
<span class='comment'># Assign this way to overwrite the Options key of the newly cloned hash
</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_shortname'>shortname</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>6</span><span class='regexp_end'>/</span></span> <span class='op'>?</span> <span class='const'><span class='object_link'><a href="#OPTS_IPV6-constant" title="Msf::Util::PayloadCachedSize::OPTS_IPV6 (constant)">OPTS_IPV6</a></span></span> <span class='op'>:</span> <span class='const'><span class='object_link'><a href="#OPTS_IPV4-constant" title="Msf::Util::PayloadCachedSize::OPTS_IPV4 (constant)">OPTS_IPV4</a></span></span><span class='rparen'>)</span>
<span class='comment'># Extract the AdaptedArch for adaptor payloads, note `mod.adapted_arch` is not part of the public API
</span> <span class='comment'># at this time, but could be in the future. The use of send is safe for now as it is an internal tool
</span> <span class='comment'># with automated tests if the API were to change in the future
</span> <span class='id identifier rubyid_adapted_arch'>adapted_arch</span> <span class='op'>=</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='symbol'>:module_info</span><span class='rparen'>)</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>AdaptedArch</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_adapted_arch'>adapted_arch</span> <span class='op'>==</span> <span class='const'>ARCH_X64</span> <span class='op'>||</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_arch_to_s'>arch_to_s</span> <span class='op'>==</span> <span class='const'>ARCH_X64</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="#OPTS_ARCH_X64-constant" title="Msf::Util::PayloadCachedSize::OPTS_ARCH_X64 (constant)">OPTS_ARCH_X64</a></span></span><span class='rparen'>)</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_adapted_arch'>adapted_arch</span> <span class='op'>==</span> <span class='const'>ARCH_X86</span> <span class='op'>||</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_arch_to_s'>arch_to_s</span> <span class='op'>==</span> <span class='const'>ARCH_X86</span>
<span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="#OPTS_ARCH_X86-constant" title="Msf::Util::PayloadCachedSize::OPTS_ARCH_X86 (constant)">OPTS_ARCH_X86</a></span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_opts'>opts</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="update_cache_constant-class_method">
.<strong>update_cache_constant</strong>(data, cached_size) &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Inserts or updates the CachedSize constant in the text of a payload module.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>data</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The source code of a payload module</p>
</div>
</li>
<li>
<span class='name'>cached_size</span>
<span class='type'>(<tt>String</tt>, <tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>The new value for CachedSize, which should be either an integer or the string ":dynamic"</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The updated source code with the new CachedSize value</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
70
71
72
73
74
75
76</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 70</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_update_cache_constant'>update_cache_constant</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_cached_size'>cached_size</span><span class='rparen'>)</span>
<span class='id identifier rubyid_data'>data</span><span class='period'>.</span>
<span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\s*CachedSize\s*=\s*(\d+|:dynamic).*</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span>
<span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^(module MetasploitModule)\s*\n</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_m'>m</span><span class='op'>|</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span><span class='embexpr_end'>}</span><span class='tstring_content'>\n CachedSize = </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cached_size'>cached_size</span><span class='embexpr_end'>}</span><span class='tstring_content'>\n\n</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="update_cached_size-class_method">
.<strong>update_cached_size</strong>(mod, cached_size) &#x21d2; <tt>void</tt>
</h3><div class="docstring">
<div class="discussion">
<p class="note returns_void">This method returns an undefined value.</p>
<p>Insert or update the CachedSize value into a payload module file</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>mod</span>
<span class='type'>(<tt><span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The class of the payload module to update</p>
</div>
</li>
<li>
<span class='name'>cached_size</span>
<span class='type'>(<tt>String</tt>, <tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>The new value for cached_size, which should be either an integer or the string ":dynamic"</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
102
103
104
105
106
107
108
109
110
111
112
113
114</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 102</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_update_cached_size'>update_cached_size</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='comma'>,</span> <span class='id identifier rubyid_cached_size'>cached_size</span><span class='rparen'>)</span>
<span class='id identifier rubyid_mod_data'>mod_data</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_file_path'>file_path</span> <span class='op'>=</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_file_path'>file_path</span>
<span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>rb</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_fd'>fd</span><span class='op'>|</span>
<span class='id identifier rubyid_mod_data'>mod_data</span> <span class='op'>=</span> <span class='id identifier rubyid_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_stat'>stat</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>wb</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_fd'>fd</span><span class='op'>|</span>
<span class='id identifier rubyid_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span> <span class='id identifier rubyid_update_cache_constant'>update_cache_constant</span><span class='lparen'>(</span><span class='id identifier rubyid_mod_data'>mod_data</span><span class='comma'>,</span> <span class='id identifier rubyid_cached_size'>cached_size</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="update_module_cached_size-class_method">
.<strong>update_module_cached_size</strong>(framework, mod) &#x21d2; <tt>String</tt>, <tt>Integer</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Updates the payload module specified with the current CachedSize</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>framework</span>
<span class='type'>(<tt><span class='object_link'><a href="../Framework.html" title="Msf::Framework (class)">Msf::Framework</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The Metasploit framework instance used for payload generation</p>
</div>
</li>
<li>
<span class='name'>mod</span>
<span class='type'>(<tt><span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The class of the payload module to update</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>, <tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>The updated CachedSize value</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
140
141
142
143
144</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 140</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_update_module_cached_size'>update_module_cached_size</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cached_size'>cached_size</span> <span class='op'>=</span> <span class='id identifier rubyid_compute_cached_size'>compute_cached_size</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span> <span class='id identifier rubyid_mod'>mod</span><span class='rparen'>)</span>
<span class='id identifier rubyid_update_cached_size'>update_cached_size</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='comma'>,</span> <span class='id identifier rubyid_cached_size'>cached_size</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cached_size'>cached_size</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="update_stage_sizes_constant-class_method">
.<strong>update_stage_sizes_constant</strong>(data, stages_with_sizes) &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Inserts or updates the CachedSizeOverrides constant in the text of a payload module, removing any previous CachedSizeStages, # Other stager sizes, or CachedSizeOverrides lines.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>data</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The source code of a payload module</p>
</div>
</li>
<li>
<span class='name'>stages_with_sizes</span>
<span class='type'>(<tt>Array&lt;{:stage =&gt; <span class='object_link'><a href="../Payload/Stager.html" title="Msf::Payload::Stager (module)">Msf::Payload::Stager</a></span>, :size =&gt; Integer}&gt;</tt>)</span>
&mdash;
<div class='inline'>
<p>Array of hashes with :stage (an Msf::Payload::Stager instance) and :size (Integer)</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The updated source code with the new CachedSizeOverrides value</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
84
85
86
87
88
89
90
91
92
93
94</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 84</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_update_stage_sizes_constant'>update_stage_sizes_constant</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_stages_with_sizes'>stages_with_sizes</span><span class='rparen'>)</span>
<span class='id identifier rubyid_sizes'>sizes</span> <span class='op'>=</span> <span class='id identifier rubyid_stages_with_sizes'>stages_with_sizes</span><span class='period'>.</span><span class='id identifier rubyid_sort_by'>sort_by</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='op'>|</span> <span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='lbracket'>[</span><span class='symbol'>:stage</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='op'>|</span>
<span class='lbracket'>[</span><span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='lbracket'>[</span><span class='symbol'>:stage</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_refname'>refname</span><span class='comma'>,</span> <span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='lbracket'>[</span><span class='symbol'>:size</span><span class='rbracket'>]</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_data_without_other_stages'>data_without_other_stages</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\s*CachedSizeOverrides\s*=.*\n</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_data_without_other_stages'>data_without_other_stages</span> <span class='kw'>if</span> <span class='id identifier rubyid_sizes'>sizes</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_data_without_other_stages'>data_without_other_stages</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^\s*(CachedSize\s*=\s*(\d+|:dynamic))\s*\n</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_m'>m</span><span class='op'>|</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span><span class='embexpr_end'>}</span><span class='tstring_content'>\n CachedSizeOverrides = {</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_sizes'>sizes</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='lparen'>(</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_v'>v</span><span class='rparen'>)</span><span class='op'>|</span> <span class='tstring'><span class='tstring_beg'>%Q{</span><span class='tstring_content'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_k'>k</span><span class='embexpr_end'>}</span><span class='tstring_content'>&quot; =&gt; </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_v'>v</span><span class='embexpr_end'>}</span><span class='tstring_end'>}</span></span><span class='rbrace'>}</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='embexpr_end'>}</span><span class='tstring_content'>}\n\n</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="update_stager_cached_sizes-class_method">
.<strong>update_stager_cached_sizes</strong>(mod, stages_with_sizes) &#x21d2; <tt>void</tt>
</h3><div class="docstring">
<div class="discussion">
<p class="note returns_void">This method returns an undefined value.</p>
<p>Insert or update the CachedSize value into a payload module file</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>mod</span>
<span class='type'>(<tt><span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The class of the payload module to update</p>
</div>
</li>
<li>
<span class='name'>stages_with_sizes</span>
<span class='type'>(<tt>Array&lt;{:stage =&gt; <span class='object_link'><a href="../Payload/Stager.html" title="Msf::Payload::Stager (module)">Msf::Payload::Stager</a></span>, :size =&gt; Integer}&gt;</tt>)</span>
&mdash;
<div class='inline'>
<p>Array of hashes with :stage (an Msf::Payload::Stager instance) and :size (Integer)</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
121
122
123
124
125
126
127
128
129
130
131
132
133</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 121</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_update_stager_cached_sizes'>update_stager_cached_sizes</span><span class='lparen'>(</span><span class='id identifier rubyid_mod'>mod</span><span class='comma'>,</span> <span class='id identifier rubyid_stages_with_sizes'>stages_with_sizes</span><span class='rparen'>)</span>
<span class='id identifier rubyid_mod_data'>mod_data</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_file_path'>file_path</span> <span class='op'>=</span> <span class='id identifier rubyid_mod'>mod</span><span class='period'>.</span><span class='id identifier rubyid_file_path'>file_path</span>
<span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>rb</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_fd'>fd</span><span class='op'>|</span>
<span class='id identifier rubyid_mod_data'>mod_data</span> <span class='op'>=</span> <span class='id identifier rubyid_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_stat'>stat</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_file_path'>file_path</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>wb</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_fd'>fd</span><span class='op'>|</span>
<span class='id identifier rubyid_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span> <span class='id identifier rubyid_update_stage_sizes_constant'>update_stage_sizes_constant</span><span class='lparen'>(</span> <span class='id identifier rubyid_mod_data'>mod_data</span><span class='comma'>,</span> <span class='id identifier rubyid_stages_with_sizes'>stages_with_sizes</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="update_stager_module_cached_size-class_method">
.<strong>update_stager_module_cached_size</strong>(framework, stages) &#x21d2; <tt>Integer</tt>, <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Updates the stager payload module with the most frequent CachedSize value and sets CachedSizeOverrides for other stages.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>framework</span>
<span class='type'>(<tt><span class='object_link'><a href="../Framework.html" title="Msf::Framework (class)">Msf::Framework</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>The Metasploit framework instance used for payload generation</p>
</div>
</li>
<li>
<span class='name'>stages</span>
<span class='type'>(<tt>Array&lt;<span class='object_link'><a href="../Payload.html" title="Msf::Payload (class)">Msf::Payload</a></span>&gt;</tt>)</span>
&mdash;
<div class='inline'>
<p>Array of stager modules to update</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Integer</tt>, <tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The new CachedSize value set for the stager</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/util/payload_cached_size.rb', line 151</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_update_stager_module_cached_size'>update_stager_module_cached_size</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span> <span class='id identifier rubyid_stages'>stages</span><span class='rparen'>)</span>
<span class='id identifier rubyid_stages_with_sizes'>stages_with_sizes</span> <span class='op'>=</span> <span class='id identifier rubyid_stages'>stages</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_stage'>stage</span><span class='op'>|</span>
<span class='lbrace'>{</span> <span class='label'>stage:</span> <span class='id identifier rubyid_stage'>stage</span><span class='comma'>,</span> <span class='label'>size:</span> <span class='id identifier rubyid_compute_cached_size'>compute_cached_size</span><span class='lparen'>(</span><span class='id identifier rubyid_framework'>framework</span><span class='comma'>,</span> <span class='id identifier rubyid_stage'>stage</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_most_frequent_cached_size'>most_frequent_cached_size</span> <span class='op'>=</span> <span class='id identifier rubyid_stages_with_sizes'>stages_with_sizes</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='op'>|</span> <span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='lbracket'>[</span><span class='symbol'>:size</span><span class='rbracket'>]</span> <span class='rbrace'>}</span>
<span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_size'>size</span><span class='op'>|</span> <span class='id identifier rubyid_size'>size</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Numeric</span><span class='rparen'>)</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_tally'>tally</span><span class='period'>.</span><span class='id identifier rubyid_sort_by'>sort_by</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:last</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span>
<span class='id identifier rubyid_new_size'>new_size</span> <span class='op'>=</span> <span class='id identifier rubyid_most_frequent_cached_size'>most_frequent_cached_size</span> <span class='op'>||</span> <span class='id identifier rubyid_stages_with_sizes'>stages_with_sizes</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='lbracket'>[</span><span class='symbol'>:size</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_other_sizes'>other_sizes</span> <span class='op'>=</span> <span class='id identifier rubyid_stages_with_sizes'>stages_with_sizes</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='op'>|</span> <span class='id identifier rubyid_stage_with_size'>stage_with_size</span><span class='lbracket'>[</span><span class='symbol'>:size</span><span class='rbracket'>]</span> <span class='op'>!=</span> <span class='id identifier rubyid_new_size'>new_size</span> <span class='rbrace'>}</span>
<span class='id identifier rubyid_update_cached_size'>update_cached_size</span><span class='lparen'>(</span><span class='id identifier rubyid_stages'>stages</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='comma'>,</span> <span class='id identifier rubyid_new_size'>new_size</span><span class='rparen'>)</span>
<span class='id identifier rubyid_update_stager_cached_sizes'>update_stager_cached_sizes</span><span class='lparen'>(</span><span class='id identifier rubyid_stages'>stages</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='comma'>,</span> <span class='id identifier rubyid_other_sizes'>other_sizes</span><span class='rparen'>)</span>
<span class='id identifier rubyid_new_size'>new_size</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:03:30 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>