Foro de elhacker.net

Sistemas Operativos => Windows => Mensaje iniciado por: gxg en 7 Julio 2012, 15:47 pm



Título: Simular Raton Hardware
Publicado por: gxg en 7 Julio 2012, 15:47 pm
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.


Título: Re: Simular Raton Hardware
Publicado por: HdM en 7 Julio 2012, 16:13 pm
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.


Título: Re: Simular Raton Hardware
Publicado por: Eleкtro en 7 Julio 2012, 16:33 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
  1. nircmd.exe movecursor X Y
  2. nircmd.exe Setcursor X Y
  3. nircmd.exe sendmouse [right | left | middle] [down | up | click | dblclick]
  4. nircmd.exe sendmouse [move] [x] [y]
  5. nircmd.exe sendmouse [wheel] [Wheel Value]
  6.  

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

Cita de: @ AYUDA
Código
  1. mouse.exe leftclick
  2. mouse.exe rightclick
  3. mouse.exe leftdoubleclick
  4. mouse.exe rightdoubleclick


Título: Re: Simular Raton Hardware
Publicado por: gxg en 7 Julio 2012, 17:06 pm
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.


Título: Re: Simular Raton Hardware
Publicado por: Vicentnala en 7 Julio 2012, 18:24 pm
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)


Título: Re: Simular Raton Hardware
Publicado por: Eleкtro en 7 Julio 2012, 19:07 pm
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
  1. 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
  1. [DllImport("user32.dll", SetLastError = true)]
  2. 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
  1.  
  2. #!/usr/bin/perl
  3.  
  4. use strict;
  5. use warnings;
  6.  
  7. use Win32::GuiTest qw( MouseMoveAbsPix SendMouse );
  8.  
  9. MouseMoveAbsPix(640,400);
  10. SendMouse "{LEFTCLICK}";
  11.  
  12. __END__



Un code en python (Probado, funciona)

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

Código
  1. import win32gui, win32api, win32con, ctypes
  2.  
  3. class Mouse:
  4.    """It simulates the mouse"""
  5.    MOUSEEVENTF_MOVE = 0x0001 # mouse move
  6.    MOUSEEVENTF_LEFTDOWN = 0x0002 # left button down
  7.    MOUSEEVENTF_LEFTUP = 0x0004 # left button up
  8.    MOUSEEVENTF_RIGHTDOWN = 0x0008 # right button down
  9.    MOUSEEVENTF_RIGHTUP = 0x0010 # right button up
  10.    MOUSEEVENTF_MIDDLEDOWN = 0x0020 # middle button down
  11.    MOUSEEVENTF_MIDDLEUP = 0x0040 # middle button up
  12.    MOUSEEVENTF_WHEEL = 0x0800 # wheel button rolled
  13.    MOUSEEVENTF_ABSOLUTE = 0x8000 # absolute move
  14.    SM_CXSCREEN = 0
  15.    SM_CYSCREEN = 1
  16.  
  17.    def _do_event(self, flags, x_pos, y_pos, data, extra_info):
  18.        """generate a mouse event"""
  19.        x_calc = 65536L * x_pos / ctypes.windll.user32.GetSystemMetrics(self.SM_CXSCREEN) + 1
  20.        y_calc = 65536L * y_pos / ctypes.windll.user32.GetSystemMetrics(self.SM_CYSCREEN) + 1
  21.        return ctypes.windll.user32.mouse_event(flags, x_calc, y_calc, data, extra_info)
  22.  
  23.    def _get_button_value(self, button_name, button_up=False):
  24.        """convert the name of the button into the corresponding value"""
  25.        buttons = 0
  26.        if button_name.find("right") >= 0:
  27.            buttons = self.MOUSEEVENTF_RIGHTDOWN
  28.        if button_name.find("left") >= 0:
  29.            buttons = buttons + self.MOUSEEVENTF_LEFTDOWN
  30.        if button_name.find("middle") >= 0:
  31.            buttons = buttons + self.MOUSEEVENTF_MIDDLEDOWN
  32.        if button_up:
  33.            buttons = buttons << 1
  34.        return buttons
  35.  
  36.    def move_mouse(self, pos):
  37.        """move the mouse to the specified coordinates"""
  38.        (x, y) = pos
  39.        old_pos = self.get_position()
  40.        x =  x if (x != -1) else old_pos[0]
  41.        y =  y if (y != -1) else old_pos[1]    
  42.        self._do_event(self.MOUSEEVENTF_MOVE + self.MOUSEEVENTF_ABSOLUTE, x, y, 0, 0)
  43.  
  44.    def press_button(self, pos=(-1, -1), button_name="left", button_up=False):
  45.        """push a button of the mouse"""
  46.        self.move_mouse(pos)
  47.        self._do_event(self.get_button_value(button_name, button_up), 0, 0, 0, 0)
  48.  
  49.    def click(self, pos=(-1, -1), button_name= "left"):
  50.        """Click at the specified placed"""
  51.        self.move_mouse(pos)
  52.        self._do_event(self._get_button_value(button_name, False)+self._get_button_value(button_name, True), 0, 0, 0, 0)
  53.  
  54.    def double_click (self, pos=(-1, -1), button_name="left"):
  55.        """Double click at the specifed placed"""
  56.        for i in xrange(2):
  57.            self.click(pos, button_name)
  58.  
  59.    def get_position(self):
  60.        """get mouse position"""
  61.        return win32api.GetCursorPos()
  62.  
  63.  
  64.  
  65.  
  66. import time
  67. mouse = Mouse()
  68. mouse.click((20, 10), "left")
  69. time.sleep(2.0)
  70. mouse.click((100, 100), "right")
  71.  

Saludos


Título: Re: Simular Raton Hardware
Publicado por: gxg en 7 Julio 2012, 23:43 pm
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/


Título: Re: Simular Raton Hardware
Publicado por: Yoghurt en 13 Julio 2012, 09:03 am
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.