lunes, 8 de octubre de 2007

Las estructuras

Alien [blackhat4all@gmail.com]

Pienso que los que se están leyendo esto es porque alguna vez se han enfrentado a un lenguaje de programación, a sus tipos de datos y variables, a sus warnings y errors. Si es así, pienso también que les habrá pasado por la cabeza alguna vez crear un programa que trabaje con datos cargados desde un archivo, no sé..., algo como datos de personas o cosas así.

Si aún no se han adentrado en el tema de las clases, quizás hagan para esto algo como:
Nombre -> Tipo texto
Edad -> Tipo entero
Teléfono -> Tipo entero
Dirección -> Tipo texto
...

Y no está nada mal para alguien que aún no domine todos los artilugios del lenguaje pero… ¿han tratado de ir más allá?.

Lo más parecido a las clases son las estructuras. Estas son un tipo de dato nuevo creado a conveniencia del usuario y que puede almacenar la información que este quiera. Veamos un ejemplo.

Si quisiéramos crear una variable que almacene el nombre de una persona, en C++ haríamos algo como:
String Nombre;

Si esto mismo lo quisiéramos hacer en Visual Basic:
Dim Nombre

Si el caso fuera en JavaScript, quizás sería así:
Var Nombre;

Pero… ¿y si lo que queremos almacenar es un conjunto de datos que no son de un mismo tipo, y no es tan complejo como para necesitar una clase?. Para eso están las estructuras.

Digamos que vamos a hacer un listado de los asistentes a una reunión, y de ellos necesitamos sus nombre, edades y direcciones para localizarlos (un ejemplo sencillo)

Para esto, en C++ deberíamos hacer una estructura de la siguiente forma:
Type Def Registro(String Nombre; int Edad, String Direccion)

Visual Basic:
Type Registro
  String Nombre
  Int Edad
  String Direccion
End Type

Todo lo que hemos hecho es crear un nuevo tipo de dato como el entero, o la cadena, solo que a diferencia de estos que almacenan un tipo de dato fijo, el nuestro almacenará un conjunto de tipos de datos ya existentes, y completamente válido en cualquier lenguaje.

Aunque todo esto está bien, sería ilógico crear una estructura para almacenar un solo registro. Generalmente las estructuras siempre van acompañadas de un arreglo, permitiéndonos almacenar varias entradas, también se pueden ligar con los arreglos dinámicos o listas simples, enlazadas o cualquier otro recurso permitido por el lenguaje para almacenar varios campos.

Después que tenemos la estructura y el arreglo, ya podemos guardar en estos la lista de los asistentes o cualquier otro ejemplo que nos sea puesto.

Para insertar un elemento en un arreglo numérico se necesita la posición en la que se quiere insertar el valor y el valor como tal, de la misma manera se hace para insertar un elemento dentro de un arreglo de un tipo de dato creado por nosotros mismos, se requiere en primer lugar el índice dentro del arreglo y por consiguiente en este caso los valores que vamos a colocar. De igual forma se le pide a una estructura contenida en un arreglo el valor, veamos un ejemplo en Visual Basic:

Type Persona
  Dim Edad
  Dim Nombre
End Type

‘Se crea Lista que es del tipo de dato persona y es la forma en que nos vamos a referir a este Nuevo tip de dato
Dim Persona as new Lista
‘Se crea el arreglo de 10 elementos y de tipo Lista
Dim Arreglo(9) as Lista

‘Para insertar un elemento en la posición 0
Arreglo(0).Lista.Edad=10
Arreglo(0).Lista.Nombre=Pepito

‘Para tomar un valor
Msgbox (“La edad de ” & Arreglo(0).Lista.Nombre) & “ es ” & Arreglo(0).Lista.Edad & “ años.”)

Las estructuras por lo general se usan para este tipo de casos, aunque no por esto deben suplantar el uso de las clases, las cuales por su complejidad (que no es tanta), permiten más facilidades a la hora de usarlas, pero mejor dejamos las clases para otra edición.

Continuar leyendo

Introducción al cracking con OLLYDBG desde cero (II)

Omar [omarherrera@infomed.sld.cu]

Ya conocemos las partes que se ven en la ventana principal del OLLYDBG, aunque también hay más ventanas que no se ven directamente; se puede acceder a ellas, tanto por el menú, como por los botones de las vistas.

Veremos qué representa cada uno:

El botón L o VIEW-LOG nos muestra lo que el OLLYDBG escribe en la ventana del LOG lo cual puede ser configurado para mostrar diferentes tipos de información. Por defecto, en la ventana del LOG va guardando allí información sobre el arranque y acerca de la información escrita en el mismo por los diferentes BREAKPOINTS CONDICIONAL LOGS, lo cual se verá mas adelante. Por ahora vemos allí la información del proceso que arrancó: en este caso, el crackme de cruehead, las dll que cargadas y ciertos tips sobre el análisis.

Una de las opciones más importantes de esta ventana es la de loguear a una fila para ciertas situaciones en que deseemos guardar la información en una fila de texto, en ese caso CLICK DERECHO-LOG TO FILE.

El botón E o VIEW-EXECUTABLES nos muestra la lista de los ejecutables que utiliza el programa: exe, dlls, ocxs, etc.

Aquí también el botón derecho tiene muchas opciones que por ahora no veremos ya que estamos revisando en forma general el OLLYDBG.

El botón M o VIEW – MEMORY nos muestra la memoria ocupada por nuestro programa; allí se ven las secciones del ejecutable, las dll que utiliza el proceso, así como el stack y diversas secciones asignadas por el sistema. Muchas veces al correr los programas, los mismos realizan nuevas asignaciones de memoria en tiempo de ejecución.

Con clic derecho podemos hacer SEARCH en la memoria para buscar en ella strings, cadenas hexa, unicodes etc. Además nos da la posibilidad de colocar diferentes tipos de breakpoints en la secciones, así como también la posibilidad de cambiar el acceso a las mismas con SET ACCESS. Ya profundizaremos en esto.

El botón T o VIEW-THREADS nos da el listado de los THREADS del programa.

Aunque no sabemos aún qué es esto, y la explicación llegará en los próximos artículos, es bueno ir familiarizándose con dónde está cada cosa. Luego aprenderemos qué es y cómo se usan.

El botón W o VIEW-WINDOWS nos muestra las ventanas del programa. Puesto que aún no ha corrido, no hay ventanas, así que estará vacía.

