From cb6c92cafe69823870452fe567babea5054e4923 Mon Sep 17 00:00:00 2001 From: Matt Miller Date: Sun, 17 Apr 2005 03:29:12 +0000 Subject: [PATCH] added keyboard/mouse enabling/disabling git-svn-id: file:///home/svn/incoming/trunk@2390 4d416f70-5f16-0410-b530-b9f4589650da --- .../meterpreter/extensions/stdapi/stdapi.rb | 6 ++ .../post/meterpreter/extensions/stdapi/ui.rb | 83 +++++++++++++++++++ lib/rex/post/u_i.rb | 34 ++++++++ 3 files changed, 123 insertions(+) create mode 100644 lib/rex/post/meterpreter/extensions/stdapi/ui.rb create mode 100644 lib/rex/post/u_i.rb diff --git a/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb b/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb index 4efa46a670..4b0d5f7415 100644 --- a/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +++ b/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb @@ -7,6 +7,7 @@ require 'Rex/Post/Meterpreter/Extensions/Stdapi/Tlv' require 'Rex/Post/Meterpreter/Extensions/Stdapi/Dir' require 'Rex/Post/Meterpreter/Extensions/Stdapi/File' require 'Rex/Post/Meterpreter/Extensions/Stdapi/FileStat' +require 'Rex/Post/Meterpreter/Extensions/Stdapi/UI' require 'Rex/Post/Meterpreter/Extensions/Stdapi/Sys/Process' require 'Rex/Post/Meterpreter/Extensions/Stdapi/Sys/Registry' @@ -48,7 +49,12 @@ class Stdapi < Extension 'process' => self.process, 'registry' => self.registry }) + }, + { + 'name' => 'ui', + 'ext' => UI.new(client) } + ]) end diff --git a/lib/rex/post/meterpreter/extensions/stdapi/ui.rb b/lib/rex/post/meterpreter/extensions/stdapi/ui.rb new file mode 100644 index 0000000000..d716bdc0bb --- /dev/null +++ b/lib/rex/post/meterpreter/extensions/stdapi/ui.rb @@ -0,0 +1,83 @@ +#!/usr/bin/ruby + +require 'Rex/Post/UI' + +module Rex +module Post +module Meterpreter +module Extensions +module Stdapi + +### +# +# UI +# -- +# +# Allows for interacting with the user interface on the remote machine, +# such as by disabling the keyboard and mouse. +# +# WARNING: +# +# Using keyboard and mouse enabling/disabling features will result in +# a DLL file being written to disk. +# +### +class UI < Rex::Post::UI + + include Rex::Post::Meterpreter::ObjectAliasesContainer + + ## + # + # Constructor + # + ## + + # Initialization + def initialize(client) + self.client = client + end + + ## + # + # Device enabling/disabling + # + ## + + # Disable keyboard input + def disable_keyboard + return enable_keyboard(false) + end + + # Enable keyboard input + def enable_keyboard(enable = true) + request = Packet.create_request('stdapi_ui_enable_keyboard') + + request.add_tlv(TLV_TYPE_BOOL, enable) + + response = client.send_request(request) + + return true + end + + # Disable mouse input + def disable_mouse + return enable_mouse(false) + end + + # Enable mouse input + def enable_mouse(enable = true) + request = Packet.create_request('stdapi_ui_enable_mouse') + + request.add_tlv(TLV_TYPE_BOOL, enable) + + response = client.send_request(request) + + return true + end + +protected + attr_accessor :client + +end + +end; end; end; end; end diff --git a/lib/rex/post/u_i.rb b/lib/rex/post/u_i.rb new file mode 100644 index 0000000000..d8933a7321 --- /dev/null +++ b/lib/rex/post/u_i.rb @@ -0,0 +1,34 @@ +#!/usr/bin/ruby + +module Rex +module Post + +### +# +# UI +# -- +# +# User-interface interaction base class. +# +### +class UI + + def disable_keyboard + raise NotImplementedError + end + + def enable_keyboard + raise NotImplementedError + end + + def disable_mouse + raise NotImplementedError + end + + def enable_mouse + raise NotImplementedError + end + +end + +end; end