diff --git a/lib/msf/util/exe.rb b/lib/msf/util/exe.rb index 7d7b6c6fb9a21..5a86f3c55e098 100644 --- a/lib/msf/util/exe.rb +++ b/lib/msf/util/exe.rb @@ -708,7 +708,26 @@ def self.to_win64pe_service(framework, code, opts = {}) # Allow the user to specify their own service EXE template set_template_default(opts, "template_x64_windows_svc.exe") opts[:exe_type] = :service_exe - exe_sub_method(code,opts) + # Try to inject code into executable by adding a section without affecting executable behavior + if opts[:inject] + injector = Msf::Exe::SegmentInjector.new({ + :payload => code, + :template => opts[:template], + :arch => :x64, + :secname => opts[:secname] + }) + pe = injector.generate_pe + else + # Append a new section instead + appender = Msf::Exe::SegmentAppender.new({ + :payload => code, + :template => opts[:template], + :arch => :x64, + :secname => opts[:secname] + }) + pe = appender.generate_pe + end + return pe end # self.set_template_default_winpe_dll