El botón H o VIEW-HANDLES, nos muestra los handles; por ahora, localícenlo. Ya explicaremos qué es y para qué sirve

El botón C o VIEW-CPU nos retorna a la ventana principal del programa.

El botón / o VIEW-PATCHES nos muestra los parches si el programa ha sido modificado. Por ahora estará vacío al no presentar cambios

El botón K o VIEW-CALL STACK nos muestra el call stack, que es el listado de los calls que entremos hasta el punto donde el programa esté detenido.

El botón B o VIEW-BREAKPOINTS es el listado de los breakpoints comunes colocados en el programa. No muestra los hardware breakpoints ni los memory breakpoints aquí, solo los BP comunes.

El botón R o VIEW-REFERENCES nos muestra la ventana de referencias la cual nos da los resultados de efectuar una búsqueda de referencias en el OLLY

El botón … o VIEW-RUN TRACE nos muestra el listado si hemos hecho algún RUN TRACE en nuestra máquina, y tiene también la posibilidad de elegir LOG TO FILE para guardar el resultado del traceo en un archivo txt

Bueno hasta aquí un paneo a vuelo de pájaro por los botones mas importantes. No detallaremos la explicación porque aún antes hay que aprender algo de ASM y practicando el uso del OLLYDBG podremos ir aclarando más profundamente para qué sirve cada botón y cada OPCION. La idea es ir familiarizándose con dónde están las cosas que veremos en las próximas entregas.

CÓMO CONFIGURAR EL OLLYDBG COMO JIT ( JUST IN TIME DEBUGGER)

Aclaro que no conviene tener configurado el OLLYDBG constantemente COMO JIT. Solo conviene hacerlo en ocasiones especiales, ya que al estar como JIT capturará el error de cualquier programa de nuestra máquina y arrancará solo, lo cual puede resultar molesto si no estamos debuggeando o crackeando. Por lo tanto les enseño cómo se configura para casos especiales, pero conviene dejarlo con la opción que trae por defecto, en la cual no está como configurado JIT.

Para colocar el OLLYDBG como JIT vamos a OPTIONS-JUST IN TIME DEBUGGING

Se activa los botones MAKE OLLYDBG JUST IN TIME DEBUGGER y DONE

Para quitarlo, en el mismo lugar se activan RESTORE JUST IN TIME DEBUGGER y DONE

Bajamos el plugin COMMAND BAR el cual puede ser descargado de AQUÍ.

Ahora, antes que nada, crearemos una carpeta para los PLUGINS en nuestra máquina. Yo la creé en C:/ y la llamare PLUGINS. Nada más. Ahora deberemos configurar el OLLYDBG para que reconozca esta carpeta como la que contendrá los plugins.

Para ello en el OLLYDBG vamos a OPTIONS-APPEARANCE y en la ventana que se abre vamos a la pestaña DIRECTORIES. Vemos que el path de los plugins (PLUGIN PATH) en realidad está apuntando a la carpeta donde está el OLLYDBG.exe y podría dejarse allí, pero a mí me gusta tener los plugins separados, por lo tanto donde dice: PLUGIN PATH-BROWSE busco la carpeta que creé para mis plugins.

Allí se elige la carpeta PLUGINS que creamos y saldrá el aviso de que se debe reiniciar el OLLY para que reconozca la nueva carpeta de plugins. Pero antes deberemos copiar el contenido descargado del Comand Bar a la carpeta de plugins.

Allí se copiará todo el contenido y se pegará en la carpeta PLUGINS.

Allí estará el contenido del plugin Command Bar en la carpeta PLUGINS. Para cada plugin que se descargue y se agregue solo deberá copiarse su contenido en esa carpeta. Muchas veces será suficiente con copiar solo la dll.

Ahora se cierra el OLLYDBG, si aún estaba abierto y se reinicia.
Veremos que en el menú PLUGINS aparece el COMMAND BAR y las opciones del mismo.

A su vez, en la parte inferior del OLLYDBG veremos la COMMAND BAR instalada.
Es una barra para teclear comandos que nos facilitará mucho las cosas. más adelante veremos su uso; por ahora lo importante es saber agregar plugins.

Para quitar cualquier PLUGIN, bastará con solo eliminar la dll correspondiente de nuestra carpeta PLUGINS y reiniciar el OLLYDBG. Les aconsejo que dejen siempre activa la COMMAND BAR.

Finalmente, se inicia nuevamente el crackme de CRUEHEAD EN OLLYDBG

Las teclas mas usadas en el OLLYDBG son:

F7: Ejecuta una sola línea de código (si estás en un CALL, entra al mismo a ejecutarlo por dentro) F8: Ejecuta una sola línea de código (si estas en un CALL, no entra al mismo: lo ejecuta completo sin entrar y sigue en la siguiente línea luego del CALL)

Esas dos formas de tracear manualmente son verdaderamente diferentes y según cada caso usaremos F7 o F8 lo cual veremos más adelante.

F2: Coloca un Breakpoint común en la línea que marcas con el mouse o está agrisada en el listado. Para quitar el BP se activa nuevamente F2.

Por ejemplo:


Quiero poner un BP en 40101A,  pues marco con el mouse esa línea


Al hacer clic una sola vez se marca y queda agrisada como vemos en la imagen. Luego se activa F2.

Vemos que se torna roja la zona de la dirección; eso significa que hay activo un BP o Breakpoint allí. Si se activa nuevamente F2, se elimina.

F9: Para Correr el programa el procedimiento es similar a RUN. Con esto, el programa correrá hasta que encuentre algún BREAKPOINT o alguna EXCEPCION que lo detenga o FINALICE por algún motivo. Al activar RUN veremos en la esquina inferior del OLLYDBG la palabra RUNNING o sea que esta CORRIENDO.

Allí se inicia el CRACKME DE CRUEHEAD. Lo podemos ver correr

Se PAUSA la ejecución en OLLYDBG apretando F12 o DEBUG–PAUSE

Vemos que el OLLYDBG cambia para mostrar PAUSED, o sea, que esta PAUSADO. Podemos volver a hacerlo correr con F9 o DEBUG-RUN.

Para cerrar el programa que se está DEBUGGEANDO se activa DEBUG-CLOSE

