Abstracted extension and module loading. Also checking print_debug for console extension loading. (Fixes issue 324)

git-svn-id: https://beef.googlecode.com/svn/trunk@936 b87d56ec-f9c0-11de-8c8a-61c5e9addfc9
This commit is contained in:
passbe
2011-04-27 05:19:30 +00:00
parent 90e0b30c78
commit 18aaed3572
7 changed files with 64 additions and 25 deletions

10
beef
View File

@@ -5,11 +5,17 @@ $root_dir = File.expand_path('..', __FILE__)
require 'core/loader'
# load config
config = BeEF::Core::Configuration.instance
# Loads extensions
BeEF::Extensions.load
#prints welcome message
BeEF::Extension::Console::Banners.print_welcome_msg
# load config
config = BeEF::Core::Configuration.instance
# Loads modules
BeEF::Modules.load
# disable reverse dns
Socket.do_not_reverse_lookup = true

View File

@@ -16,5 +16,16 @@ module Extension
return (self.is_enabled(ext) and BeEF::Core::Configuration.instance.get('beef.extension.'+ext.to_s+'.loaded') == true)
end
# Loads extension
def self.load(ext)
if File.exists?('extensions/'+ext+'/extension.rb')
require 'extensions/'+ext+'/extension.rb'
print_debug "Loaded extension: '#{ext}'"
BeEF::Core::Configuration.instance.set('beef.extension.'+ext+'.loaded', true)
return true
end
print_error "Unable to load extension '#{ext}'"
return false
end
end
end

View File

@@ -1,6 +1,23 @@
module BeEF
module Extensions
# Return configuration hashes of all extensions that are enabled
def self.get_enabled
return BeEF::Core::Configuration.instance.get('beef.extension').select { |k,v| v['enable'] == true }
end
# Return configuration hashes of all extensions that are loaded
def self.get_loaded
return BeEF::Core::Configuration.instance.get('beef.extension').select {|k,v| v['loaded'] == true }
end
# Loads all enabled extensions
def self.load
self.get_enabled.each { |k,v|
BeEF::Extension.load(k)
}
end
end
end

View File

@@ -39,23 +39,3 @@ require 'core/module'
require 'core/modules'
require 'core/extension'
require 'core/extensions'
config = BeEF::Core::Configuration.instance
# Include extensions defined in the Configuration
extensions = config.get('beef.extension').select{|key, ext| ext['enable'] == true }
extensions.each{ |k,v|
if File.exists?('extensions/'+k+'/extension.rb')
require 'extensions/'+k+'/extension.rb'
end
}
# Include modules defined in the Configuration
modules = config.get('beef.module').select{|key, mod| mod['enable'] == true and mod['category'] != nil }
modules.each{ |k,v|
cat = BeEF::Module.safe_category(v['category'])
if File.exists?('modules/'+cat+'/'+k+'/module.rb')
require 'modules/'+cat+'/'+k+'/module.rb'
config.set('beef.module.'+k+'.loaded', true)
end
}

View File

@@ -15,6 +15,19 @@ module Module
def self.is_loaded(mod)
return (self.is_enabled(mod) and BeEF::Core::Configuration.instance.get('beef.module.'+mod.to_s+'.loaded') == true)
end
# Loads module
def self.load(mod, cat)
cat = BeEF::Module.safe_category(cat)
if File.exists?('modules/'+cat+'/'+mod+'/module.rb')
require 'modules/'+cat+'/'+mod+'/module.rb'
BeEF::Core::Configuration.instance.set('beef.module.'+mod+'.loaded', true)
print_debug "Loaded module: '#{mod}'"
return true
end
print_error "Unable to load module '#{mod}'"
return false
end
# Returns category name in a system folder format
def self.safe_category(cat)

View File

@@ -1,9 +1,21 @@
module BeEF
module Modules
def self.safe_category(cat)
return cat.to_s.strip.downcase.sub(/\s/, '_')
# Return configuration hashes of all modules that are enabled
def self.get_enabled
return BeEF::Core::Configuration.instance.get('beef.module').select {|k,v| v['enable'] == true and v['category'] != nil }
end
# Return configuration hashes of all modules that are loaded
def self.get_loaded
return BeEF::Core::Configuration.instance.get('beef.module').select {|k,v| v['loaded'] == true }
end
# Loads modules
def self.load
self.get_enabled.each { |k,v|
BeEF::Module.load(k, v['category'])
}
end
end
end

View File

@@ -17,7 +17,7 @@ end
#
def print_debug(s)
config = BeEF::Core::Configuration.instance
if config.get('beef.debug') || BeEF::Extension::Console.verbose?
if config.get('beef.debug') || (BeEF::Extension.is_loaded('console') && BeEF::Extension::Console.verbose?)
puts Time.now.localtime.strftime("[%k:%M:%S]")+'[>]'.yellow+' '+s
end
end