Add missing commits from #3770, lands #4393

This commit is contained in:
HD Moore 2014-12-13 17:36:26 -06:00
commit f67a32ef9c
No known key found for this signature in database
GPG Key ID: 22015B93FA604913
7 changed files with 16 additions and 10 deletions

View File

@ -109,10 +109,13 @@ class EncodedPayload
if reqs['BadChars'] or reqs['Encoder'] or reqs['ForceEncode']
encoders = pinst.compatible_encoders
# Fix encoding issue
# Make sure the encoder name from the user has the same String#encoding
# as the framework's list of encoder names so we can compare them later.
# This is important for when we get input from RPC.
if reqs['Encoder']
reqs['Encoder'] = reqs['Encoder'].encode(framework.encoders.keys[0].encoding)
end
# If the caller had a preferred encoder, use this encoder only
if ((reqs['Encoder']) and (preferred = framework.encoders[reqs['Encoder']]))
encoders = [ [reqs['Encoder'], preferred] ]
@ -164,7 +167,7 @@ class EncodedPayload
if (reqs['ForceSaveRegisters'] and
reqs['EncoderOptions'] and
(reqs['EncoderOptions']['SaveRegisters'].to_s.length > 0) and
(! self.encoder.preserves_registers?))
(! self.encoder.can_preserve_registers?))
wlog("#{pinst.refname}: Encoder #{encoder.refname} does not preserve registers and the caller needs #{reqs['EncoderOptions']['SaveRegisters']} preserved.",
'core', LEV_1)
next
@ -236,6 +239,7 @@ class EncodedPayload
self.encoded = eout
break
}
# If the encoded payload is nil, raise an exception saying that we
# suck at life.
if (self.encoded == nil)

View File

@ -416,7 +416,7 @@ class Encoder < Module
#
# Determines whether the encoder can preserve registers at all
#
def preserves_registers?
def can_preserve_registers?
false
end

View File

@ -240,10 +240,11 @@ module Msf::Payload::Stager
end
# Allow the user to specify additional registers to preserve
saved_registers = (
datastore['StageEncoderSaveRegisters'].to_s + " "
saved_registers =
datastore['StageEncoderSaveRegisters'].to_s +
" " +
encode_stage_preserved_registers
).strip
saved_registers.strip!
estg = nil
@ -262,6 +263,7 @@ module Msf::Payload::Stager
if encp.encoder
print_status("Encoded stage with #{encp.encoder.refname}")
estg = encp.encoded
break
end
end

View File

@ -51,7 +51,7 @@ class Metasploit3 < Msf::Encoder::Xor
end
# Indicate that this module can preserve some registers
def preserves_registers?
def can_preserve_registers?
true
end

View File

@ -64,7 +64,7 @@ class Metasploit3 < Msf::Encoder::Xor
end
# Indicate that this module can preserve some registers
def preserves_registers?
def can_preserve_registers?
true
end

View File

@ -55,7 +55,7 @@ class Metasploit3 < Msf::Encoder::Xor
end
# Indicate that this module can preserve some registers
def preserves_registers?
def can_preserve_registers?
true
end

View File

@ -69,7 +69,7 @@ class Metasploit3 < Msf::Encoder::XorAdditiveFeedback
end
# Indicate that this module can preserve some registers
def preserves_registers?
def can_preserve_registers?
true
end