Bueno esto ha sido una mirada a vuelo de pájaro del OLLYDBG, la cual profundizaremos más adelante pues tiene muchísimas opciones y configuraciones que seguiremos estudiando en las próximas entregas. Es muy útil que bajen el programa lo configuren y miren dónde están las cosas que muestra este tute, así como le agreguen el plugin para practicar y hagan correr y pausar el CRACKME DE CRUEHEAD., Prueben a ponerle un Breakpoint y practiquen esas cosas para que en la segunda entrega estén mas familiarizados con el mismo y podamos avanzar lento pero seguro... y sin dudas.

Continuar leyendo

Consejos útiles

Lennon [ruben.bestard@infomed.sld.cu]

Es importante antes de hacer cualquier mantenimiento a las computadoras personales tener en cuenta algunos requerimientos imprescindibles.

Primeramente tener un lugar amplio, con buena iluminación, fresco, organizado, para la comodidad de la persona al trabajar. Por otra parte se debe tener en cuenta las distintas condiciones personales como son la PROHIBICIÓN del uso de prendas como anillos, cadenas, relojes de metal y cualquier otro elemento que entorpezca el trabajo a fin de cumplir las normas de seguridad y evitar daños de hardware y aún más importantes daños físicos.

Después de cumplidas las condiciones anteriormente mencionadas se puede comenzar a trabajar.La computadora personal como cualquier equipo electrodoméstico requiere de mantenimiento periódico ya sea de software o hardware para garantizar su óptimo funcionamiento y larga vida útil.

Empecemos por el mantenimiento del software: Independientemente del sistema operativo (cualquier versión de Windows) la rutina de mantenimiento es prácticamente la misma. Es muy importante ejecutar semanalmente el liberador de espacio en el disco con el fin de borrar toda esa información innecesaria que nos roba espacio libre disponible. Después el Scandisk con el propósito de reparar errores en la superficie del disco duro y luego ejecutar el Desfragmentador de disco. ¿Por qué? Los datos en el disco duro se almacenan de forma fragmentada, o sea en clústeres separados. En el momento que vamos a llamar esa información el sistema tiene que encargarse de reunir todos esos clústeres y organizarlos y luego mostrarla. La información del disco duro está en lugares diferentes, muy separada una de otra y por esta causa el sistema se hace muy lento. Al defragmentar el disco esos clústeres se organizan lo más cerca posible uno de otros (los del mismo tipo) y así al utilizarlos sea más rápido la exhibición de la información.

Existen para esto programas efectivos y sofisticados que realizan todas estas funciones de forma rápida y menos trabajosa, podemos mencionar algunos como: TuneUp Utilities, Disk Keeper, etc.

La otra parte del mantenimiento y no menos importante es la parte del "cacharreo".
Comenzamos con destapar el chasis de la PC. Teniendo así a la vista los distintos dispositivos como la memoria RAM, el disco duro, el lector de disco Floppy (3 ½), microprocesador, chipset, etc.
Lo primero que vamos a hacer es desconectar la fuente de la AC y de la placa base (motherboard) , destapar el chasis y tener la placa a la mano. Con una brocha adecuada o con spray limpiador se desprende el polvo de los componentes y mejor aún del ventilador. Es muy importante que no quede absolutamente nada de polvo ya que él mismo causa sobrecalentamiento del circuito, ineficiencia al ventilar o disipar el calor hacia el exterior y acumulación de humedad. Si es posible, desmontar también el ventilador (o fan, en inglés) del chasis de la fuente y eliminar el polvo de las aspas así como lubricar el eje rotatorio. Posteriormente procedemos a armar con mucho cuidado la fuente, teniendo en cuenta que sufra daño alguno. Al hacer esto probamos el funcionamiento de la fuente conectándola solamente a la toma de AC 110 voltios. Con un multímetro digital o analógico comprobamos el voltaje de salida:

Modelo ATE: la punta del multímetro al cable negro de salida de la fuente y comprobar en la toma de dispositivos (conector de alimentación a lectores de CD, discos duros etc) los 5 voltios y los 12 voltios con la punta positiva del multímetro.

Modelo ATX: Ponemos en el conector de la fuente que va al motherboard (el de mayor tamaño y que contiene mayor cantidad de cables) la punta negativa del multímetro al cable negro y comprobamos en los demás cables con la punta positiva del multímetro hasta encontrar los 5 voltios de Standby.

Si esto está bien, entonces la fuente funciona, debemos cerciorarnos también de la rotación del ventilador. Debe hacerlo de forma rápida y silenciosa.

Pasemos ahora al mantenimiento de los demás dispositivos. Extraemos de la placa las memorias RAM, el microprocesador, los cables de transmisión de datos (IDE o SATA), las tarjetas conectadas a los zócalos PCI, ISA y/o AGP etc con el fin de tener la placa base libre para toda manipulación. Con la misma brocha o spray limpiador dejamos libre de polvo y suciedad la placa y los zócalos. Nunca use par este fin el alcohol, thinner, o agua ya que podría dañar de forma irreparable su PC. Concluida esta tarea, tomamos cada dispositivo, lo limpiamos de la misma forma y lo conectamos cuidadosamente. Las tarjetas se limpiarán minuciosamente y los contactos de oro se limpiarán con una goma suave que no suelte mucha viruta ( puede ser la goma de un lápiz) igualmente con las memorias RAM.
El microprocesador es un trabajo aparte ya que lleva un poco más de trabajo. Primeramente separar el disipador del ventilador y así poder limpiar cuidadosamente el disipador y el ventilador. La limpieza perfecta y minuciosa del microprocesador es la clave para la duración de su vida útil.

Realizado éste trabajo, podemos pasar al mantenimiento de los lectores y discos duros.
Al manipular el disco duro se debe tener un cuidado especial, y que el más mínimo golpe causaría un daño irreparable y la pérdida de todos sus datos. El mantenimiento de éste dispositivo se divide en dos partes: la lógica y la física. La parte lógica ya fue descrita anteriormente y la física sólo consiste en eliminar el polvo de su circuito.
El mantenimiento a lectores es también de mucho cuidado, ya que posee lentes y cabezales (en el caso de los lectores floppy). Consiste también en la eliminación del polvo y la limpieza de sus lentes con discos limpiadores y spray quita-polvo así como del circuito que lo compone. Si es necesario, lubricar las ruedas dentadas y el mecanismo de introducción y extracción de la bandeja en el caso del lector de CD/DVD-R.

