Copy Link
Add to Bookmark
Report
SET 028 0x0A
-[ 0x0A ]-------------------------------------------------------------------
-[ Monitorizacion de software ]---------------------------------------------
-[ n3LsOn 2o03 ]----------------------------------------------------SET-28--
_NNNNNNN_ _NNNNNNN_
JNNNNNNNNNL JNNNNNNNNNL
(NNN JNNL. NNNN` `NNNN (NNN. JNNN NNNN` `NNNN (NNN JNNL.
(NNNNNNNNN. 4NNNNNNL_ `NNNL .NNNF 4NNNNNNL_ (NNNNNNNNN.
(NNNF"4NNN) 4NNNNNNNNL `NNNNNNNF 4NNNNNNNNL (NNNF"4NNN)
(NNN NNN) .___.`"4NNNN) (NNNNNN .___.`"4NNNN) (NNN NNN)
(NNN NNN) (NNNN. JNNN) .NNNNNNNL (NNNN. JNNN) (NNN NNN)
(NNN NNN) 4NNNNNNNNNN .NNNN`4NNNL 4NNNNNNNNNN (NNN NNN)
(NNN NNN) "NNNNNNNF .NNNF `NNNL "NNNNNNNF (NNN NNN)
|Monitorizacion de software
|n3LsOn 2o03
|Capitulo I
El objetivo primordial que se esconde bajo este titulo es basicamente el
aprovechamiento de los programas que disponemos habitualmente a nuestro alcance
para implantarnos en nuetros propios proyectos como parte de ellos sin que el
usurio final(el que vaya a usar el programa) tenga constacia de ello.
Para ello debemos de tener unos conocimientos minimos y basicos de visual basic,
que va a ser la herramienta principal de programacion. (tampoco pido mucho, pero
almenos que se sepa que se esta haciendo)
Que podemos conseguir hacer con monitorizacion de software?
Todo depende del fin que queramos dar a nuestro programa, pero basicamente
podriamos definir una serie de objetivos interesantes:
Podremos recoger informacion de cajas de texto,combos,listas y ventanas,
eliminar cualquier tipo de objeto de una ventana, habilitarlo, desabilitarlo,
moverlo,cambiarle las medidas.Bloquear ventanas, cambiarlas el titulo o
eliminarlas..todo lo que podamos imaginar..
Para explicar este pequeno cursillo de monitorizacion, he dividido el trabajo en
objetivos.Cada vez uno mas complicado.He aqui los cuatro proyectos por orden de
dificultad:
o=============================================================o
* - Poder manejar el Winamp desde mi programa
** - Poder descubrir la contrasena del Messenger 5.0
*** - Poder enviar mensajes masivos mediante el Winsms
**** - Poder descubrir la contrasena del Messenger 6.0
o=============================================================o
Personalmente recomiendo a todo aquel que vaya a seguir este curso, que comienze
desde el principio. Se que resultan muy alentadores el segundo y cuarto
proyecto, pero es recomendabe que vayamos paso por paso para no perdernos nada.
Ya sabeis, cuanto mas hagamos, mas aprenderemos..
\\\\\\\Poder manejar el Winamp desde mi programa///////
El objetivo de este proyecto es, como su nombre indica, conseguir manejar
'remotamente' el winamp. Esto puede ser muy util para aquellos programas que
requieran muchas horas delante del ordenador como gestion de datos, programas de
empresas, o porque no decirlo, virus.. Bien es cierto que la maquina a de tener
instalado y ejecutado el winamp(normalmente se ejecuta en modo 'background'al
arrancar windows).Debemos de tener claro desde un principio la magnitud a la
que llega la monitorizacion de programas: vamos a mandar al Winamp que haga lo
que queramos (Ejecutar cancion, Atras, Adelante, Cargar List, Borrar List,
Preferencias, Radio, Poner/Quitar el formulario de la lista, el equalizer,
Salir..TODO!
Para los que todavia no se acaban de entender, pensar en un pequeno virus que
diera constantemente al stop, o que cerrara el winamp al iniciarse.. Tenemos
control total sobre el programa, asi que..manos a la obra!!
Todos conocemos como funciona el winamp. Como es su menu y como funciona su
interface. Un buen programador antes de comenzar su proyecto final, realiza un
programilla o esbozo que le ayudara a crear el que usaremos facilmente. Por lo
tanto, hagamoslo asi :-)
Vamos a crear uno que nos ayude a estudiar el comportamiento del winamp a la
monitorizacion, para luego exprimirlos y sacar el proyecto final.
Todos sabemos que son las funciones API, y cual es su trabajo primordial:
aplicar las posibilidades de windows a nuestros programas. Vamos a aprovechar
dichas funciones para cumplir nuestro objetivo. Algunas de las funciones API que
todos conocemos, permiten enviar comandos y 'mensajes' con cierta informacion a
programas en ejecucion. Todas estas APIS's nos piden como dato inprescindible
una variable denominada hwnd(handle). Que es esto?
Todo objeto que es ejecutado en windows, es registrado en la memoria del
ordenador para poder hacerle una referencia, este valor es denominado hwnd.
Por tanto, todos los botones, ventanas, cajas de texto, combos, listas,
labels, menus, formularios, mensajes en la pantalla, TODO posee un hwnd.
Este es el fundamento basico en el que nos vamos a basar para poder monitorizar
cualquier programa.(Muy importante:el programa debe estar en ejecucion, y cada
vez que entra en memoria cambian todos sus objetos de valor). Por lo tanto,
vamos a necesitar primeramente saber el hwnd de todos los objetos que
necesitemos para poder usarlos como nos antoje. Una vez que sepamos el dichoso
hwnd(que es un numero as long); podremos hacer de todo: por ejemplo, si se trata
de un boton, cambiar su label, presionarlo, eliminarlo, bloquearlo, moverlo..si
es una caja de texto podremos ver el texto, selecionarlo, borrarlo, ponerle lo
que queramos, bloquearlo..(aqui cada uno que lo aplique a lo que quiera)
En primer lugar tenemos que saber el hwnd de la ventana 'padre' que nos dara
paso a ver los 'hijos' como textos y botones. Para conseguirlo, haremos uso
de la funcion API FindWindow, una vez que sepamos el hwnd de la ventana podremos
hacer cosas interesantes sobre ella, como ocultarla, eliminarla, o cambiarla el
titulo..Ahora ya podemos empezar.
Creamos un formulario con un listbox y un boton,cargamos la funcion PostMessage
del visor de texto API.La pegamos publica en nuesto codigo (insertamos un modulo
normalito).Hacemos lo mismo con la funcion FindWindow.Creamos una sub llamada
MonWinamp, que se encargara primero de buscar la ventabna del winamp, y despues
de enviar la informacion que queremos que realice en winamp.
Ponemos la variable Menu que guardara el codigo a ejecutar. Le indicamos el
hwnd de la ventana del winamp mediante la funcion FindWindow de la siguiente
manera (escribo el modulo entero):
''En el module1.bas
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As
Long) As
Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hwnd As
Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName
As String, ByVal lpWindowName As String) As Long
Public HWND_WINAMP as Long
Public Sub MonWinamp(Menu As String)
HWND_WINAMP = FindWindow("Winamp v1.x", vbNullString)
If HWND_WINAMP <> 0 Then
PostMessage HWND_WINAMP, &H111, Menu, 0
End If
End Sub
Hemos comprobado que lo he encontrado si el valor HWND_WINAMP es distinto de
cero, si no, resulta que el winamp no ha sido ejecutado.
Todo perfecto. En la Sub del Command1_Click vamos a llamar a MonWinamp y como
variable menu que nos pedira, ponemos List1.Text
Private Sub Command1_Click
MonWinamp List1.text
End Sub
Recapitulemos:
Hemos creado una funcion llamada MonWinamp que nos enviara la info, una lista
que ahora llenaremos, y un boton llamado Command1 que llamara a la sub MonWinamp
con la variable Menu igual al texto del List1. Y ahora pensareis..y que narices
hay en la lista?? pues sencillo, vamos a crear un bucle que la llene del 40000
al 41000. Con ello nos evitaremos ir escribiendo los valores uno a uno (mira que
eres vago..) xD .Os preguntareis porque hemos puesto ese rango tan raro de
valores, pues la respuesta es sencilla; normalmente los programas suelen
responder en valores cercanos a estos numeros.La sub del Load quedaria asi:
Private Sub Form_Load()
Dim i as Long
For i=40000 to 41000
List1.AddItem i
Next i
End Sub
Por ahora todo perfecto,no? Tenemos el programilla preparado para escanear todos
los valores posibles que enviemos al Winamp.Iremos viendo cada vez que demos al
Boton el comportamiento que tiene nuestro Winamp.
Comenzamos senalando el valor 40000 de nuestra lista..pasa algo? Creo que nop..
Y si ponemos el valor 40001?Siiii! El winamp se nos ha cerrado solito!! jeje..
asi iriamos probando con toda la lista mirando si ocurre algo en el dichoso
programa. Yo ya hice el trabajo sucio, y aki os dejo la lista de constantes
que cumplen lo dicho :-) Las declarais en el modulo y punto.
Public Const WINAMP_CERRAR = 40001
Public Const WINAMP_ABRIR_ARCHIVO = 40029
Public Const WINAMP_OPCIONES = 40040
Public Const WINAMP_ABOUT = 40041
Public Const WINAMP_POPUPMENU = 40043
Public Const WINAMP_PAUSA = 40046
Public Const WINAMP_STOP = 40047
Public Const WINAMP_SIGUIENTE_CANCION = 40048
Public Const WINAMP_SUBE_VOLUMEN = 40058
Public Const WINAMP_BAJA_VOLUMEN = 40059
Public Const WINAMP_ALANTE_5SEG = 40060
Public Const WINAMP_ATRAS_5SEG = 40061
Public Const WINAMP_ABRIR_LOCALIZACION = 40155
Public Const WINAMP_DOBLE_TAMANO = 40165
Public Const WINAMP_ABRIR_DIRECTORIO = 40187
Public Const WINAMP_INFO_ARCHIVO = 40188
Public Const WINAMP_PREFERENCIAS = 40191
Public Const WINAMP_VISUALIZACION = 40192
Public Const WINAMP_ANTERIOR_CANCION = 40198
Ya tenemos todo lo que queremos! Ahora creariamos un proyecto nuevo (que sera
nuestro programa final), y aplicamos nuestros conocimientos :) Os pongo un
ejemplillo:
Para crear un pequenyo virus que inhabilite el winamp, insertamos en un proyecto
nuevo un timer (le mandaremos la constante WINAMP_CERRAR), metemos estas
constantes en un modulo, junto con la api PostMessage y FindWindow,y programamos
en el timer con un intervalo corto que llame a nuestra funcion MonWinamp
WINAMP_CERRAR. Creo que queda claro.Os pongo el ejemplo pa que no os canseis..
Private Sub Timer1_timer
Timer1.Interval = 1
MonWinamp WINAMP_CERRAR
End Sub
Y ya esta!!! con esto estamos jodiendolo de arriba a abajo xDDD.
Una vez que ya habeis comprendido mas o menos el concepto de la Monitorizacion
del software, vamos a dar un pasito mas alla, y crearemos un programilla que no
solo obligara a hacer accionesa otro, sino tambien recogera elementos del mismo
(variables).
Pero antes, advertiros de que lo que hemos aprendido hay, funciona en el 99%
de los programas que tenemos a nuestra disposicion (winzip,messenger,...).
Aunque os encontrareis un problema, y es como encontrar el hwnd de la ventana
principal.
Os explico: la API FindWindow tiene dos posibilidades, buscar un programa por su
titulo (si por ejemplo estamos en la web de SET, el titulo seria 'SET
Saqueadores Edición Técnica - Microsoft Internet Explorer' si usas el explorer
claro.. este titulo lo pondrias al llamar a la funcion FindWindow en la variable
lpWindowName As String dando la otra adjunta lpClassName As String como
VbNullString(nada). Si por lo contrario sabes el nombre del modulo de clase que
usa el programa (el winamp usa uno llamado Winamp 1.x, el winzip uno llamado
WinZipWClass,etc..) puedes buscar el programa mediante la variable lpClassName
dando lpWindowName como nula.
Ten en cuenta que ambas variables son sensitive case. De todas formas hay
programas que te detectan el titulo y modulo de clase solos, y asi no tienes
que andar mirando si te comes las letras y eso xDD ..os recomiendo el WinHack,
un programilla bastante cutre que te servira por ahora para lo que queremos. Lo
tienes en miles de paginas de source de vb, pero de todas formas os doy un link
por si acaso:
http://www.moon-soft.com/download/other/index3.htm
La web es china (vamos, o de por alli xDDD) pero vienen un webo de proyectos
de open source que nos podran venir bien. Si por cualquier motivo la web esta
chapada, hacemos lo tradicional, nos metemos en el google y hacemos una de
vb+winhack y punto.
Pues con esto acabariamos la primera parte del tema..no se si os convence
todavia, pero esperaros a nuestro proximo objetivo y vereis.
*EOF*