Files
metasploit-gs/api/Metasploit/Framework/PasswordCracker/Cracker.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

3898 lines
126 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: Metasploit::Framework::PasswordCracker::Cracker
&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 = "Metasploit::Framework::PasswordCracker::Cracker";
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 (C)</a> &raquo;
<span class='title'><span class='object_link'><a href="../../../Metasploit.html" title="Metasploit (module)">Metasploit</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../../Framework.html" title="Metasploit::Framework (module)">Framework</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../PasswordCracker.html" title="Metasploit::Framework::PasswordCracker (module)">PasswordCracker</a></span></span>
&raquo;
<span class="title">Cracker</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: Metasploit::Framework::PasswordCracker::Cracker
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName">Object</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Metasploit::Framework::PasswordCracker::Cracker</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Includes:</dt>
<dd>ActiveModel::Validations</dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/metasploit/framework/password_crackers/cracker.rb</dd>
</dl>
</div>
<h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#attack-instance_method" title="#attack (instance method)">#<strong>attack</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The attack mode for hashcat to use (not applicable to John).</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#config-instance_method" title="#config (instance method)">#<strong>config</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The path to an optional config file for John to use.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#cracker-instance_method" title="#cracker (instance method)">#<strong>cracker</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Which cracker to use.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#cracker_path-instance_method" title="#cracker_path (instance method)">#<strong>cracker_path</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This attribute allows the user to specify a cracker binary to use.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#fork-instance_method" title="#fork (instance method)">#<strong>fork</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>If the cracker type is john, the amount of forks to specify.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#format-instance_method" title="#format (instance method)">#<strong>format</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>If the cracker type is john, this format will automatically be translated to the hashcat equivalent via jtr_format_to_hashcat_format.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#hash_path-instance_method" title="#hash_path (instance method)">#<strong>hash_path</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The path to the file containing the hashes.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#increment_length-instance_method" title="#increment_length (instance method)">#<strong>increment_length</strong> &#x21d2; Array </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The incremental min and max to use.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#incremental-instance_method" title="#incremental (instance method)">#<strong>incremental</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The incremental mode to use.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#mask-instance_method" title="#mask (instance method)">#<strong>mask</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>If the cracker type is hashcat, If set, the mask to use.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#max_length-instance_method" title="#max_length (instance method)">#<strong>max_length</strong> &#x21d2; Integer </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>An optional maximum length of password to attempt cracking.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#max_runtime-instance_method" title="#max_runtime (instance method)">#<strong>max_runtime</strong> &#x21d2; Integer </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>An optional maximum duration of the cracking attempt in seconds.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#optimize-instance_method" title="#optimize (instance method)">#<strong>optimize</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>If the Optimize flag should be given to Hashcat.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#pot-instance_method" title="#pot (instance method)">#<strong>pot</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The file path to an alternative John pot file to use.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#rules-instance_method" title="#rules (instance method)">#<strong>rules</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The wordlist mangling rules to use inside John/Hashcat.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#wordlist-instance_method" title="#wordlist (instance method)">#<strong>wordlist</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The file path to the wordlist to use.</p>
</div></span>
</li>
</ul>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#binary_path-instance_method" title="#binary_path (instance method)">#<strong>binary_path</strong> &#x21d2; String, NilClass </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method follows a decision tree to determine the path to the cracker binary we should use.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#crack-instance_method" title="#crack (instance method)">#<strong>crack</strong> {|String| ... } &#x21d2; void </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method runs the command from #crack_command and yields each line of output.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#cracker_session_id-instance_method" title="#cracker_session_id (instance method)">#<strong>cracker_session_id</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method is a getter for a random Session ID for the cracker.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#cracker_version-instance_method" title="#cracker_version (instance method)">#<strong>cracker_version</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method returns the version of John the Ripper or Hashcat being used.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#each_cracked_password-instance_method" title="#each_cracked_password (instance method)">#<strong>each_cracked_password</strong> &#x21d2; Array </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This runs the show command in john and yields cracked passwords.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_hashcat-instance_method" title="#get_hashcat (instance method)">#<strong>get_hashcat</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_john-instance_method" title="#get_john (instance method)">#<strong>get_john</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_type-instance_method" title="#get_type (instance method)">#<strong>get_type</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#hashcat_crack_command-instance_method" title="#hashcat_crack_command (instance method)">#<strong>hashcat_crack_command</strong> &#x21d2; Array </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method builds an array for the command to actually run the cracker.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(attributes = {}) &#x21d2; Cracker </a>
</span>
<span class="note title constructor">constructor</span>
<span class="summary_desc"><div class='inline'>
<p>A new instance of Cracker.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#john_config_file-instance_method" title="#john_config_file (instance method)">#<strong>john_config_file</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method returns the path to a default john.conf file.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#john_crack_command-instance_method" title="#john_crack_command (instance method)">#<strong>john_crack_command</strong> &#x21d2; Array </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method builds an array for the command to actually run the cracker.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#john_nolog_format-instance_method" title="#john_nolog_format (instance method)">#<strong>john_nolog_format</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method is used to determine which format of the no log option should be used no-log vs nolog <a href="https://github.com/openwall/john/commit/8982e4f7a2e874aab29807a05b421373015c9b61">github.com/openwall/john/commit/8982e4f7a2e874aab29807a05b421373015c9b61</a> We base this either on a date being in the version, or running the command and checking the output.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#john_pot_file-instance_method" title="#john_pot_file (instance method)">#<strong>john_pot_file</strong> &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method returns the path to a default john.pot file.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#jtr_format_to_hashcat_format-instance_method" title="#jtr_format_to_hashcat_format (instance method)">#<strong>jtr_format_to_hashcat_format</strong>(format) &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method takes a frameworkframework.dbframework.db.credframework.db.cred.privateframework.db.cred.private.jtr_format (string), and returns the string number associated to the hashcat format.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#mode_incremental-instance_method" title="#mode_incremental (instance method)">#<strong>mode_incremental</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method sets the appropriate parameters to run a cracker in incremental mode.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#mode_normal-instance_method" title="#mode_normal (instance method)">#<strong>mode_normal</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method sets the john to normal mode.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#mode_pin-instance_method" title="#mode_pin (instance method)">#<strong>mode_pin</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method sets the appropriate parameters to run a cracker in a pin mode (4-8 digits) on hashcat.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#mode_single-instance_method" title="#mode_single (instance method)">#<strong>mode_single</strong>(file) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method sets the john to single mode.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#mode_wordlist-instance_method" title="#mode_wordlist (instance method)">#<strong>mode_wordlist</strong>(file) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method sets the appropriate parameters to run a cracker in wordlist mode.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#show_command-instance_method" title="#show_command (instance method)">#<strong>show_command</strong> &#x21d2; Array </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This method builds the command to show the cracked passwords.</p>
</div></span>
</li>
</ul>
<div id="constructor_details" class="method_details_list">
<h2>Constructor Details</h2>
<div class="method_details first">
<h3 class="signature first" id="initialize-instance_method">
#<strong>initialize</strong>(attributes = {}) &#x21d2; <tt><span class='object_link'><a href="" title="Metasploit::Framework::PasswordCracker::Cracker (class)">Cracker</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns a new instance of Cracker.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>attributes</span>
<span class='type'>(<tt>Hash{Symbol =&gt; String,nil}</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
117
118
119
120
121</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 117</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_attributes'>attributes</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attributes'>attributes</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_attribute'>attribute</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
<span class='id identifier rubyid_public_send'>public_send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_attribute'>attribute</span><span class='embexpr_end'>}</span><span class='tstring_content'>=</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
<span class='kw'>end</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="attack=-instance_method"></span>
<div class="method_details first">
<h3 class="signature first" id="attack-instance_method">
#<strong>attack</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The attack mode for hashcat to use (not applicable to John).</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The attack mode for hashcat to use (not applicable to John)</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
12
13
14</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 12</span>
<span class='kw'>def</span> <span class='id identifier rubyid_attack'>attack</span>
<span class='ivar'>@attack</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="config=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="config-instance_method">
#<strong>config</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The path to an optional config file for John to use.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The path to an optional config file for John to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
16
17
18</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 16</span>
<span class='kw'>def</span> <span class='id identifier rubyid_config'>config</span>
<span class='ivar'>@config</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="cracker=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="cracker-instance_method">
#<strong>cracker</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns Which cracker to use. john and hashcat are valid.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>Which cracker to use. john and hashcat are valid</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
20
21
22</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 20</span>
<span class='kw'>def</span> <span class='id identifier rubyid_cracker'>cracker</span>
<span class='ivar'>@cracker</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="cracker_path=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="cracker_path-instance_method">
#<strong>cracker_path</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This attribute allows the user to specify a cracker binary to use. If not supplied, the Cracker will search the PATH for a suitable john or hashcat binary and finally fall back to the pre-compiled john versions shipped with Metasploit.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The file path to an alternative cracker binary to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
28
29
30</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 28</span>
<span class='kw'>def</span> <span class='id identifier rubyid_cracker_path'>cracker_path</span>
<span class='ivar'>@cracker_path</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="fork=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="fork-instance_method">
#<strong>fork</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>If the cracker type is john, the amount of forks to specify</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The hash format to try.</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
41
42
43</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 41</span>
<span class='kw'>def</span> <span class='id identifier rubyid_fork'>fork</span>
<span class='ivar'>@fork</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="format=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="format-instance_method">
#<strong>format</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>If the cracker type is john, this format will automatically be translated to the hashcat equivalent via jtr_format_to_hashcat_format</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The hash format to try.</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
35
36
37</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 35</span>
<span class='kw'>def</span> <span class='id identifier rubyid_format'>format</span>
<span class='ivar'>@format</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="hash_path=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="hash_path-instance_method">
#<strong>hash_path</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The path to the file containing the hashes.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The path to the file containing the hashes</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
45
46
47</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 45</span>
<span class='kw'>def</span> <span class='id identifier rubyid_hash_path'>hash_path</span>
<span class='ivar'>@hash_path</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="increment_length=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="increment_length-instance_method">
#<strong>increment_length</strong> &#x21d2; <tt>Array</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The incremental min and max to use.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array</tt>)</span>
&mdash;
<div class='inline'>
<p>The incremental min and max to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
53
54
55</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 53</span>
<span class='kw'>def</span> <span class='id identifier rubyid_increment_length'>increment_length</span>
<span class='ivar'>@increment_length</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="incremental=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="incremental-instance_method">
#<strong>incremental</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The incremental mode to use.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The incremental mode to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
49
50
51</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 49</span>
<span class='kw'>def</span> <span class='id identifier rubyid_incremental'>incremental</span>
<span class='ivar'>@incremental</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="mask=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="mask-instance_method">
#<strong>mask</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>If the cracker type is hashcat, If set, the mask to use. Should consist of the character sets pre-defined by hashcat, such as ?d ?s ?l etc</p>
<pre class="code ruby"><code class="ruby">@return [String] The mask to use
</code></pre>
</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/metasploit/framework/password_crackers/cracker.rb', line 60</span>
<span class='kw'>def</span> <span class='id identifier rubyid_mask'>mask</span>
<span class='ivar'>@mask</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="max_length=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="max_length-instance_method">
#<strong>max_length</strong> &#x21d2; <tt>Integer</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns An optional maximum length of password to attempt cracking.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>An optional maximum length of password to attempt cracking</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
68
69
70</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 68</span>
<span class='kw'>def</span> <span class='id identifier rubyid_max_length'>max_length</span>
<span class='ivar'>@max_length</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="max_runtime=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="max_runtime-instance_method">
#<strong>max_runtime</strong> &#x21d2; <tt>Integer</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns An optional maximum duration of the cracking attempt in seconds.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>An optional maximum duration of the cracking attempt in seconds</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
64
65
66</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 64</span>
<span class='kw'>def</span> <span class='id identifier rubyid_max_runtime'>max_runtime</span>
<span class='ivar'>@max_runtime</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="optimize=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="optimize-instance_method">
#<strong>optimize</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns If the Optimize flag should be given to Hashcat.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
&mdash;
<div class='inline'>
<p>If the Optimize flag should be given to Hashcat</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
72
73
74</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 72</span>
<span class='kw'>def</span> <span class='id identifier rubyid_optimize'>optimize</span>
<span class='ivar'>@optimize</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="pot=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="pot-instance_method">
#<strong>pot</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The file path to an alternative John pot file to use.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The file path to an alternative John pot file to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
76
77
78</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 76</span>
<span class='kw'>def</span> <span class='id identifier rubyid_pot'>pot</span>
<span class='ivar'>@pot</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="rules=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="rules-instance_method">
#<strong>rules</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The wordlist mangling rules to use inside John/Hashcat.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The wordlist mangling rules to use inside John/Hashcat</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
80
81
82</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 80</span>
<span class='kw'>def</span> <span class='id identifier rubyid_rules'>rules</span>
<span class='ivar'>@rules</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="wordlist=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="wordlist-instance_method">
#<strong>wordlist</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns The file path to the wordlist to use.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The file path to the wordlist to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
84
85
86</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 84</span>
<span class='kw'>def</span> <span class='id identifier rubyid_wordlist'>wordlist</span>
<span class='ivar'>@wordlist</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="binary_path-instance_method">
#<strong>binary_path</strong> &#x21d2; <tt>String</tt>, <tt>NilClass</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method follows a decision tree to determine the path to the cracker binary we should use.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>, <tt>NilClass</tt>)</span>
&mdash;
<div class='inline'>
<p>Returns Nil if a binary path could not be found, or a String containing the path to the selected JTR binary on success.</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 302</span>
<span class='kw'>def</span> <span class='id identifier rubyid_binary_path'>binary_path</span>
<span class='comment'># Always prefer a manually entered path
</span> <span class='kw'>if</span> <span class='id identifier rubyid_cracker_path'>cracker_path</span> <span class='op'>&amp;&amp;</span> <span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_file?'>file?</span><span class='lparen'>(</span><span class='id identifier rubyid_cracker_path'>cracker_path</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_cracker_path'>cracker_path</span>
<span class='kw'>else</span>
<span class='kw'>case</span> <span class='id identifier rubyid_cracker'>cracker</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='id identifier rubyid_get_hashcat'>get_hashcat</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='id identifier rubyid_get_john'>get_john</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>auto</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='id identifier rubyid_get_john'>get_john</span> <span class='op'>||</span> <span class='id identifier rubyid_get_hashcat'>get_hashcat</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="PasswordCrackerNotFoundError.html" title="Metasploit::Framework::PasswordCracker::PasswordCrackerNotFoundError (class)">PasswordCrackerNotFoundError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>No suitable Cracker was selected, so a binary could not be found on the system JOHN || HASHCAT</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="PasswordCrackerNotFoundError.html" title="Metasploit::Framework::PasswordCracker::PasswordCrackerNotFoundError (class)">PasswordCrackerNotFoundError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>No suitable john/hashcat binary was found on the system</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_path'>path</span> <span class='op'>&amp;&amp;</span> <span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_file?'>file?</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_path'>path</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="crack-instance_method">
#<strong>crack</strong> {|String| ... } &#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 runs the command from #crack_command and yields each line of output.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Yields:</p>
<ul class="yield">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>a line of output from the cracker command</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
327
328
329
330
331
332
333
334
335
336</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 327</span>
<span class='kw'>def</span> <span class='id identifier rubyid_crack'>crack</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_results'>results</span> <span class='op'>=</span> <span class='id identifier rubyid_john_crack_command'>john_crack_command</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_results'>results</span> <span class='op'>=</span> <span class='id identifier rubyid_hashcat_crack_command'>hashcat_crack_command</span>
<span class='kw'>end</span>
<span class='op'>::</span><span class='const'>IO</span><span class='period'>.</span><span class='id identifier rubyid_popen'>popen</span><span class='lparen'>(</span><span class='id identifier rubyid_results'>results</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_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_each_line'>each_line</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</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="cracker_session_id-instance_method">
#<strong>cracker_session_id</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method is a getter for a random Session ID for the cracker. It allows us to dinstiguish between cracking sessions.</p>
<p>@ return [String] the Session ID to use</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
554
555
556</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 554</span>
<span class='kw'>def</span> <span class='id identifier rubyid_cracker_session_id'>cracker_session_id</span>
<span class='ivar'>@session_id</span> <span class='op'>||=</span> <span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_rand_text_alphanumeric'>rand_text_alphanumeric</span><span class='lparen'>(</span><span class='int'>8</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="cracker_version-instance_method">
#<strong>cracker_version</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method returns the version of John the Ripper or Hashcat being used.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the version detected</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt><span class='object_link'><a href="PasswordCrackerNotFoundError.html" title="Metasploit::Framework::PasswordCracker::PasswordCrackerNotFoundError (class)">PasswordCrackerNotFoundError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>if a suitable cracker binary was never found</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 342</span>
<span class='kw'>def</span> <span class='id identifier rubyid_cracker_version'>cracker_version</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>=</span> <span class='id identifier rubyid_binary_path'>binary_path</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>=</span> <span class='id identifier rubyid_binary_path'>binary_path</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'> -V</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='op'>::</span><span class='const'>IO</span><span class='period'>.</span><span class='id identifier rubyid_popen'>popen</span><span class='lparen'>(</span><span class='id identifier rubyid_cmd'>cmd</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_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_each_line'>each_line</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_line'>line</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># John the Ripper 1.8.0.13-jumbo-1-bleeding-973a245b96 2018-12-17 20:12:51 +0100 OMP [linux-gnu 64-bit x86_64 AVX2 AC]
</span> <span class='comment'># John the Ripper 1.9.0-jumbo-1 OMP [linux-gnu 64-bit x86_64 AVX2 AC]
</span> <span class='comment'># John the Ripper password cracker, version 1.8.0.2-bleeding-jumbo_omp [64-bit AVX-autoconf]
</span> <span class='comment'># John the Ripper password cracker, version 1.8.0
</span> <span class='kw'>return</span> <span class='const'>Regexp</span><span class='period'>.</span><span class='id identifier rubyid_last_match'>last_match</span><span class='lparen'>(</span><span class='int'>1</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span> <span class='kw'>if</span> <span class='id identifier rubyid_line'>line</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>John the Ripper(?: password cracker, version)? ([^\[]+)</span><span class='regexp_end'>/</span></span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># v5.1.0
</span> <span class='kw'>return</span> <span class='const'>Regexp</span><span class='period'>.</span><span class='id identifier rubyid_last_match'>last_match</span><span class='lparen'>(</span><span class='int'>1</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_line'>line</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(v[\d.]+)</span><span class='regexp_end'>/</span></span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="each_cracked_password-instance_method">
#<strong>each_cracked_password</strong> &#x21d2; <tt>Array</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This runs the show command in john and yields cracked passwords.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array</tt>)</span>
&mdash;
<div class='inline'>
<p>the output from the command split on newlines</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
532
533
534</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 532</span>
<span class='kw'>def</span> <span class='id identifier rubyid_each_cracked_password'>each_cracked_password</span>
<span class='op'>::</span><span class='const'>IO</span><span class='period'>.</span><span class='id identifier rubyid_popen'>popen</span><span class='lparen'>(</span><span class='id identifier rubyid_show_command'>show_command</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='period'>.</span><span class='id identifier rubyid_readlines'>readlines</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_hashcat-instance_method">
#<strong>get_hashcat</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
580
581
582
583
584
585</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 580</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_hashcat'>get_hashcat</span>
<span class='comment'># Look in the Environment PATH for the hashcat binary
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>FileUtils</span><span class='period'>.</span><span class='id identifier rubyid_find_full_path'>find_full_path</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>||</span>
<span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>FileUtils</span><span class='period'>.</span><span class='id identifier rubyid_find_full_path'>find_full_path</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat.exe</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="get_john-instance_method">
#<strong>get_john</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
587
588
589
590
591
592</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 587</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_john'>get_john</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># Look in the Environment PATH for the john binary
</span> <span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>FileUtils</span><span class='period'>.</span><span class='id identifier rubyid_find_full_path'>find_full_path</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>||</span>
<span class='const'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>FileUtils</span><span class='period'>.</span><span class='id identifier rubyid_find_full_path'>find_full_path</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john.exe</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="get_type-instance_method">
#<strong>get_type</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
123
124
125</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 123</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_type'>get_type</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_cracker'>cracker</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="hashcat_crack_command-instance_method">
#<strong>hashcat_crack_command</strong> &#x21d2; <tt>Array</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method builds an array for the command to actually run the cracker. It builds the command from all of the attributes on the class.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array</tt>)</span>
&mdash;
<div class='inline'>
<p>An array set up for IO.popen to use</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt><span class='object_link'><a href="PasswordCrackerNotFoundError.html" title="Metasploit::Framework::PasswordCracker::PasswordCrackerNotFoundError (class)">PasswordCrackerNotFoundError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>if a suitable Hashcat binary was never found</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
447
448
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
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 447</span>
<span class='kw'>def</span> <span class='id identifier rubyid_hashcat_crack_command'>hashcat_crack_command</span>
<span class='id identifier rubyid_cmd_string'>cmd_string</span> <span class='op'>=</span> <span class='id identifier rubyid_binary_path'>binary_path</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_cmd_string'>cmd_string</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--session=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_cracker_session_id'>cracker_session_id</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--logfile-disable</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'>--quiet</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'>--username</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_pot'>pot</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--potfile-path=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_pot'>pot</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--potfile-path=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_john_pot_file'>john_pot_file</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--hash-type=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_jtr_format_to_hashcat_format'>jtr_format_to_hashcat_format</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_optimize'>optimize</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='comment'># https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#what_is_the_maximum_supported_password_length_for_optimized_kernels
</span> <span class='comment'># Optimized Kernels has a large impact on speed. Here are some stats from Hashcat 5.1.0:
</span>
<span class='comment'># Kali Linux on Dell Precision M3800
</span> <span class='comment'>## hashcat -b -w 2 -m 0
</span> <span class='comment'># * Device #1: Quadro K1100M, 500/2002 MB allocatable, 2MCU
</span> <span class='comment'># Speed.#1.........: 185.9 MH/s (11.15ms) @ Accel:64 Loops:16 Thr:1024 Vec:1
</span>
<span class='comment'>## hashcat -b -w 2 -O -m 0
</span> <span class='comment'># * Device #1: Quadro K1100M, 500/2002 MB allocatable, 2MCU
</span> <span class='comment'># Speed.#1.........: 463.6 MH/s (8.92ms) @ Accel:64 Loops:32 Thr:1024 Vec:1
</span>
<span class='comment'># Windows 10
</span> <span class='comment'># PS C:\hashcat-5.1.0&gt; .\hashcat64.exe -b -O -w 2 -m 0
</span> <span class='comment'># * Device #1: GeForce RTX 2070 SUPER, 2048/8192 MB allocatable, 40MCU
</span> <span class='comment'># Speed.#1.........: 13914.0 MH/s (5.77ms) @ Accel:128 Loops:64 Thr:256 Vec:1
</span>
<span class='comment'># PS C:\hashcat-5.1.0&gt; .\hashcat64.exe -b -O -w 2 -m 0
</span> <span class='comment'># * Device #1: GeForce RTX 2070 SUPER, 2048/8192 MB allocatable, 40MCU
</span> <span class='comment'># Speed.#1.........: 31545.6 MH/s (10.36ms) @ Accel:256 Loops:128 Thr:256 Vec:1
</span>
<span class='comment'># This change should result in 225%-250% speed boost at the sacrifice of some password length, which most likely
</span> <span class='comment'># wouldn&#39;t be tested inside of MSF since most users are using the MSF modules for word list and easy cracks.
</span> <span class='comment'># Anything of length where this would cut off is most likely being done independently (outside MSF)
</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>-O</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_incremental'>incremental</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--increment</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_increment_length'>increment_length</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--increment-min=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_increment_length'>increment_length</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--increment-max=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_increment_length'>increment_length</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='comment'># anything more than max 4 on even des took 8+min on an i7.
</span> <span class='comment'># maybe in the future this can be adjusted or made a variable
</span> <span class='comment'># but current time, we&#39;ll leave it as this seems like reasonable
</span> <span class='comment'># time expectation for a module to run
</span> <span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--increment-max=4</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_rules'>rules</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--rules-file=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_rules'>rules</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_attack'>attack</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--attack-mode=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_attack'>attack</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_max_runtime'>max_runtime</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--runtime=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_max_runtime'>max_runtime</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_hash_path'>hash_path</span>
<span class='kw'>if</span> <span class='id identifier rubyid_mask'>mask</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_mask'>mask</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
<span class='kw'>end</span>
<span class='comment'># must be last
</span> <span class='kw'>if</span> <span class='id identifier rubyid_wordlist'>wordlist</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='id identifier rubyid_wordlist'>wordlist</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_cmd'>cmd</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="john_config_file-instance_method">
#<strong>john_config_file</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method returns the path to a default john.conf file.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the path to the default john.conf file</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
539
540
541</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 539</span>
<span class='kw'>def</span> <span class='id identifier rubyid_john_config_file'>john_config_file</span>
<span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</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="../../../Msf/Config.html" title="Msf::Config (class)">Config</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data_directory'><span class='object_link'><a href="../../../Msf/Config.html#data_directory-class_method" title="Msf::Config.data_directory (method)">data_directory</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>jtr</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'>john.conf</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="john_crack_command-instance_method">
#<strong>john_crack_command</strong> &#x21d2; <tt>Array</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method builds an array for the command to actually run the cracker. It builds the command from all of the attributes on the class.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array</tt>)</span>
&mdash;
<div class='inline'>
<p>An array set up for IO.popen to use</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt><span class='object_link'><a href="PasswordCrackerNotFoundError.html" title="Metasploit::Framework::PasswordCracker::PasswordCrackerNotFoundError (class)">PasswordCrackerNotFoundError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>if a suitable John binary was never found</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 394</span>
<span class='kw'>def</span> <span class='id identifier rubyid_john_crack_command'>john_crack_command</span>
<span class='id identifier rubyid_cmd_string'>cmd_string</span> <span class='op'>=</span> <span class='id identifier rubyid_binary_path'>binary_path</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_cmd_string'>cmd_string</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--session=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_cracker_session_id'>cracker_session_id</span><span class='comma'>,</span> <span class='id identifier rubyid_john_nolog_format'>john_nolog_format</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_config'>config</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--config=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_config'>config</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--config=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_john_config_file'>john_config_file</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_pot'>pot</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--pot=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_pot'>pot</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--pot=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_john_pot_file'>john_pot_file</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_fork'>fork</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_fork'>fork</span> <span class='op'>&gt;</span> <span class='int'>1</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--fork=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_fork'>fork</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_format'>format</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</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'>+</span> <span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_wordlist'>wordlist</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--wordlist=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_wordlist'>wordlist</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_incremental'>incremental</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--incremental=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_incremental'>incremental</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_rules'>rules</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--rules=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_rules'>rules</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_max_runtime'>max_runtime</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--max-run-time=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_max_runtime'>max_runtime</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_max_length'>max_length</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--max-len=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_max_length'>max_length</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_hash_path'>hash_path</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="john_nolog_format-instance_method">
#<strong>john_nolog_format</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method is used to determine which format of the no log option should be used no-log vs nolog <a href="https://github.com/openwall/john/commit/8982e4f7a2e874aab29807a05b421373015c9b61">github.com/openwall/john/commit/8982e4f7a2e874aab29807a05b421373015c9b61</a> We base this either on a date being in the version, or running the command and checking the output</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The nolog format to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 371</span>
<span class='kw'>def</span> <span class='id identifier rubyid_john_nolog_format'>john_nolog_format</span>
<span class='kw'>if</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(\d{4}-\d{2}-\d{2})</span><span class='regexp_end'>/</span></span> <span class='op'>=~</span> <span class='id identifier rubyid_cracker_version'>cracker_version</span>
<span class='comment'># we lucked out and theres a date, we&#39;ll check its older than the commit that changed the nolog
</span> <span class='kw'>if</span> <span class='const'>Date</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='const'>Regexp</span><span class='period'>.</span><span class='id identifier rubyid_last_match'>last_match</span><span class='lparen'>(</span><span class='int'>1</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='op'>&lt;</span> <span class='const'>Date</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2020-11-27</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--nolog</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--no-log</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span>
<span class='comment'># no date, so lets give it a run with the old format and check if we raise an error
</span> <span class='comment'># on *nix &#39;unknown option&#39; goes to stderr
</span> <span class='op'>::</span><span class='const'>IO</span><span class='period'>.</span><span class='id identifier rubyid_popen'>popen</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='id identifier rubyid_binary_path'>binary_path</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--nolog</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>err:</span> <span class='qsymbols_beg'>%i[</span><span class='tstring_content'>child</span><span class='words_sep'> </span><span class='tstring_content'>out</span><span class='tstring_end'>]</span></span> <span class='rbrace'>}</span><span class='rbracket'>]</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='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--nolog</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_fd'>fd</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Unknown option</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--no-log</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="john_pot_file-instance_method">
#<strong>john_pot_file</strong> &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method returns the path to a default john.pot file.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the path to the default john.pot file</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
546
547
548</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 546</span>
<span class='kw'>def</span> <span class='id identifier rubyid_john_pot_file'>john_pot_file</span>
<span class='op'>::</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</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="../../../Msf/Config.html" title="Msf::Config (class)">Config</a></span></span><span class='period'>.</span><span class='id identifier rubyid_config_directory'><span class='object_link'><a href="../../../Msf/Config.html#config_directory-class_method" title="Msf::Config.config_directory (method)">config_directory</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john.pot</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="jtr_format_to_hashcat_format-instance_method">
#<strong>jtr_format_to_hashcat_format</strong>(format) &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method takes a Metasploit::Framework::PasswordCracker::Cracker.frameworkframework.dbframework.db.credframework.db.cred.privateframework.db.cred.private.jtr_format (string), and returns the string number associated to the hashcat format</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>format</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>A jtr_format string</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 format number for Hashcat</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
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</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 132</span>
<span class='kw'>def</span> <span class='id identifier rubyid_jtr_format_to_hashcat_format'>jtr_format_to_hashcat_format</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span>
<span class='kw'>case</span> <span class='id identifier rubyid_format'>format</span>
<span class='comment'># nix
</span> <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>md5crypt</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>500</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>descrypt</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1500</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bsdicrypt</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>12400</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>sha256crypt</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>7400</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>sha512crypt</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1800</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bcrypt</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>3200</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># windows
</span> <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>lm</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'>lanman</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>3000</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>nt</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'>ntlm</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1000</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mscash</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1100</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mscash2</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2100</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>netntlm</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>5500</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>netntlmv2</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>5600</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># dbs
</span> <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mssql</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>131</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mssql05</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>132</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mssql12</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1731</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># hashcat requires a format we dont have all the data for
</span> <span class='comment'># in the current dumper, so this is disabled in module and lib
</span> <span class='comment'># when &#39;oracle&#39;, &#39;des,oracle&#39;
</span> <span class='comment'># return &#39;3100&#39;
</span> <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>oracle11</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'>raw-sha1,oracle</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>112</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>oracle12c</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'>pbkdf2,oracle12c</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>12300</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>postgres</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'>dynamic_1034</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'>raw-md5,postgres</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>12</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mysql</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>200</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mysql-sha1</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>300</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PBKDF2-HMAC-SHA512</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># osx 10.8+
</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>7100</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># osx
</span> <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>xsha</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># osx 10.4-6
</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>122</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>xsha512</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># osx 10.7
</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1722</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># webapps
</span> <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PBKDF2-HMAC-SHA1</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># Atlassian
</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>12001</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>phpass</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># Wordpress/PHPass, Joomla, phpBB3
</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>400</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mediawiki</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># mediawiki b type
</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>3711</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># mobile
</span> <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>android-samsung-sha1</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>5800</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>android-sha1</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>110</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>android-md5</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>10</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hmac-md5</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>10200</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dynamic_82</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1710</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ssha</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>111</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>raw-sha512</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1700</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>raw-sha256</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1400</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>raw-sha1</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>100</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>raw-md5</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>smd5</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>6300</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ssha256</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1411</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ssha512</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1711</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Raw-MD5u</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>30</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pbkdf2-sha256</span><span class='tstring_end'>&#39;</span></span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>10900</span><span class='tstring_end'>&#39;</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="mode_incremental-instance_method">
#<strong>mode_incremental</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method sets the appropriate parameters to run a cracker in incremental mode</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
230
231
232
233
234
235
236
237
238
239
240
241
242</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 230</span>
<span class='kw'>def</span> <span class='id identifier rubyid_mode_incremental'>mode_incremental</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_increment_length'>increment_length</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_wordlist'>wordlist</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_mask'>mask</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_max_runtime'>max_runtime</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_rules'>rules</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_incremental'>incremental</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Digits</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attack'>attack</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>3</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_incremental'>incremental</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="mode_normal-instance_method">
#<strong>mode_normal</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method sets the john to normal mode</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
274
275
276
277
278
279
280
281
282
283</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 274</span>
<span class='kw'>def</span> <span class='id identifier rubyid_mode_normal'>mode_normal</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_max_runtime'>max_runtime</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_mask'>mask</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_wordlist'>wordlist</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_rules'>rules</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_incremental'>incremental</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_increment_length'>increment_length</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="mode_pin-instance_method">
#<strong>mode_pin</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method sets the appropriate parameters to run a cracker in a pin mode (4-8 digits) on hashcat</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
262
263
264
265
266
267
268
269
270
271</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 262</span>
<span class='kw'>def</span> <span class='id identifier rubyid_mode_pin'>mode_pin</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_rules'>rules</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attack'>attack</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>3</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_mask'>mask</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>?d</span><span class='tstring_end'>&#39;</span></span> <span class='op'>*</span> <span class='int'>8</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_incremental'>incremental</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_increment_length'>increment_length</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='int'>4</span><span class='comma'>,</span> <span class='int'>8</span><span class='rbracket'>]</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_max_runtime'>max_runtime</span> <span class='op'>=</span> <span class='int'>300</span> <span class='comment'># 5min on an i7 got through 4-7 digits. 8digit was 32min more
</span> <span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="mode_single-instance_method">
#<strong>mode_single</strong>(file) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method sets the john to single mode</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>file</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>A file location of the wordlist to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
288
289
290
291
292
293
294
295
296</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 288</span>
<span class='kw'>def</span> <span class='id identifier rubyid_mode_single'>mode_single</span><span class='lparen'>(</span><span class='id identifier rubyid_file'>file</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_wordlist'>wordlist</span> <span class='op'>=</span> <span class='id identifier rubyid_file'>file</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_rules'>rules</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>single</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_incremental'>incremental</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_increment_length'>increment_length</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_mask'>mask</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="mode_wordlist-instance_method">
#<strong>mode_wordlist</strong>(file) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method sets the appropriate parameters to run a cracker in wordlist mode</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>file</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>A file location of the wordlist to use</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
247
248
249
250
251
252
253
254
255
256
257
258
259</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 247</span>
<span class='kw'>def</span> <span class='id identifier rubyid_mode_wordlist'>mode_wordlist</span><span class='lparen'>(</span><span class='id identifier rubyid_file'>file</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_increment_length'>increment_length</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_incremental'>incremental</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_max_runtime'>max_runtime</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_mask'>mask</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_wordlist'>wordlist</span> <span class='op'>=</span> <span class='id identifier rubyid_file'>file</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_rules'>rules</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>wordlist</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_wordlist'>wordlist</span> <span class='op'>=</span> <span class='id identifier rubyid_file'>file</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attack'>attack</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0</span><span class='tstring_end'>&#39;</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="show_command-instance_method">
#<strong>show_command</strong> &#x21d2; <tt>Array</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This method builds the command to show the cracked passwords.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array</tt>)</span>
&mdash;
<div class='inline'>
<p>An array set up for IO.popen to use</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>JohnNotFoundError</tt>)</span>
&mdash;
<div class='inline'>
<p>if a suitable John binary was never found</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/metasploit/framework/password_crackers/cracker.rb', line 562</span>
<span class='kw'>def</span> <span class='id identifier rubyid_show_command'>show_command</span>
<span class='id identifier rubyid_cmd_string'>cmd_string</span> <span class='op'>=</span> <span class='id identifier rubyid_binary_path'>binary_path</span>
<span class='id identifier rubyid_pot_file'>pot_file</span> <span class='op'>=</span> <span class='id identifier rubyid_pot'>pot</span> <span class='op'>||</span> <span class='id identifier rubyid_john_pot_file'>john_pot_file</span>
<span class='kw'>if</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>hashcat</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_cmd_string'>cmd_string</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--show</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'>--username</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>--potfile-path=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_pot_file'>pot_file</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>--hash-type=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_jtr_format_to_hashcat_format'>jtr_format_to_hashcat_format</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_cracker'>cracker</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>john</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_cmd_string'>cmd_string</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--show</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>--pot=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_pot_file'>pot_file</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>--format=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_format'>format</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_config'>config</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>--config=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_config'>config</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>else</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>--config=</span><span class='tstring_end'>&#39;</span></span> <span class='op'>+</span> <span class='id identifier rubyid_john_config_file'>john_config_file</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_cmd'>cmd</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_hash_path'>hash_path</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:04:03 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>