No se puede dejar de mencionar que debemos quitar el polvo de los ventiladores que se encargan de extraer el aire caliente del interior de la PC y utilizar el lubricante adecuado en caso de que se encuentre girando de forma lenta o ruidosa.

Después de limpiar todos los componentes y dispositivos procedemos al ensamblaje de la PC, teniendo en cuenta la configuración de cada dispositivo. Si en este proceso se presenta algún problema trate de razonar, nunca fuerce ningún dispositivo, puede causar daños irreparables. En este ensamblaje nunca use herramientas indebidas o defectuosas ya que pueden demorar mucho el trabajo o dañar algún que otro componente.

Al ensamblar completamente la PC, se inicia el sistema, y si no tiene ningún problema, a medida que va trabajando en ella podrá darse cuenta si valió la pena el tiempo invertido en su mantenimiento.

El monitor o display debe tener una buena ventilación y se le puede dar mantenimiento de la misma forma que la PC, eliminando el polvo etc. Es recomendable colocarle un ventilador o extractor.
Al ratón o mouse se le da mantenimiento igualmente y es muy importante también la limpieza de los rodillos y la bola o el sensor óptico.
Con el teclado se procede de igual manera y se le pueden limpiar las teclas con un trapo húmedo. No se recomienda la utilización de alcohol ya que se pueden borrar las letras.

SUGERENCIAS:
1. Coloque su PC en un lugar ventilado
2. Evite la exposición directa a la luz del sol y a la lluvia.
3. Desconecte la PC de la línea de AC ante las descargas eléctricas.
4. Evite la utilización de la PC en las horas más cálidas del día.
5. Tenga siempre un buen antivirus actualizado. Recomendaciones: Kaspersky, Norton (Symantec), McAfee, Nod32, etc.

Espero que con ésta sencilla guía usted pueda trabajar más cómodo y con eficiencia.

Continuar leyendo

El Laberinto 3D

Ariel-NM [blackhat4all@gmail.com]

En el artículo anterior desentrañábamos las diferencias esenciales entre los conceptos “2D” y “3D”. Hoy les presentaremos un apretado resumen de las etapas por las que transita el diseño 3D en una animación. Por supuesto, trataremos aquí las cuestiones puramente técnicas del diseño asistido por computadoras dejando fuera a guionistas, dibujantes, operadores de audio, productores, choferes… Y como cada oficio tiene su jerga, ya de paso iremos presentando el vocabulario específico que se emplea en esta profesión.

Una buena parte del vocabulario y del algoritmo de trabajo es común a casi todas las plataformas de diseño 3D. En todos los casos, el diseñador trabaja en un área de la interfaz que representa un espacio tridimensional denominado escena. Todo cuanto se incluya en la escena recibe el nombre de objeto. Esta denominación se aplica por igual a luces, cámaras, poliedros, sistemas de partículas e incluso entidades que simulan campos de fuerza como la gravedad y el viento.

Los objetos aparecen en la escena de forma más o menos burda según la tarjeta de video que se emplee y de la opción que elija el usuario. Esta apariencia, claro está, no sirve para fines artísticos: una vez concluida la escena, esta deberá convertirse a su versión fotográfica mediante un proceso denominado representación o render . Este paso puede durar desde fracciones de segundo hasta varios meses en dependencia del número y tamaño de los fotogramas, la cantidad y complejidad de los objetos, las texturas empleadas y el hardware disponible. El resultado de la representación se obtiene en los formatos comunes de imagen fija (bmp, jpg, png, tga, tif…) o de video (avi, mov…). Aun con las mejores tarjetas de video existentes en la actualidad, la diferencia entre la escena y su render final es más que notoria:

Por supuesto, no todos los objetos de la escena aparecerán explícitamente en la imagen final. Las fuentes de luz, por ejemplo, no se representan a menos que se indique expresamente a través de los efectos de lente o los efectos volumétricos :

En general, el algoritmo del diseño 3D puede resumirse en cinco etapas, a saber:

•  El modelado , donde se crean los objetos que servirán de personajes, utilería y entorno escenográfico;

•  El ensamblaje o rigging , proceso en el cual se acopla al cuerpo del personaje un sistema de “huesos” para conformar su esqueleto, que usualmente es lo que se anima;

•  El ajuste fotográfico , en el cual se establecen las texturas de los objetos (incluyendo el pelo), las fuentes de luz, las cámaras y los efectos ópticos;

•  La animación , procedimiento gracias al cual se dota de movimiento –en el más amplio sentido de la palabra: todo cuanto signifique un cambio– a los objetos de la escena;

•  Y finalmente, el render , que comprende todo el trabajo de edición y postproducción de video.

Por supuesto, si el resultado final está destinado a una imagen fija, se podría omitir la animación.

La banda sonora –que se supone ya esté editada– se incluye en cualquiera de las dos últimas etapas aunque por lo general se trabaja interactivamente durante la animación. Por ejemplo, la voz de un personaje se usa como referencia para la sincronización de los labios con cada sonido o fonema.

Cada una de estas etapas representa toda una especialidad en las medianas y grandes producciones, y cada especialidad, a su vez, incorpora a un conjunto de artistas. Cada equipo trabaja interconectado por una red local donde se intercambian personajes y escenarios que sirven de referencia mutua.

El modelado es el proceso básico en la cadena una animación 3D. Este parte de los bocetos de los dibujantes y es además la etapa que impone el tono en el resto del proceso. Un diseño no realista, por ejemplo, no exige realismo en las etapas subsiguientes:

Fotograma de Geri's Game , una deliciosa pieza psicológica, premio Oscar al mejor corto de animación en 1997. El modelado del personaje es caricaturesco, la escenografía es funcional, las texturas son bien simples… Eso sí: los animadores de Final Fantasy-The Spirits Within deberían tomar lecciones del equipo de Geri's Game a fin de dotar a sus fríos personajes con la vívida expresividad de este vejete.

En la mayoría de los casos los objetos modelados son estructuras poligonales. Estas se arman a partir de numerosos polígonos yuxtapuestos. Y en verdad, estos objetos que se ven tan “sólidos” no son más que cascarones huecos:

La red de polígonos que conforma un objeto poligonal recibe el nombre de malla.

Los programas 3D permiten generar directamente diferentes objetos geométricos como esferas, cubos, conos, cilindros… pero en la mayoría de los casos estos resultan demasiado simples, por lo cual se toman como punto de partida para modelar objetos más complejos. A este proceso se denomina editar la malla.

