Simular Raton Hardware

Iniciado por gxg, 7 Julio 2012, 15:47 PM

0 Miembros y 2 Visitantes están viendo este tema.

gxg

Buenas, necesito inyectar clics del ratón en una aplicación. Pero esta aplicación esta especialmente diseñada para que no se pueda inyectar clics del ratón ni teclas.

He probado muchos métodos en diferentes lenguajes y no he conseguido nada:

-http://msdn.microsoft.com/en-us/library/ms171548.aspx

-He probado la libreria InputSimulator.dll

-He probado la funcion MouseClick() de Autoit

-He descargado programas que hacen clics como http://auto-mouse-click.softonic.com/ pero no funcionan en dicha aplicación

-He mirado algo de hooks pero por lo visto solo mueven el raton, no hacen click.

-Ya se que si pulsamos shift + f10 simula el botón derecho del ratón, pero no me vale porque no lo hace sobre el puntero del raton si sobre el target actual, ademas necesito el izquierdo.


Lo único que he conseguido hasta ahora es simular el movimiento del ratón dentro de dicha aplicación, es decir de las cordenadas (X,Y) a otras (X+10,Y+20) por poner un ejemplo.

Curiosamente, de la única manera que conseguí algo fue con el teclado virtual que trae windows, es decir, si escribo en el, ese texto va a la aplicación, como si fuera un teclado de verdad, pero yo lo que necesito simular un ratón.


He tenido una idea que igual podría funcionar pero no he podido probar por un problema, e igual es mejor que si alguien sabe fijo que no funcionara que me lo diga y así no gasto mas tiempo resolviendo ese problema. La idea es instalar la aplicación en una maquina virtual VirtualBox por ejemplo, y en vez de inyectar directamente los clicks a la aplicación, inyectárselos desde afuera de la maquina, asi igual la maquina virtual se los pasa a la aplicación como clicks de hardware?



Toda la ayuda que me podáis aportar sera agradecida.

HdM

Buenas.

En la sección de Scripting tienes ejemplos de lo que quieres hacer, mediante el uso de nircmd. Usa el buscador, es posible que te sirvan de ayuda.

Saludos.

- Nice to see you again -

Eleкtro

#2
Cita de: gxg en  7 Julio 2012, 15:47 PM
Toda la ayuda que me podáis aportar


1º- NirCMD
> http://foro.elhacker.net/scripting/duda_sobre_wpe_pro_o_cheat_engine-t366010.0.html;msg1762609#msg1762609

Cita de: @ AYUDA
Código (DOS) [Seleccionar]

nircmd.exe movecursor X Y
nircmd.exe Setcursor X Y
nircmd.exe sendmouse [right | left | middle] [down | up | click | dblclick]
nircmd.exe sendmouse [move] [x] [y]
nircmd.exe sendmouse [wheel] [Wheel Value]

2º - Mouse.exe
> http://exoshare.com/download.php?uid=ERPOMBCB

Cita de: @ AYUDA
Código (DOS) [Seleccionar]
mouse.exe leftclick
mouse.exe rightclick
mouse.exe leftdoubleclick
mouse.exe rightdoubleclick








gxg

#3
Esas funciones de tan alto nivel no valen, lo que hacen es pesarle un mensaje a la aplicación que este en el puntero y le envían un clic virtual. De todas formas por si acaso lo he probado: nircmd.exe sendmouse left click, y no funciona.

Cuando quiero decir que no funciona es que si le pongo el puntero por ejemplo en inicio de windows si que me abre en menú de windows y en cualquier otra aplicación como google eart por ejemplo, me permite navegar por ella, abriendo los menus..., pero en la aplicación que quiero inyectar ni se inmuta.


También he probado mouse.exe con los mismos resultados.


Gracias de todas formas.

Vicentnala

Supongo que esa es una aplicación "inrratonable"... y ya que se trata de ratones... sabrá alguien si el SO Android 3.5 para PC se puede usar con el raton???... porque la monte en una maquina Virtual y nada... solo se puede navegar en el por las teclas cursoras... (ya se que este es otro tema... luego haré la pregunta en un post propio)

Eleкtro

#5
A mi lo que me parecería interesante es saber en que lenguaje está hecho el programa, Y como han conseguido restringir tán genialmente el uso del "click".
¿Alguien puede aportar información para comprenderlo?

A ver si has probado con esto:

Un javascript, Función mousedown:
(Width y height parece ser donde van las coordenadas) (Creo que faltaría el "obj")
Código (javascript) [Seleccionar]
Sys.Desktop.MouseDown(VK_LBUTTON, obj.ScreenLeft + obj.Width/2, obj.ScreenTop + obj.Height/2);
http://stackoverflow.com/questions/10444234/cant-simulate-action-properly-sendmessage-in-c-sharp-spy




