Skip to content

Commit f67a32e

Browse files
author
HD Moore
committed
Add missing commits from rapid7#3770, lands rapid7#4393
2 parents fa07193 + 3329aa6 commit f67a32e

File tree

7 files changed

+16
-10
lines changed

7 files changed

+16
-10
lines changed

lib/msf/core/encoded_payload.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,13 @@ def encode
109109
if reqs['BadChars'] or reqs['Encoder'] or reqs['ForceEncode']
110110
encoders = pinst.compatible_encoders
111111

112-
# Fix encoding issue
112+
# Make sure the encoder name from the user has the same String#encoding
113+
# as the framework's list of encoder names so we can compare them later.
114+
# This is important for when we get input from RPC.
113115
if reqs['Encoder']
114116
reqs['Encoder'] = reqs['Encoder'].encode(framework.encoders.keys[0].encoding)
115117
end
118+
116119
# If the caller had a preferred encoder, use this encoder only
117120
if ((reqs['Encoder']) and (preferred = framework.encoders[reqs['Encoder']]))
118121
encoders = [ [reqs['Encoder'], preferred] ]
@@ -164,7 +167,7 @@ def encode
164167
if (reqs['ForceSaveRegisters'] and
165168
reqs['EncoderOptions'] and
166169
(reqs['EncoderOptions']['SaveRegisters'].to_s.length > 0) and
167-
(! self.encoder.preserves_registers?))
170+
(! self.encoder.can_preserve_registers?))
168171
wlog("#{pinst.refname}: Encoder #{encoder.refname} does not preserve registers and the caller needs #{reqs['EncoderOptions']['SaveRegisters']} preserved.",
169172
'core', LEV_1)
170173
next
@@ -236,6 +239,7 @@ def encode
236239
self.encoded = eout
237240
break
238241
}
242+
239243
# If the encoded payload is nil, raise an exception saying that we
240244
# suck at life.
241245
if (self.encoded == nil)

lib/msf/core/encoder.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ def to_native(buf)
416416
#
417417
# Determines whether the encoder can preserve registers at all
418418
#
419-
def preserves_registers?
419+
def can_preserve_registers?
420420
false
421421
end
422422

lib/msf/core/payload/stager.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,11 @@ def encode_stage(stg)
240240
end
241241

242242
# Allow the user to specify additional registers to preserve
243-
saved_registers = (
244-
datastore['StageEncoderSaveRegisters'].to_s + " "
243+
saved_registers =
244+
datastore['StageEncoderSaveRegisters'].to_s +
245+
" " +
245246
encode_stage_preserved_registers
246-
).strip
247+
saved_registers.strip!
247248

248249
estg = nil
249250

@@ -262,6 +263,7 @@ def encode_stage(stg)
262263
if encp.encoder
263264
print_status("Encoded stage with #{encp.encoder.refname}")
264265
estg = encp.encoded
266+
265267
break
266268
end
267269
end

modules/encoders/x86/call4_dword_xor.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def decoder_stub(state)
5151
end
5252

5353
# Indicate that this module can preserve some registers
54-
def preserves_registers?
54+
def can_preserve_registers?
5555
true
5656
end
5757

modules/encoders/x86/countdown.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def encode_block(state, block)
6464
end
6565

6666
# Indicate that this module can preserve some registers
67-
def preserves_registers?
67+
def can_preserve_registers?
6868
true
6969
end
7070

modules/encoders/x86/fnstenv_mov.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def decoder_stub(state)
5555
end
5656

5757
# Indicate that this module can preserve some registers
58-
def preserves_registers?
58+
def can_preserve_registers?
5959
true
6060
end
6161

modules/encoders/x86/shikata_ga_nai.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def decoder_stub(state)
6969
end
7070

7171
# Indicate that this module can preserve some registers
72-
def preserves_registers?
72+
def can_preserve_registers?
7373
true
7474
end
7575

0 commit comments

Comments
 (0)