En el proceso de edición de una malla se utilizan diferentes modificadores para torcer, aguzar, doblar, estirar, ondular, etc. el objeto, o bien se alteran directamente los elementos integrantes de la malla (vértices, aristas y polígonos). De este modo, se puede crear la cabeza de un personaje modificando los elementos de una simple caja:

Otro método de abordar el modelado es partir de curvas simples (líneas, arcos, círculos…). Las curvas pueden servir de generatrices, secciones transversales o aristas de polígonos en los objetos resultantes. Un caso particular entre las curvas son las llamadas NURBS (Non- Uniform Rational B - Splines) , las cuales reúnen un conjunto de propiedades y herramientas muy singulares.

Sombrero de guano modelado empleando NURBS a modo de curvas de nivel

Especialmente versátiles son los llamados sistemas de partículas, destinados a representar flujos de gases y líquidos, así como polvo, lluvia y aerosoles, imposibles de crear de otro modo. Un sistema de partículas consiste en un emisor desde el que emerge un enjambre caótico de pequeños objetos cuya forma, tiempo de vida, velocidad, rotación, multiplicación, etc. se controla globalmente. El objeto emisor no necesariamente aparecerá en la imagen final pero sí las partículas.

Existen diferentes sistemas de partículas, cada uno de los cuales se presta mejor para simular un determinado fenómeno. La mitad del éxito cuando se emplean partículas depende de la textura que se les otorgue. La otra mitad depende del comportamiento de estas, desde su nacimiento hasta su extinción. Ciertamente, un mismo sistema de partículas puede simular cualquier cosa:

El comportamiento de las partículas se controla a través de un extenso juego de parámetros destinados a imponer un poco de orden dentro del caos. También pueden recibir la influencia de campos de fuerza (tales como la gravedad y el viento) y de un conjunto de objetos especiales no representables, denominados deflectores, con los cuales se simulan rebotes, reflexiones y refracciones.

Más de la mitad del realismo o la fascinación de una escena lo aportan las texturas . Otorgar textura a un objeto es mucho más que pintarlo de un color: Aquí se pueden controlar el nivel de brillo y su distribución, la transparencia y el carácter reflexivo, la aspereza y un sinfín de características más. En las grandes producciones, la creación de texturas es toda una especialidad a la cual se dedican meses de trabajo.

Para la mesa se usó la fotografía de una vieja puerta de madera. En la tetera intervienen dos imágenes mezcladas

Los programas 3D brindan la posibilidad de emplear cualquier cosa como textura: desde un simple degradado de colores hasta una imagen fija o un video. Por ejemplo, la fotografía de la cáscara de un limón real podría servir para “vestir” un limón modelado, del mismo modo en que se envuelve un objeto con un papel de regalo. También se tienen a mano complejos algoritmos que generan las texturas más increíbles dentro del propio programa: las llamadas texturas de procedimiento.

La conveniente elección de las luces , por su parte, es lo que salva o echa a perder una textura. No olvidar que el cine es hijo de la fotografía, y esta –como su nombre lo indica– no es más que atrapar la luz en un soporte perenne.

Buena parte de esta etapa se destina a las llamadas atmósferas (o efectos atmosféricos) y a los efectos de render. Las primeras están a cargo de la modelación de niebla, nubes, conos luminosos, fuego e, incluso, el pelo. Los segundos se encargan de los juegos de la luz en la “lente” de la cámara (resplandores, halos, rayos…), la profundidad del campo, el tinte de la imagen, el desenfoque por movimiento y muchos otros parámetros.

El encuadre exacto de cada escena se obtiene con el empleo de cámaras virtuales que pueden ubicarse en emplazamientos fijos o animarse libremente. Las cámaras vienen provistas de un amplio surtido de “lentes” y un poderoso zoom, entre otras facilidades. Una de las posibilidades que ofrecen estas cámaras es la habilidad para acoplarse a la perspectiva de una fotografía o un video mediante un procedimiento denominado camera match o camera live.

Buda en el malecón habanero. Montaje gráfico empleando la técnica de camera match . El auto solitario que pasa frente a la estatua y el camión que sale de la sombra del edificio tampoco pertenecen a la foto original. Son modelos 3D

La otra mitad del realismo en una producción cinematográfica proviene de la animación. En los grandes programas 3D prácticamente todo puede animarse: el color de una fuente de luz, la textura de un objeto, la pupila de un personaje…

Los objetos se animan por diferentes procedimientos, desde los fotogramas clave hasta el empleo de complejos controladores. Los controladores son funciones matemáticas que determinan cómo se producirá el cambio de un parámetro. Por ejemplo, la intensidad de una fuente de luz puede variar de forma continua, intermitente, sinusoidal, aleatoria, etc., en dependencia del controlador que se elija para ese parámetro.

Una ventana especial, el editor de curvas , permite añadir nuevos cuadros claves y controladores así como establecer cómo será transición entre un estado y el siguiente por medio de gráficas:

Para la animación de mallas complejas suele emplearse un sistema de huesos que conforman el esqueleto del personaje. La mayoría de los programas de animación 3D disponen de objetos especiales que hacen las veces de huesos. Esto recuerda el proceso de animación llamado stop motion, donde se emplean muñecos de plastilina u otra materia moldeable con una armazón interna de alambre: En el caso de las animaciones asistidas por computadora el esqueleto hace las veces del alambre mientras la malla sería la plastilina.

Para cada hueso se establece una zona de influencia sobre los vértices de la malla. Al animar el esqueleto, la malla se deforma en dependencia del área de acción asignada a cada hueso. Los huesos, claro está, no aparecerán en la imagen final a menos que el usuario lo indique expresamente.

Ejemplo muy simplificado de un sistema esquelético y del modo en que opera: al cambiar la posición de los huesos, la malla se deforma en correspondencia con la influencia de cada parte del esqueleto.

Elegir del número de huesos necesarios y suficientes, colocarlos convenientemente dentro de la malla, establecer sus zonas de influencia de modo que la malla se deforme sin pliegues ni torsiones no es nada trivial y sí todo un arte. El ajuste del esqueleto a la malla se conoce por rigging, y es una especialidad atendida por un equipo independiente de los animadores. Estos últimos reciben el conjunto malla-esqueleto ya listo para trabajar. Solo entonces se procede a la animación de cada personaje.

