Namespace modules using full name instead of hex

This commit is contained in:
William Vu 2018-10-01 11:24:03 -05:00
parent e0f7c747e5
commit 46e7b8ac98
2 changed files with 34 additions and 37 deletions

View File

@ -503,9 +503,7 @@ class Msf::Modules::Loader::Base
# Returns an Array of names to make a fully qualified module name to # Returns an Array of names to make a fully qualified module name to
# wrap the MetasploitModule class so that it doesn't overwrite other # wrap the MetasploitModule class so that it doesn't overwrite other
# (metasploit) module's classes. Invalid module name characters are # (metasploit) module's classes.
# escaped by using 'H*' unpacking and prefixing each code with X so
# the code remains a valid module name when it starts with a digit.
# #
# @param [String] module_full_name The unique canonical name # @param [String] module_full_name The unique canonical name
# for the module including type. # for the module including type.
@ -513,7 +511,18 @@ class Msf::Modules::Loader::Base
# #
# @see namespace_module # @see namespace_module
def namespace_module_names(module_full_name) def namespace_module_names(module_full_name)
NAMESPACE_MODULE_NAMES + [ "Mod" + module_full_name.unpack("H*").first.downcase ] relative_name = module_full_name.split('/').map(&:capitalize).join('__')
NAMESPACE_MODULE_NAMES + [relative_name]
end
# This reverses a namespace module's relative name to a module full name
#
# @param [String] relative_name The namespace module's relative name
# @return [String] The module full name
#
# @see namespace_module_names
def reverse_relative_name(relative_name)
relative_name.split('__').map(&:downcase).join('/')
end end
def namespace_module_transaction(module_full_name, options={}, &block) def namespace_module_transaction(module_full_name, options={}, &block)

View File

