2012-06-29 05:18:28 +00:00
|
|
|
# -*- coding: binary -*-
|
2010-09-21 00:13:30 +00:00
|
|
|
|
2005-07-10 09:42:49 +00:00
|
|
|
require 'msf/base'
|
|
|
|
|
|
|
|
module Msf
|
|
|
|
module Simple
|
|
|
|
|
|
|
|
###
|
|
|
|
#
|
|
|
|
# Wraps interaction with a generated buffer from the framework.
|
|
|
|
# Its primary use is to transform a raw buffer into another
|
|
|
|
# format.
|
|
|
|
#
|
|
|
|
###
|
|
|
|
module Buffer
|
|
|
|
|
2013-08-30 21:28:33 +00:00
|
|
|
#
|
|
|
|
# Serializes a buffer to a provided format. The formats supported are raw,
|
2013-11-20 21:36:17 +00:00
|
|
|
# num, dword, ruby, python, perl, bash, c, js_be, js_le, java and psh
|
2013-08-30 21:28:33 +00:00
|
|
|
#
|
|
|
|
def self.transform(buf, fmt = "ruby")
|
|
|
|
case fmt
|
|
|
|
when 'raw'
|
2013-11-20 21:36:17 +00:00
|
|
|
when 'num'
|
|
|
|
buf = Rex::Text.to_num(buf)
|
|
|
|
when 'dword', 'dw'
|
|
|
|
buf = Rex::Text.to_dword(buf)
|
2013-08-30 21:28:33 +00:00
|
|
|
when 'python', 'py'
|
|
|
|
buf = Rex::Text.to_python(buf)
|
|
|
|
when 'ruby', 'rb'
|
|
|
|
buf = Rex::Text.to_ruby(buf)
|
|
|
|
when 'perl', 'pl'
|
|
|
|
buf = Rex::Text.to_perl(buf)
|
|
|
|
when 'bash', 'sh'
|
|
|
|
buf = Rex::Text.to_bash(buf)
|
|
|
|
when 'c'
|
|
|
|
buf = Rex::Text.to_c(buf)
|
|
|
|
when 'csharp'
|
|
|
|
buf = Rex::Text.to_csharp(buf)
|
|
|
|
when 'js_be'
|
|
|
|
buf = Rex::Text.to_unescape(buf, ENDIAN_BIG)
|
|
|
|
when 'js_le'
|
|
|
|
buf = Rex::Text.to_unescape(buf, ENDIAN_LITTLE)
|
|
|
|
when 'java'
|
|
|
|
buf = Rex::Text.to_java(buf)
|
|
|
|
when 'powershell', 'ps1'
|
|
|
|
buf = Rex::Text.to_powershell(buf)
|
|
|
|
when 'vbscript'
|
|
|
|
buf = Rex::Text.to_vbscript(buf)
|
|
|
|
when 'vbapplication'
|
|
|
|
buf = Rex::Text.to_vbapplication(buf)
|
|
|
|
else
|
|
|
|
raise ArgumentError, "Unsupported buffer format: #{fmt}", caller
|
|
|
|
end
|
2005-07-10 09:42:49 +00:00
|
|
|
|
2013-08-30 21:28:33 +00:00
|
|
|
return buf
|
|
|
|
end
|
2005-07-10 09:42:49 +00:00
|
|
|
|
2013-08-30 21:28:33 +00:00
|
|
|
#
|
|
|
|
# Creates a comment using the supplied format. The formats supported are
|
2013-11-20 21:36:17 +00:00
|
|
|
# raw, ruby, python, perl, bash, js_be, js_le, c, and java.
|
2013-08-30 21:28:33 +00:00
|
|
|
#
|
|
|
|
def self.comment(buf, fmt = "ruby")
|
|
|
|
case fmt
|
|
|
|
when 'raw'
|
2013-11-20 21:36:17 +00:00
|
|
|
when 'num', 'dword', 'dw'
|
|
|
|
buf = Rex::Text.to_num_comment(buf)
|
2013-08-30 21:28:33 +00:00
|
|
|
when 'ruby', 'rb', 'python', 'py'
|
|
|
|
buf = Rex::Text.to_ruby_comment(buf)
|
|
|
|
when 'perl', 'pl'
|
|
|
|
buf = Rex::Text.to_perl_comment(buf)
|
|
|
|
when 'bash', 'sh'
|
|
|
|
buf = Rex::Text.to_bash_comment(buf)
|
|
|
|
when 'c'
|
|
|
|
buf = Rex::Text.to_c_comment(buf)
|
|
|
|
when 'csharp'
|
|
|
|
buf = Rex::Text.to_c_comment(buf)
|
|
|
|
when 'js_be', 'js_le'
|
|
|
|
buf = Rex::Text.to_js_comment(buf)
|
|
|
|
when 'java'
|
|
|
|
buf = Rex::Text.to_c_comment(buf)
|
|
|
|
else
|
|
|
|
raise ArgumentError, "Unsupported buffer format: #{fmt}", caller
|
|
|
|
end
|
2005-07-10 19:21:40 +00:00
|
|
|
|
2013-08-30 21:28:33 +00:00
|
|
|
return buf
|
|
|
|
end
|
2005-07-10 19:21:40 +00:00
|
|
|
|
2013-08-30 21:28:33 +00:00
|
|
|
#
|
|
|
|
# Returns the list of supported formats
|
|
|
|
#
|
|
|
|
def self.transform_formats
|
|
|
|
['raw',
|
2013-11-20 21:36:17 +00:00
|
|
|
'num',
|
|
|
|
'dword','dw',
|
2013-08-30 21:28:33 +00:00
|
|
|
'ruby','rb',
|
|
|
|
'perl','pl',
|
|
|
|
'bash','sh',
|
|
|
|
'c',
|
|
|
|
'csharp',
|
|
|
|
'js_be',
|
|
|
|
'js_le',
|
|
|
|
'java',
|
|
|
|
'python','py',
|
|
|
|
'powershell','ps1',
|
|
|
|
'vbscript',
|
|
|
|
'vbapplication'
|
|
|
|
]
|
|
|
|
end
|
2010-09-21 00:13:30 +00:00
|
|
|
|
2005-07-10 09:42:49 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
2009-01-09 02:16:02 +00:00
|
|
|
end
|