Cuando las escenas ya están a punto, comienza la “filmación”, esto es, el render . Todos los programas 3D poseen su propio sistema de representación; no obstante, existen numerosos motores de render del tipo stand-alone que admiten ficheros de diversas plataformas. Quizá el más poderoso sea el Pixar Renderman. Un caso curioso es el Mental Ray el cual –probablemente, por razones de competencia– se integró plenamente a los grandes programas de animación (Maya, 3D Studio MAX, LightWave, etc.)

La potencia de estos motores de render radica en su habilidad para dotar a la imagen final de un realismo increíble al implementar algoritmos para simular fenómenos luminosos como la reflexión difusa o la concentración de los rayos de luz. De no tenerse a mano un motor de render capaz de asumir tales aspectos de la iluminación, habría que ignorarlos o imitarlos empleando fuentes de luz adicionales, asunto que, además de engorroso, nunca queda del todo bien.

La reflexión difusa de la luz (conocida comúnmente por radiosity) es el rebote en todas direcciones de una parte de los rayos luminosos cuando estos inciden sobre superficies no negras. Esto se acentúa en locaciones interiores donde la luz queda prácticamente encerrada dentro de una habitación. En este caso, cada objeto “tiñe” ligeramente con su color propio a los objetos circundantes a la vez que recibe luz coloreada de los alrededores. Esta es la razón por la cual una lámpara ofrece una mayor iluminación si se enciende dentro de un recinto cerrado, de paredes claras, que en plena noche en un espacio abierto.

En las imágenes siguientes se muestra una escena sin reflexión difusa (izquierda) y con el cálculo de radiosity activado (derecha). Nótese en el segundo caso la influencia del color de las cajas sobre las paredes, el techo y el cilindro. Nótese además cómo el piso aparece más claro debido a la reflexión de la luz en las paredes y el techo. Las fuentes de luz de estas escenas están señalizadas con puntos luminosos:

La concentración de la luz (conocida en el argot como caustics) es un fenómeno debido tanto a la refracción como a la reflexión. Como consecuencia de la curvatura de los objetos, la luz puede concentrarse en determinadas áreas de los alrededores provocando así un incremento de la iluminación en esas zonas. El caso típico de concentración por refracción se obtiene con un cristal de aumento cuando, por ejemplo, se intenta quemar un papel con los rayos del sol. El fenómeno de caustics por reflexión se puede observar en las paredes que rodean una piscina techada y bien iluminada o alrededor de los objetos brillantes:

En resumen, el algoritmo de trabajo en una producción 3D –particularmente, si se trata de una película– es sumamente complejo, donde todo está interrelacionado. Una buena textura puede malograrse por un mediocre juego de luces, en tanto ambos aspectos pueden salvar algún defecto del modelado. Esto indica que el diseñador 3D ha de ser escultor, pintor y fotógrafo a un tiempo.

Por otra parte, la animación de los personajes muchas veces olvida la expresión facial o está llena de gestos superfluos que nada aportan a la intención dramática, lo que indica que el animador debe tomar clases de actuación aunque jamás en su vida suba a un escenario.

Por supuesto, alrededor de una producción de envergadura se vinculan otros departamentos que no tienen que ver directamente con el software 3D. Antes de encender las computadoras –aunque, en verdad, actualmente casi todo pasa por ellas– hay que tener a mano una historia, una buena historia que contar, sin la cual todo se perdería en mucha forma y escaso contenido. A esa historia hay que dotarla de dramaturgia, esto es, sobre ella ha de escribirse el guión que indique minuto a minuto qué va a ocurrir.

De este último se valen los dibujantes para esbozar a lápiz los personajes, las locaciones, la utilería y todo lo demás pero siempre tras un extenso e intenso trabajo de mesa donde todos investigan, discuten y aportan. Paralelamente al trabajo de los diseñadores 3D, deberá componerse, grabarse y editarse la música, así como habrá que elegir a los actores, dirigirlos –con ayuda del story board , una especie de guión en forma de tira cómica–, grabar y editar sus voces…

Muchas veces se requiere de especialistas en programas colaterales para lograr una escena compleja. Actualmente, por ejemplo, casi todo el trabajo serio en materia de fluidos corre a cargo del RealFlow, poderoso simulador que importa y exporta desde y hacia las más importantes plataformas 3D. Por su parte, After Effects y Premiere son los más solicitados para el acabado final de muchas producciones aunque algunos prefieren todo cuanto lleve la marca Avid.

Una realización 3D es un trabajo en equipo donde cada colectivo asume una faceta del algoritmo. No obstante, quienes se inician en esta profesión como aficionados tendrán la oportunidad de transitar por todos los “departamentos”, desde el modelado hasta la postproducción.

La práctica les dirá qué les gusta más y dónde podrán ser más diestros.

Continuar leyendo

Wikipedia

Alien [blackhat4all@gmail.com]

Recuerdo con cierta nostalgia los días en que veía a la famosa Encarta como algo más que imprescindible. Miro hacia atrás, y traigo a mi memoria las caminatas para tener instalada la última versión; pienso también en cómo buscaba cualquier cosa sólo para darme el gusto de saber que estaba allí. Me regodeaba cuando alguien me preguntaba sobre un tema específico y yo, con cierta destreza, abría la Enciclopedia y en menos de 5 minutos exploraba algo que estuviera relacionado con la pregunta. Sentía que era lo mejor que se había inventado, y aunque me siento incapaz de negar su utilidad, ya no es uno de los primeros programas que instalo luego de formatear mi PC (ya ni siquiera la instalo para ser sincero.)

Solo un año atrás, cuando para mí la red era algo utópico, Encarta fue mi internet en varios CDs. Pero un buen día, al llamar por primera vez al 8314949, conocí al gigante, al poderoso, al monstruo que tiene en su vientre más de dos millones de artículos en varios idiomas: Wikipedia.

No niego la belleza de Encarta, la forma que tiene de presentar sus temas, su dinamismo, el gran uso que de ella hacen los que aún carecen de conexión; pero cuando de contenido se trata, no cabe la menor duda que Wikipedia se ha ganado un respetable puesto en la red.