@ -103,7 +103,7 @@ RSpec.describe Msf::Modules::Loader::Base do
include_context 'Metasploit::Framework::Spec::Constants cleaner' include_context 'Metasploit::Framework::Spec::Constants cleaner'
let(:namespace_module_names) do let(:namespace_module_names) do
['Msf', 'Modules', 'Mod617578696c696172792f72737065632f6d6f636b'] ['Msf', 'Modules', 'Auxiliary__Rspec__Mock']
end end
let(:namespace_module) do let(:namespace_module) do
@ -291,7 +291,7 @@ RSpec.describe Msf::Modules::Loader::Base do
end end
let(:relative_name) do let(:relative_name) do
'Mod617578696c696172792f72737065632f6d6f636b' 'Auxiliary__Rspec__Mock'
end end
before(:example) do before(:example) do
@ -308,7 +308,7 @@ RSpec.describe Msf::Modules::Loader::Base do
# create an namespace module that can be restored # create an namespace module that can be restored
module Msf module Msf
module Modules module Modules
module Mod617578696c696172792f72737065632f6d6f636b module Auxiliary__Rspec__Mock
class MetasploitModule < Msf::Auxiliary class MetasploitModule < Msf::Auxiliary
end end
@ -316,7 +316,7 @@ RSpec.describe Msf::Modules::Loader::Base do
end end
end end
@original_namespace_module = Msf::Modules::Mod617578696c696172792f72737065632f6d6f636b @original_namespace_module = Msf::Modules::Auxiliary__Rspec__Mock
module_set = double('Module Set') module_set = double('Module Set')
allow(module_set).to receive(:delete).with(module_reference_name) allow(module_set).to receive(:delete).with(module_reference_name)
@ -549,7 +549,7 @@ RSpec.describe Msf::Modules::Loader::Base do
end end
let(:relative_name) do let(:relative_name) do
'Mod0' 'Auxiliary__Rspec__Mock'
end end
before(:example) do before(:example) do
@ -640,7 +640,7 @@ RSpec.describe Msf::Modules::Loader::Base do
end end
let(:relative_name) do let(:relative_name) do
'Mod0' 'Auxiliary__Rspec__Mock'
end end
before(:example) do before(:example) do
@ -662,12 +662,12 @@ RSpec.describe Msf::Modules::Loader::Base do
it 'should return the module if it is defined' do it 'should return the module if it is defined' do
module Msf module Msf
module Modules module Modules
module Mod0 module Auxiliary__Rspec__Mock
end end
end end
end end
expect(subject.send(:current_module, module_names)).to eq Msf::Modules::Mod0 expect(subject.send(:current_module, module_names)).to eq Msf::Modules::Auxiliary__Rspec__Mock
end end
end end
@ -735,18 +735,12 @@ RSpec.describe Msf::Modules::Loader::Base do
expect(subject.send(:namespace_module_name, module_full_name)).to start_with('Msf::Modules::') expect(subject.send(:namespace_module_name, module_full_name)).to start_with('Msf::Modules::')
end end
it 'should prefix the relative name with Mod' do
namespace_module_name = subject.send(:namespace_module_name, module_full_name)
relative_name = namespace_module_name.gsub(/^.*::/, '')
expect(relative_name).to start_with('Mod')
end
it 'should be reversible' do it 'should be reversible' do
namespace_module_name = subject.send(:namespace_module_name, module_full_name) namespace_module_name = subject.send(:namespace_module_name, module_full_name)
unpacked_name = namespace_module_name.gsub(/^.*::Mod/, '') relative_name = namespace_module_name.gsub(/^.*::/, '')
reversed_name = subject.send(:reverse_relative_name, relative_name)
expect([unpacked_name].pack('H*')).to eq module_full_name expect(reversed_name).to eq module_full_name
end end
end end
@ -755,18 +749,12 @@ RSpec.describe Msf::Modules::Loader::Base do
expect(subject.send(:namespace_module_names, module_full_name)).to start_with(['Msf', 'Modules']) expect(subject.send(:namespace_module_names, module_full_name)).to start_with(['Msf', 'Modules'])
end end
it 'should prefix the relative name with Mod' do
namespace_module_names = subject.send(:namespace_module_names, module_full_name)
expect(namespace_module_names.last).to start_with('Mod')
end
it 'should be reversible' do it 'should be reversible' do
namespace_module_names = subject.send(:namespace_module_names, module_full_name) namespace_module_names = subject.send(:namespace_module_names, module_full_name)
relative_name = namespace_module_names.last relative_name = namespace_module_names.last
unpacked_name = relative_name.gsub(/^Mod/, '') reversed_name = subject.send(:reverse_relative_name, relative_name)
expect([unpacked_name].pack('H*')).to eq module_full_name expect(reversed_name).to eq module_full_name
end end
end end
@ -774,14 +762,14 @@ RSpec.describe Msf::Modules::Loader::Base do
include_context 'Metasploit::Framework::Spec::Constants cleaner' include_context 'Metasploit::Framework::Spec::Constants cleaner'
let(:relative_name) do let(:relative_name) do
'Mod617578696c696172792f72737065632f6d6f636b' 'Auxiliary__Rspec__Mock'
end end
context 'with pre-existing namespace module' do context 'with pre-existing namespace module' do
before(:example) do before(:example) do
module Msf module Msf
module Modules module Modules
module Mod617578696c696172792f72737065632f6d6f636b module Auxiliary__Rspec__Mock
class Metasploit class Metasploit
end end
@ -789,7 +777,7 @@ RSpec.describe Msf::Modules::Loader::Base do
end end
end end
@existent_namespace_module = Msf::Modules::Mod617578696c696172792f72737065632f6d6f636b @existent_namespace_module = Msf::Modules::Auxiliary__Rspec__Mock
end end
context 'with :reload => false' do context 'with :reload => false' do
@ -1027,7 +1015,7 @@ RSpec.describe Msf::Modules::Loader::Base do
end end
let(:relative_name) do let(:relative_name) do
'Mod0' 'Auxiliary__Rspec__Mock'
end end
it 'should do nothing if parent_module is nil' do it 'should do nothing if parent_module is nil' do
@ -1076,7 +1064,7 @@ RSpec.describe Msf::Modules::Loader::Base do
before(:example) do before(:example) do
module Msf module Msf
module Modules module Modules
module Mod0 module Auxiliary__Rspec__Mock
class Metasploit class Metasploit
end end
@ -1084,7 +1072,7 @@ RSpec.describe Msf::Modules::Loader::Base do
end end
end end
@original_namespace_module = Msf::Modules::Mod0 @original_namespace_module = Msf::Modules::Auxiliary__Rspec__Mock
Msf::Modules.send(:remove_const, relative_name) Msf::Modules.send(:remove_const, relative_name)
end end
@ -1093,7 +1081,7 @@ RSpec.describe Msf::Modules::Loader::Base do
before(:example) do before(:example) do
module Msf module Msf
module Modules module Modules
module Mod0 module Auxiliary__Rspec__Mock
class Metasploit2 class Metasploit2
end end
@ -1101,7 +1089,7 @@ RSpec.describe Msf::Modules::Loader::Base do
end end
end end
@current_namespace_module = Msf::Modules::Mod0 @current_namespace_module = Msf::Modules::Auxiliary__Rspec__Mock
end end
context 'with the current constant being the namespace_module' do context 'with the current constant being the namespace_module' do