# # $Id: $ # $Revision: $ # module Msf ### # # This plugin reloads and re-executes a file-format exploit module once it has changed. # ### class Plugin::FFAutoRegen < Msf::Plugin ### # # This class implements a single edit command. # ### class FFAutoRegenCommandDispatcher include Msf::Ui::Console::CommandDispatcher # # The dispatcher's name. # def name "FFAutoRegen" end # # Returns the hash of commands supported by this dispatcher. # def commands { "ffautoregen" => "Automatically regenerate the document when the exploti source changes" } end # # This method handles the command. # def cmd_ffautoregen(*args) if (not active_module) or (not (path = active_module.file_path)) print_line("Error: No active module selected") return nil end last = mt = File.stat(path).mtime loop { sleep(1) mt = File.stat(path).mtime if (mt != last) last = mt omod = active_module nmod = framework.modules.reload_module(active_module) if not nmod print_line("Error: Failed to reload module, trying again on next change...") next end active_module = nmod jobify = false payload = nmod.datastore['PAYLOAD'] encoder = nmod.datastore['ENCODER'] target = nmod.datastore['TARGET'] nop = nmod.datastore['NOP'] nmod.exploit_simple( 'Encoder' => encoder, 'Payload' => payload, 'Target' => target, 'Nop' => nop, # 'OptionStr' => opt_str, 'LocalInput' => driver.input, 'LocalOutput' => driver.output, 'RunAsJob' => jobify) end } end end def initialize(framework, opts) super # console dispatcher commands. add_console_dispatcher(FFAutoRegenCommandDispatcher) end def cleanup remove_console_dispatcher('FFAutoRegen') end def name "ffautoregen" end def desc "FileFormat AutoRegen Plugin" end protected end end