Para los que no tienen internet y les resulta imposible hacer clic sobre cualquier vínculo que aparezca tras una búsqueda en Google, Wikipedia se ha vuelto una opción indispensable. En esta enciclopedia residen contenidos sobre casi todas las materias pero, sobre todas las cosas, sabemos que la inmensa mayoría de los artículos que en ella se albergan están regularmente actualizados, posibilitándonos la obtención de un contenido fresco. Además, contrario a otros sitios, se nos da la posibilidad de actualizar nosotros mismos esos artículos, haciendo posible con esto que otras personas puedan beneficiarse con nuestra labor.

Sin embargo, mientras se editaba BlackHat 28, algo me llamó la atención y fue la cantidad de contenido que albergaba Wikipedia en esos momentos. No sé cuántos de ustedes sean wikipedistas, o a cuántos les gusten los asuntos relacionados con las estadísticas, pero lo cierto es que el contenido albergado por Wikipedia en idioma inglés llegaba casi ya a los 2 millones de artículos, mientras que en español, apenas alcanza la cifra de 300000.

¿QuÉ pasa, LATINOAmÉrica?

No quiero, ni pienso cerrar los ojos y buscar justificaciones que hasta a mí mismo me parezcan absurdas, seamos claros. Es el inglés uno de los idiomas que más se habla en el mundo, ya sea como primera o segunda lengua. Muchos de los negocios y corporaciones (referentes, en este caso, a la Informática) han sido erigidos, radican o radicarán dentro de algunos años en América del Norte. Muchas de las páginas que se están construyendo actualmente aquí mismo en nuestro país (y quizás en otros), tienen como requisito que contengan una opción que permita la traducción a otros idiomas, entre los cuales se incluye el inglés. Cuentan los norteamericanos con grandes personalidades dentro del mundo de la computación (aunque muchas de estas han sido compradas a terceros países). Y como si esto fuera poco, el español se habla solamente en los países de América del Centro y Sur (excluyendo a Brasil) y quizás otros en menor cuantía además de España. Entre los latinoamericanos, no son todos los que saben leer y escribir, son menos lo que tienen acceso a una computadora y de los que lo tienen, no creo que más del 50% tengan los conocimientos suficientes como para poder corregir, actualizar o crear un artículo en la Wiki.

Sin embargo, tenemos países como México, que gracias a la proximidad con el Imperio, cuenta con personas que hablan los dos idiomas, y estas muy bien pudieran escribir sus artículos en español. Y otros, como Argentina, de la cual en los 90 salieron varias e-zines, lo que demuestra que al menos cultura informática poseen. Pero este artículo no va dirigido a México ni a Argentina, sino a Cuba y a los cubanos.

En nuestro país se llevan a cabo varios proyectos para incentivar la cultura informática. Se ha creado desde hace algunos años la Universidad de Ciencias Informáticas (UCI), la cual con sus pro y sus contras ha logrado en este año graduar a su primera cosecha de cerebros. Con una frecuencia casi calculada, se crean nuevos Jóven Clubes en los cuales trabajan especialisas con determinado nivel, que pueden, desde sus centros de trabajo y en sus horas libres, aportar un granito de arena.

La misma revista BlackHat, no surgió por capricho, ni por la idea de un universitario de crear algo para entretenerse en sus vacaciones. Creamos esto porque tenemos la fuerte convicción  de que existe potencial, porque pensamos que sólo con un poco de motivación y alguien que diera el primer paso, podríamos lograr aumentar el nivel de cultura informática de nuestro país, cosa que han demostrado sus colaboraciones y sus mensajes de aliento.

1 de 100

Aun si sólo el 1% de la población estuviese capacitada para crear un artículo en Wikipedia (cifra esta con la que no estoy de acuerdo), ese 1% de 11 millones de cubanos crearían 110000 nuevos artículos en esta importante enciclopedia, lo que representaría más de un 33% del contenido ya existente en español.

No pretendo aquí de que se creen temas repetitivos ni hacer guerras de artículos ya que esto, lejos de propiciar el desarrollo de Wikipedia, entorpecería las búsquedas, denigrando aún más los apartados escritos en nuestra lengua natal. Sólo les pido que colaboren, que formen parte hoy de algo que mañana ustedes mismos podrían utilizar.

Es Wikipedia para muchos como la internet, un lugar desde el cual se puede obtener la información sin ningún tipo de compromiso ni pagos con tarjetas, y al cual subir libremente el contenido que deseemos compartir con el resto del mundo. Es el espacio que tenemos para darnos a conocer, y para conocer a los demás. No esperes que el vecino coloque en ella un artículo de los CDs, para luego tú escribir sobre los DVDs. Si se deciden a escribir, háganlo por mera conciencia, y con la minúscula satisfacción de que en este mismo momento no estás sólo, sino que hay millones de personas que piensan como tú y ya están subiendo sus cosas.

Continuar leyendo

Estrategia de un Viruker

Anónimo

Estrategias de un viruker: apuntes de los pasos que sigue un virus para infestar y mantenerse activo en una PC

Con mi máquina fastidiada, que enciende cuando le da la gana, me entró el arrebato de escribir este artículo que pudiera ser bastante sensible debido a su contenido y advierto antes de decir cualquier cosa: LO QUE AQUÍ ESCRIBO ES SOLO CON FINES EDUCATIVOS, EL AUTOR NUNCA HA LLEVADO A LA PRÁCTICA NINGUNA DE ESTAS TÉCNICAS. En lo particular, pienso que hay cosas más interesantes que un virus para demostrar el poderío cognoscitivo de uno, aunque no niego que todo el que ha practicado o estudiado hacking ha sentido la tentación de hacer virus.

Las líneas que verán pertenecen a un resumen de las estrategias que seguiría un virus que pensaba hacer en mis inicios como hacker. En ese tiempo aprendí de todo: ¿recuerdan el artículo de cómo violar la seguridad de un programa rompiendo la pila? Esa es una técnica de una hacker auténtica, y no crean que lo dejé allí donde terminaba (a pesar de que fue un artículo bastante largo), sólo que no puedo mostrarlo todo porque si no, no tendría gracia. Yo no escribo para lamers: si quieren ser buenos, tienen que estudiar ;).

Cada virus tiene una estrategia particular para infestar la máquina y garantizar que se ejecute sin hacerse notar en cada inicio del sistema. También tiene otras estrategias de ataque, que son las más devastadoras porque en general consisten en ataques DOS (Denial of Services), pero para que estas sean efectivas deben primero propagarse lo más rápido posible.

