Jugando con las API de Windows (by pRotos)

Iniciado por ANTRAX, Febrero 24, 2010, 04:21:30 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Vamos a ver como con Ruby podemos utilizar las API de Windows. Esto nos puede servir para troyanos, keyloggers, virus varios etc... Es un tema que no se suele dar mucho en Ruby, pero que puede hacerlo, f?cilmente, y que nos puede ayudar mucho, y le da m?s potencia al lenguaje. vamos a all?!



require 'Win32API' #Necesitamos incluir la libreria necesaria (hay que bajarla primero)

Y ahora viene la parte interesante: llamaremos a la funcion de la API que queramos. de la siguiente manera:

Código: php
var = Win32API.new(api, funcion, param3, param4)
var.Call(parametros)


en una variable (var) creamos un objeto de la clase Win32API, con cuatro parametros:
-1) Nombre de la API (sin el '.dll')
-2) Nombre de la funci?n a utilizar de la API
-3) Este parametro es un array, que contiene el tipo de cada uno de los parametros que luego mandaremos al .Call
-4) Tipo de dato que te devolver? la API

Los tipos pueden ser: 
   - N o L => numeros
   - I  => Integer
   - P  => Es un puntero que blalblal...en definitiva, string
   - V  => Void

Y luego llamamos al metodo .Call() del objeto para llamar a la funci?n determinada, pasandoles los parametros determinados para cada funcion.

Y hasta aqu? la teoria, veamos un ejemplo para verlo todo m?s clarito ^^

Código: ruby
require 'Win32API'

a = Win32API.new("user32", "SystemParametersInfo", ['L', 'L', 'P', 'L'], 'L')
a.Call(20, 0, "\miimagen.bmp", 0)


Y con este code lograriamos cambiar la imagen del escritorio del que lo ejecute ( en windows)

Explicacion del code:
Primero requerimos libreria.
Metemos en la variable a el objeto del metodo de las apis de windows, llamando a la api user32.dll, la funcion de la cual requerimos es SystemParametersInfo, le indicamos en un array, que le enviaremos 4 parametros al Call, L, L, P y L, (como vemos luego en el Call, se tiene que cumplir), y recibiremos un L, (esto no es tan importante, pero hay que ponerlo)
Luego llamamos (.Call) al objeto con sus cuatro parametros:

20, un parametro determinado de la funcion, que le dice a la funcion qeu lo que queremos es cambiar el escritorio (en realidad este 20 quiere decir SPI_SETDESKWALLPAPER, podriamos haber puesto eso) (tipo L)

0, es una constante, no la explicar?. (tipo L)

"\miimagen.bmp", la imagen que pondremos de fondo (tipo string P)

0, otra constante, quiere decir que no queremos notificacion de la accion. (tipo L)

Como vemos los datos ha enviar los hemos puesto bien antes: L, L, P, L ;).

Decir, que solo la user32.dll tiene unas 780 funciones, tengo la lista, si alguien la quiere que me la pida por pm, adem?s ya postear? informaci?n sobre algunas de lsa funciones m?s interesantes, y como usarlas, pero bueno, eso es cosa de googlear, aqu? ya teneis la base ;).


Decir que ademas de la Win32API, ruby tiene la libreria Win32OLE, que utiliza tambien las apis del sistema pero a un nivel mas alto, y ons permite utilizar los programas del sistema de una manera mas sencilla , ya har? otro capitulo sobre eso ;).