Librería user32.dll de windows, función sendinput (Sirve tanto para mandar clicks como pulsaciones del teclado)

C# :
Cita de: C#To simulate mouse or keyboard input properly, you need to use the SendInput function. The P/Invoke declaration to call it from C# looks like this:
Código (csharp) [Seleccionar]
[DllImport("user32.dll", SetLastError = true)]
static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

C++ : http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310.aspx

Si quieres ponerte a hacer un miniprograma con esos datos... :-/




Un code en Perl:

Código (perl) [Seleccionar]


#!/usr/bin/perl

use strict;
use warnings;

use Win32::GuiTest qw( MouseMoveAbsPix SendMouse );

MouseMoveAbsPix(640,400);
SendMouse "{LEFTCLICK}";

__END__





Un code en python (Probado, funciona)

(Para usarlo necesitas pywin para python): http://sourceforge.net/projects/pywin32/files/pywin32/Build216/

Código (python) [Seleccionar]
import win32gui, win32api, win32con, ctypes

class Mouse:
   """It simulates the mouse"""
   MOUSEEVENTF_MOVE = 0x0001 # mouse move
   MOUSEEVENTF_LEFTDOWN = 0x0002 # left button down
   MOUSEEVENTF_LEFTUP = 0x0004 # left button up
   MOUSEEVENTF_RIGHTDOWN = 0x0008 # right button down
   MOUSEEVENTF_RIGHTUP = 0x0010 # right button up
   MOUSEEVENTF_MIDDLEDOWN = 0x0020 # middle button down
   MOUSEEVENTF_MIDDLEUP = 0x0040 # middle button up
   MOUSEEVENTF_WHEEL = 0x0800 # wheel button rolled
   MOUSEEVENTF_ABSOLUTE = 0x8000 # absolute move
   SM_CXSCREEN = 0
   SM_CYSCREEN = 1

   def _do_event(self, flags, x_pos, y_pos, data, extra_info):
       """generate a mouse event"""
       x_calc = 65536L * x_pos / ctypes.windll.user32.GetSystemMetrics(self.SM_CXSCREEN) + 1
       y_calc = 65536L * y_pos / ctypes.windll.user32.GetSystemMetrics(self.SM_CYSCREEN) + 1
       return ctypes.windll.user32.mouse_event(flags, x_calc, y_calc, data, extra_info)

   def _get_button_value(self, button_name, button_up=False):
       """convert the name of the button into the corresponding value"""
       buttons = 0
       if button_name.find("right") >= 0:
           buttons = self.MOUSEEVENTF_RIGHTDOWN
       if button_name.find("left") >= 0:
           buttons = buttons + self.MOUSEEVENTF_LEFTDOWN
       if button_name.find("middle") >= 0:
           buttons = buttons + self.MOUSEEVENTF_MIDDLEDOWN
       if button_up:
           buttons = buttons << 1
       return buttons

   def move_mouse(self, pos):
       """move the mouse to the specified coordinates"""
       (x, y) = pos
       old_pos = self.get_position()
       x =  x if (x != -1) else old_pos[0]
       y =  y if (y != -1) else old_pos[1]    
       self._do_event(self.MOUSEEVENTF_MOVE + self.MOUSEEVENTF_ABSOLUTE, x, y, 0, 0)

   def press_button(self, pos=(-1, -1), button_name="left", button_up=False):
       """push a button of the mouse"""
       self.move_mouse(pos)
       self._do_event(self.get_button_value(button_name, button_up), 0, 0, 0, 0)

   def click(self, pos=(-1, -1), button_name= "left"):
       """Click at the specified placed"""
       self.move_mouse(pos)
       self._do_event(self._get_button_value(button_name, False)+self._get_button_value(button_name, True), 0, 0, 0, 0)

   def double_click (self, pos=(-1, -1), button_name="left"):
       """Double click at the specifed placed"""
       for i in xrange(2):
           self.click(pos, button_name)

   def get_position(self):
       """get mouse position"""
       return win32api.GetCursorPos()




import time
mouse = Mouse()
mouse.click((20, 10), "left")
time.sleep(2.0)
mouse.click((100, 100), "right")


Saludos








gxg

Por si ayuda de algo es un juego en direct X. Precisamente esa protección es para evitar que existan programas que jueguen solos.


http://imageshack.us/f/233/sinttulokme.png/

Yoghurt

El Android @Vicentnala si lo corres en una maquina virtual debes agregarle la propiedad "Touch Screen = True" en las opciones de android.

Respecto al Mouse, tal vez te haga bien revisar el SDK de DirectX. No se me ocurre nada más escepto que busques algun driver fake para utilizarlo mediante software y no se si existan.