En toda mi vida informática he visto y analizado todo tipo de virus, en especial los gusanos, que son los que emplean técnicas de alto nivel para su propagación. Recuerdo que una vez había escrito en mi DeathNote una técnica de propagación que consistía en crear un archivo del tipo folder.htt (recuerdo que había estudiado la manera en que este funcionaba para configurar contenido html en una página), lo cual le permitía hacer cosas tales como crear un efecto de lluvia en la zona de las propiedades de los elementos seleccionados. Esas vulnerabilidades eran 0days por esos días (vulnerabilidades todavía sin explotar) y ya yo estaba pensando en hacer un virus que quedara para la historia como el Melissa o el Iloveyou, muy famosos en aquellos tiempos. Para ese entonces mi único objetivo era ver como se reproducía... Y que me tilden de loco, pero esa es una sensación parecida a ver un hijo crecer y hacerse notar o la de un dios que crea vida de la nada. Son como líneas de código con conciencia, y a veces hasta le creaba logos al estilo los .info para que lo mostrara cuando dejara sin funcionar la máquina. Al parecer me demoré atareado con otros proyectos y alguien se me adelantó creando un virus cuyo nombre es irrelevante puesto que después se puso de moda y muchos otros virukers lo usaron. Incluso, hubo uno cubano que tuvo varias versiones. En fin, un virus informático siempre es algo muy polémico pero, como dije: hoy por hoy lo considero anárquico.

A aquellas personas que crean que el contenido de este texto es destructivo, les diré que no: hasta las compañías antivirus lo hacen para que el usuario especializado conozca cómo funcionan y se puedan proteger incluso sin antivirus. Yo, por ejemplo, cuando veo un virus más o menos me imagino dónde se podría meter o cómo se reproduciría, así como el nombre del proceso afectado ya que conozco los procesos comunes de Windows, etc. El mismo SAV32 tenía una librería de virus (muy buena, por cierto), que decía la estrategia completa seguida por el virus para infestar, reproducirse y atacar. Pensándolo bien, creo que esos apuntes los hice inspirados en los demos que acompañaban a esa librería, los cuales mostraban la firma (mensaje visual) de algunos virus, principalmente de MSDOS. Es cómo yo digo: “el desarrollo es un riesgo” pero el remedio no es la falta de libertad de conocimiento pues aquí les van mis apuntes. Ojalá les guste,

OJO: puede que muchas de estas técnicas sean obsoletas puesto que dejé de actualizarlas hace casi 3 años y reflejan los conocimientos que tenía en esa época. También están descritas de forma breve para simplificar una idea antes de concretarla. Por eso estos apuntes solo puede ayudarlos a entender la fase inicial de cómo crear un virus:

Vulnerabilidades y posibles 0days

• Paquetes de netsend (servicio activo por defecto interpretado por la máquina) - posible BOF.
• Estudiar conexión a impresora.
• Vulnerabilidad web ::$Data.
• Ejecución de scripts al leer documentos con doble extensión, como .txt.vbs (el logo de un documento de texto se parece mucho a los txt). Luego asignarle a una extensión no usada (evita el escaneo de antivirus) como programa de apertura el virus. Y poner un archivo con un nombre aleatorio y la extensión creada aleatoriamente también) entre los archivos que se ejecutan en el registro \Run.
•Hacer lo mismo para extensiones existentes tan usados cómo el .exe para que se ejecute automáticamente cuando se cargue cualquier programa necesario en el inicio del sistema, ejemplo: explorer.exe. Luego que se ejecute, el virus restaura el valor.
• Sustituir la extensión de un archivo por su CLSID (vbs, o js)
• Crear botones y servicios del Internet Explorer como troyanos.
“Con , aux y clock$” son palabras reservadas por Windows y MSDOS. Cada vez que se haga una petición para crear archivos con esos nombres nos lo negará, pero qué tal si lo hacemos a bajo nivel (Funciones del BIOS mediante asembler)
• Investigar vulnerabilidad WEBDAV, RPC COM, “Scriptlet. typelib” y “Typelib ”
• Vulnerabilidad de los correos “INCORRECT MIME HEADER” (permite ejecutar un código arbitrario pegando un archivo cómo si fuera de sonido).

TÉcnicas y estudios

• Determinar cual host está activo en la red, escanear quiénes tienen servicios de acceso remotos o troyanos (estudiar los más propagados en la zona de expansión). Obtener los host y recursos compartidos más accedidos por el momento.
• Estudiar el lmhosts.
• Usar el nectcat como herramienta para conectarnos al sistema mediante el telnet, es una herramienta muy usada por los administradores de redes y no es considerada un troyano.
• Compilar la Dll que aparece en la ezine Agni-3.
• Probar la creación de un troyano llamado explorer.exe muy útil en Windows 98.
• Ver el FPNWCLNT de la ezine Agni-5. Estudiar registro HKLM\system\CurrentControlSet\Control\LSA.
• El comando AT y el servicio SCHEDULE. Probar si está activo en una máquina.
• SRVANY.exe: convierte un programa daemon (programas con icono en la barra de tareas) en un servicio
-Programa qstart; inicia vista previa en el refrescador
• Manejo del Clipboard (portapapeles).
• Hacerle flooding a la máquina y "nukearla".
• Rootkit con el folder.htt.
• Explotar el RPC (Remote Process Caller)
-Crear un Shell pirata con el netcat

Nombre de la Aplicación

El nombre se escogerá según las características de las técnicas de virus, y se hacen llamativos e identificados con su función.

TechnoMon
Zeraph
KOZ
Chip
Monscript
ClonNer
Appendice
AntiByte
DigiMon
BitMon
Mozter
Puzzle
Halo
Voltus
KOz
CHIPlug
PugMonzteR
HaMMzter
DigiMon
Codevil
Hiper


Recuerden: crear virus no es una virtud ni nos hace más listos que nadie. Hagamos como Picasso cuando pintó Guernica: convertir la ira en arte. Si quieres pasar a la posteridad por hacer un programa, mejor haz uno que llame suficientemente la atención tal que los demás lo soliciten, o que desarrolle toda una comunidad como el Napster, o el BIT Torrent. Eso sí es meritorio. Los virus son típicos de estudiantes o de newbies, o si no, de hackers vándalos o que trabajen para la mafia, y esos son escasos y no cuentan en el underground. Recuerda que el hacker es creador no destructor, crea nuevas formas de hacer no las destruye.

¡Buena suerte y les deseo buen código!

Continuar leyendo