lunes, 15 de octubre de 2007

¿Diseño o contenido?

Alien [blackhat4all@gmail.com]

¿Diseño o contenido?, es quizás esta una pregunta polémica para muchas personas. Los diseñadores de páginas web, defenderán el concepto de que el diseño constituye un factor importantísimo en cualquier proyecto, tanto como para considerarse que representa el 50%. En otros lugares y desde otros puntos de vista, las personas consideran que el contenido lo es todo. Yo, corriendo el riesgo de discrepar con uno de estos dos grupos, daré mi punto de vista.

Si analizamos la historia de las publicaciones, vemos como hace un tiempo atrás las páginas más populares se podían considerar aquellas que más animaciones tenían, o las que más imágenes podían colocar, o las de más colores, o más variedad o cualquier otro aspecto menos el contenido que llevara esa página. Me viene a la mente la página de Microsoft. Desgraciadamente de ella no puedo hablar de contenido, ya que nunca he tenido tiempo de leerla, el solo hecho de abrirla en el navegador se demora, desviando mi atención hacia otra cosa, y es que, es evidente, no está hecha para Cuba. Por otra parte, a lo largo de las décadas comprendidas entre el 80 y 90 y quizás incluyendo los dos o tres primeros años del actual siglo, circularon por toda América una serie de publicaciones informáticas con un contenido bastante fuerte. Las mismas estaban hechas en su mayoría en formatos .txt y, aún así, lograron acaparar la atención de todos los que se interesaban en el tema, tanto fue, que después de varios años llegaron a nuestro país, y ya con parte del contenido desactualizado conozco personas que las guardan como tesoros, entre ellos yo.

No es menos cierto que el diseño le imprime un mayor atractivo visual a lo que se lee y quizás, sólo quizás, me hubiese gustado más leerlas en otro formato. Pero un buen diseño, para nada debe entorpecer la lectura u opacar la misma, sino que debe ir a la par de esta, y estar enfocado, bien enfocado, al contenido.

A la hora de crear una página web, se debe tener bien claro que es lo que se quiere colocar, si información de determinada importancia o simplemente se va a crear para que los que la visiten digan: “ay, qué bonito...”. También hay que pensar en el medio de distribución que tendrá la página, ya que estando online o siendo enviada vía correo electrónico, los que van a acceder a ella deben poder visualizarla por completo en poco tiempo y no debe ser tedioso tener que esperar para ver todas las imágenes.

Para esto podrían utilizarse o muchas pequeñas imágenes, pocas grandes, o aún mejor, creando una hoja de estilo, asignarle distintas tonalidades a los div que se coloquen, de forma tal que parezca más colorida a costa de unos cuantos caracteres. Sin embargo, si se va a hacer de esa forma, se debe pensar en colores que acompañen visualmente al color de fondo, deforma tal que no parezca un arcoiris, sino un gama de colores agradable a la vista.

La mayoría de las personas de hoy en día, principalmente en nuestro país, no busca tanto la belleza estética, sino la rapidez y eficiencia de un sitio. Ya han quedado un poco atrás las animaciones flash en la parte superior de la página, ya que en la mayoría de las ocasiones no aporta nada más que demora en la descarga a quien accede al sitio. La web ha dado un giro enfocándose un poco más en el contenido, y los ejemplos sobran, aunque para mi, uno de los más grandes y al que tengo acceso es Wikipedia. Si le echamos una mirada, vemos que las imágenes no abundan, y sin embargo es casi siempre que se hace una busquda, uno de los primeros resultados ofrecidos por Google, y es que los que visitan la Wiki, no van a buscar belleza, sino rapidez e información (Contenido).

Otra cosa que debe tener un diseño es originalidad, cosa esta cada vez más difícil de lograr en una red plagada de sitios, todos buscando lo mismo: Distinción. Pienso, que sin tener que tocar temas clásicamente censurados, en este loco mundo que vivimos hay temas de sobra para abarcar toda la red, y si a esto le sumamos un diseño particularmente adaptado a lo que se trata en nuestro sitio, lograremos un nivel de diferencia tal, que quizás desde lejos, con sólo mirar el diseño y la forma de distribución del contenido y sin tener que llegar a leerlo, un usuario puede ser capaz de diferenciar un sitio de otro.

Después de todo esto, pensarán que soy un hombre de la edad de piedra, que vive incrustado en un mundo gobernado por las  ventanas DOS y escribe todas sus cosas en .txt. No pienso discutir ni dar explicaciones que quizás ustedes no logren entender, sólo me limitaré a preguntarles si aún ustedes continuaran inscribiéndose en BlackHat, si al descargar este proyecto, les llevara más de 5 min, o ¿qué piensan de los correos con asuntos como “si no lo envias en 10 minutos...”, donde prima una imagen gigante con un texto pocas veces interesante?. La respuesta es lógica, por lo menos para mi.

Si, soy de los que piensan que cada medio debe tener sus peculiaridades, y así como la radio es, entre otras cosas, un medio de comunicación donde deben desempeñarse como locutores aquellos que tengan una buena dicción, la web que creemos, debe tener también una razón de ser, y es en base a ella en la que debemos trabajar.

Continuar leyendo

Trabajando con OLLYDBG

Omar [omarherrera@infomed.sld.cu]

Luego de haber visto a grandes trazos, la ubicación y las principales partes del OLLYDBG, debemos aprender el sistema de numeración utilizado y cuál es el concepto de stack aunque sea para tener una idea. Luego profundizaremos.

SISTEMAS NUMÉRICOS
: Los tres sistemas numéricos que más se utilizan son el binario, el decimal y el hexadecimal.

El concepto básico que deben tener de ellos es el siguiente:

• BINARIO: Se representan los números con dos caracteres el 0 y 1 por eso se llama BINARIO.
• DECIMAL: Se representa con todos los dígitos (del 0 al 9) por eso se llama decimal.
•HEXADECIMAL: Se representan todos los números con caracteres del 0 al F (del 0 al 9, más A, B, C, D, E y F, o sea, 16 caracteres en total).

Normalmente, a partir de aquí cuando diga un número y no diga a que sistema de numeración pertenece es porque es HEXADECIMAL, que es el que utiliza OLLYDBG, si son decimales o binarios aclararé expresamente.

Existen fórmulas matemáticas que no utilizaremos aquí para convertir números de un sistema al otro (y que no son muy simpáticas), pero llegado el momento, un cracker realmente usa la CALCULADORA DE WINDOWS, que es lo mas rápido y directo, y no va a ponerse a hacer cuentas de potencias, sumas etc. para convertir un número de un sistema a otro.

Abramos la CALCULADORA DE WINDOWS y preparémosla.
Cambiemos a calculadora científica en el menú ver
Vemos que, por defecto, se inicia en DECIMAL, y al lado tiene la opción de cambiar a HEXADECIMAL (HEX), OCTAL (OCT) y BINARIO (BIN).

El Octal, que representa la numeración con 8 caracteres no es muy usado en cracking pero la calculadora trae dicha opción incluida, si se llegara a necesitar.

Pues para pasar un número de un sistema a otro es muy sencillo, pongo la calculadora en el sistema del número que quiero cambiar, por ejemplo si quiero cambiar 55 de DECIMAL a HEXA, pongo la calculadora en DECIMAL y tecleo 55.

Ahora cambio la calculadora a HEXA y automáticamente me lo convierte a ese sistema de numeración.
Ahí está, 55 decimal equivale a 37 hexadecimal.
Resalté las letras A, B, C, D, E, F para ver que al pasar la calculadora a HEXA se nos habilita la posibilidad de teclear las mismas, que estaban deshabilitadas en modo DECIMAL.

Creo que esta es la forma más práctica de manejar los sistemas de numeración y poder pasar valores de uno a otro sin grandes complicaciones.

NÚMEROS NEGATIVOS EN HEXADECIMAL

Esto es lo más duro de entender, por esto trataremos de ir despacio. En el sistema de numeración hexadecimal, ¿cómo podemos representar los números negativos, ya que no se puede poner el signo menos delante como cuando hacemos en la tradicional numeración decimal?
¿Cómo hacer para representar en formato hexadecimal, -1 por ejemplo?

Pues aquí viene el problema y espero que se entienda.

Solo tenemos la posibilidad de escribir en hexadecimal desde 00000000 hasta FFFFFFFF, ¿cómo representaríamos los números negativos?

Pues bien, a un genio se le ocurrió que en vez de representar desde 00000000 hasta FFFFFFFF todos los números positivos, usaríamos la mitad para los positivos y la otra mitad para los negativos.

Los números positivos van entonces desde 00000000 hasta 7FFFFFFF y los negativos desde 80000000 hasta FFFFFFFF.

POSITIVOS

000000000 es igual a 0 decimal 000000001 es igual a 1 decimal
………………………………..
………………………………..
7FFFFFFF es igual a 2147483647 decimal (que sería el máximo positivo)

NEGATIVOS

FFFFFFFF sería el -1 decimal FFFFFFFE sería el -2 decimal
………………………………
………………………………
80000000 sería -2147483648 decimal (que sería el máximo negativo)

Podemos probar averiguar en la Command Bar el valor de 7FFFFFFF, para ello usamos el signo de interrogación y a continuación, el valor que deseamos pasar a decimal,

Vemos a la derecha, que nos da el valor DECIMAL correspondiente, que es 2147483647.

Ahora, cuando deseamos averiguar el valor de 80000000 (que es negativo) vemos que no nos lo muestra. Sigue dando el resultado para 7FFFFFFF (esto es un bug de la Command Bar). Así que, ¿cómo podemos hallar su valor en OLLYDBG?

Con este pequeño truquito.

Vamos a los registros y marcamos EAX
Luego hacemos CLICK DERECHO-MODIFY
Nos aparece una ventana en la que podemos colocarle a EAX el valor que queremos, así que aprovechamos y usamos dicha ventana para hacer las conversiones. En el primer renglón tecleamos el valor HEXADECIMAL que queremos convertir y en el segundo renglón nos aparecerá el resultado en DECIMAL.

En este caso vemos que 80000000 corresponde al valor -214783648 decimal

Si averigüo el valor de FFFFFFFF allí vale -1 decimal.

Por lo tanto, en la ventana de modificar un registro podemos averiguar el valor de números negativos perfectamente. Luego para salir podemos CANCELAR, así no realizamos ningún cambio.

CARACTERES ASCII

Uno de los temas que debemos conocer también es la forma en que nuestro sistema escribe datos en la pantalla, para eso asigna a cada carácter un valor hexadecimal, de forma que puede interpretar los mismos como si fueran letras, números, símbolos etc.

De la teoría de ASM de Caos Reptante le copiamos la tabla. Allí vemos a continuación el valor decimal, en la segunda columna el valor hexadecimal y en la tercera el carácter, por ejemplo: si quiero escribir un espacio en OLLY, tengo que usar el 20 o 32 decimal, cualquier carácter que necesitemos, sea letra o número, podemos verlo en esta tablita.

Dec.

Hex.

Caract.

 

Dec.

Hex.

Caract.

 

Dec.

Hex.

Caract.

32

20

esp

64

40

@

96

60

`

33

21

!

65

41

A

97

61

a

34

22

"

66

42

B

98

62

b

35

23

#

67

43

C

99

63

c

36

24

$

68

44

D

100

64

d

37

25

%

69

45

E

101

65

e

38

26

&

70

46

F

102

66

f

39

27

'

71

47

G

103

67

g

40

28

(

72

48

H

104

68

h

41

29

)

73

49

I

105

69

i

42

2A

*

74

4A

J

106

6A

j

43

2B

+

75

4B

K

107

6B

k

44

2C

,

76

4C

L

108

6C

l

45

2D

-

77

4D

M

109

6D

m

46

2E

.

78

4E

N

110

6E

n

47

2F

/

79

4F

O

111

6F

o

48

30

0

80

50

P

112

70

p

49

31

1

81

51

Q

113

71

q

50

32

2

82

52

R

114

72

r

51

33

3

83

53

S

115

73

s

52

34

4

84

54

T

116

74

t

53

35

5

85

55

U

117

75

u

54

36

6

86

56

V

118

76

v

55

37

7

87

57

W

119

77

w

56

38

8

88

58

X

120

78

x

57

39

9

89

59

Y

121

79

y

58

3A

:

90

5A

Z

122

7A

z

59

3B

;

91

5B

[

123

7B

{

60

3C

92

5C

\

124

7C

|

61

3D

=

93

5D

]

125

7D

}

62

3E

94

5E

^

126

7E

~

63

3F

?

95

5F

_

127

7F



Por lo demás, la Command Bar cuando averiguamos el valor de un número hexadecimal, nos proporciona también el carácter ASCII correspondiente si tuviera, veamos un ejemplo: tipeamos en la Command Bar

Vemos que 45 corresponde a la letra E mayúscula, si en la tabla anterior buscamos 45 en la columna del medio que corresponde a hexa vemos que es la letra E.

69 45 E

Por lo demás, en la ventana del DUMP del OLLYDBG, tenemos una columna que muestra los caracteres ASCII, si miramos allí mismo, en el crackme de CRUEHEAD, la ventana del DUMP.

Vemos que al lado de la columna que representa los valores hexadecimales, esta la columna ASCII, donde podemos ver resaltadas algunas cadenas de texto compuestas por combinaciones apropiadas de caracteres ASCII.

QUE ES EL STACK O PILA

El stack o pila es una zona de la memoria en la cual se van guardando datos que más adelante deben ser recuperados. El nombre PILA es porque asemeja un mazo o pila de cartas o barajas que se encuentran en una mesa.
En dicho mazo, si agregas una nueva carta solo puedes hacerlo encima de la pila y si quiero sacar una será la de más arriba de la pila de cartas.
Esa es la característica principal del stack, que es como un mazo de cartas: la carta que agregas a la pila ira arriba, y será la primera que salga, cuando quites una.
Ya veremos más adelante en la explicación de las instrucciones la forma de modificar o agregar y quitar cartas en nuestro mazo, o sea nuestro querido STACK que como recordamos del tutorial anterior esta representado en la parte inferior derecha del OLLYDBG.

Bueno creo que ya tienen bastante para quemarse un rato más la cabeza. Nos vemos en la III parte, donde explicaremos qué son los registros y los flags y para qué sirven.

Continuar leyendo

Microprecesadores Pentium 4

Zeidy López Collazo [vilmahm@infomed.sld.cu]

El procesador Pentium 4, conocido como Willamette durante la etapa de diseño, salió al mercado, el lunes 20 de noviembre del 2000, apoyado en una campaña propagandística de 300 millones de dólares; cuyo lema central fue:

“El procesador Pentium 4. El centro de tu mundo digital”.

En principio, será el último procesador de 32 bits de Intel y ha sido diseñado casi completamente desde cero, por tanto, no se trata de una evolución del diseño de los Pentium (clásico, MMX, Pro, II, III)
Representa el cambio más grande en la arquitectura IA-32 desde el Pentium Pro en 1995.

El aumento de las prestaciones se deben a cambios en la arquitectura que permitel al CPU trabajar a velocidades más altas de reloj y a cambios lógicos que permiten que más instrucciones sean ejecutadas por ciclo de reloj.

Pentium 4.

Microarquitectura Intel Netburst Ofrece una serie de funciones nuevas e innovadoras, entre las que se incluyen:

Hyper Pipelined Technology (Tecnología "hipercanalizada)
Rapid Execution Engine (Sistema de ejecución rápida )
Execution Trace Cache (Cache de seguimiento de ejecución de nivel 1 )
Bus de Sistema de 400MHz
Ofrece además, una serie de características mejoradas, entre las que se incluyen:

La caché de transferencia avanzada
La ejecución dinámica avanzada
La unidad de coma flotante y multimedia mejorada
Las extensiones Streaming SIMD 2.

Vista Superior y Posterior de un Pentium 4 Willamete.

Hyper Pipelined Technology (Tecnología "hipercanalizada)

La tecnología hipercanalizada duplica la profundidad de canalización (pipeline) de la microarquitectura P6 del procesador Pentium® III a 20 etapas, y aumenta la predicción de saltos.
La canalización más profunda hace posible que las instrucciones se pongan en cola y se
ejecuten con la mayor rapidez posible, aumentando así el rendimiento, la frecuencia y la escalabilidad.

Últimamente nos estamos acostumbrando a batir record en cuanto a prestaciones en microprocesadores en relativamente poco tiempo. Seguramente parte de culpa la tiene la extrema competencia en la que este mercado se encuentra.
Principalmente Intel y AMD están librando una dura batalla en varios frentes, uno es el de las prestaciones, pero hay muchos otros como el marketing que no deben dejarse de lado si se quiere triunfar.

Ahora nos encontramos con su última creación, que recobra fuerza en tanto que a puro golpe de aumento de frecuencia sus actuales prestaciones ponen en apuros hasta al mismísimo buque insignia de AMD, el Athlon a 1,4 GHz.
El procesador actual sigue siendo caro, pues dobla al de su rival, y de la memoria RDRAM se puede decir lo mismo.
Por contra, el nuevo modelo de Intel ya se puede encontrar con el también nuevo zócalo de 478 pines y su rendimiento se puede considerar igual sino superior al del micro estrella de AMD

Continuar leyendo

Ni 2D ni 3D: ¡Todo lo contrario!

Ariel-NM [blackhat4all@gmail.com]

En un artículo anterior avanzábamos una definición de “programa de diseño 3D” comparándolo con las características de sus homólogos 2D. Y hoy les anuncio (probablemente algunos lectores ya lo sepan) que en algunas plataformas existen herramientas que llevan la etiqueta “2.5D”…

¿Pero cómo…! –se preguntará más de un lector– Hasta ahora se sabe que las cosas son lineales, planas o volumétricas, lo cual les confiere una, dos o tres dimensiones, respectivamente… ¿Acaso puede haber algo que sea más que superficie y menos que volumen, o peor aún, que no sea 2D ni 3D sino… todo lo contrario? ¿Será un plano de cartón corrugado?

Pues, en efecto, no existe la dimensión “dos y medio” pero sí la técnica 2.5D. Y lo mejor del caso: no es un resultado de las computadoras pues el artificio nos llega... desde la Edad Media.

Desde hace mucho tiempo, los pintores (y no solamente los malos pintores) se han valido de numerosos artefactos para copiar modelos del original y trazar con precisión el boceto de sus futuros cuadros. Los de hoy en día simplemente salen a la calle cámara digital en mano para captar en la memoria todo cuanto les interese pero… ¿qué hacían los de la Edad Media?

Para no tener que esbozar un objeto de memoria –por carecer de las habilidades necesarias o a fin de lograr una mayor precisión y fidelidad al original– algunos pintores tenían en su estudio un sencillo artefacto: un atril que soportaba una lámina de vidrio. El objeto original se colocaba en un sitio bien iluminado mientras el pintor se colocaba tras el vidrio y trazaba el boceto con lápiz graso sobre esta superficie. Así de simple:

Visto con ojos un poco más matemáticos puede decirse que el pintor recogía la proyección del objeto sobre el plano definido por la superficie del vidrio. El objeto podría ser tan tridimensional como se le antojase pero lo que quedaba del mismo, luego de “aplastarlo” contra el vidrio, era una imagen plana.

Alguien podría preguntarse: “Hmm… Muy ingenioso pero… ¿Acaso eso no es lo mismo que dibujar directamente sobre un papel? En ese caso, ahí también tenemos al objeto proyectado o “aplastado” sobre una superficie plana. ¿Para qué entonces tanto vidrio y tanto rebuscamiento para explicar algo que hacemos desde el preescolar?”

Pues… sí y no. Con respecto a que un dibujo sobre un papel o cualquier soporte plano siempre será una proyección del mundo 3D al mundo 2D, correcto. Así mismo es. Pero la presencia del vidrio aquí no es casual y ahí estriba la diferencia: a través del vidrio, el pintor ve a su modelo todo el tiempo.

“¿Y eso qué…?” –vuelve a la carga el lector impaciente. Pues que la proyección no solamente se produce de allá para acá sino también a la inversa: Pintando sobre el vidrio se puede “alterar” el modelo y, digamos, instalarle un par de elocuentes cuernos (bueno, al menos en apariencia y durante el tiempo en que tengamos el vidrio de por medio y el modelo “congelado” en su pose.)

De regreso a nuestro siglo, no debemos olvidar que esto lo hacemos todo el tiempo en nuestras computadoras. A fin de cuentas, cuando alteramos la forma de una malla 3D moviendo sus vértices “en profundidad”, en realidad el cursor del mouse se mueve en dos dimensiones y el resultado se nos muestra en la superficie más o menos plana del monitor.

Ahora bien, aunque uno está consciente de que por mucho volumen que aparente una imagen a fin de cuentas estamos en presencia de una entidad plana, las computadoras sí “se creen” que esos objetos existen en un espacio tridimensional virtual (bueno, es su mundo ¿no?). De modo que cuando se crea un personaje, el programa lo trata cual si en verdad irrumpiera en las tres dimensiones espaciales.

Una de las especialidades (y de los dolores de cabeza) en una animación 3D consiste en otorgarle textura a los objetos llamados “orgánicos”, esto es, los objetos nada geométricos, como es el caso de personas o animales. No resulta fácil, por ejemplo, texturizar un dragón con tantas arrugas, aletas y vericuetos, máxime si se tiene en cuenta que la textura cambia según la región (dorso, vientre, patas, interior de la boca…) y que debe cambiar suavemente al pasar de una a otra.

Existen técnicas para estos fines y una de ellas consiste en fragmentar la malla en tantas regiones como sea necesario y luego aplicar a cada fragmento la textura correspondiente utilizando imágenes pre-dibujadas. El trabajito no es fácil, créanme, lleva su tiempo y se corre el riesgo de que al final se noten las “costuras”.

Por esta razón muchos pensaron que sería magnífico sacar el objeto del monitor, agarrar un pincel o un spray y pintarlo a mano... Y mejor aún si cada spray tuviese ya incorporada la textura (digamos, que en sus etiquetas pudiera leerse: “Lomo escamoso” o “Lengua húmeda”…). Programas como Maya, BodyPaint o ZBrush hicieron posible este sueño. No obstante, es en este último donde se hace más evidente el concepto de 2.5D.

Mediante una herramienta denominada Proyection Master , ZBrush permite tomar una malla 3D y “aplanarla” (proyectarla) sobre “el vidrio” (es decir, sobre “el lienzo” que es como allí denominan al área de trabajo). Una vez proyectado el objeto (en el argot del ZBrush esa operación de denomina Drop, “dejar caer sobre el lienzo”) se puede pintar la textura sobre su superficie pero solo se afectarán las partes del objeto que estén a la vista , a menos que se elija la opción de afectar ambos lados. De este modo, podremos pintar “sobre el vidrio” desde simples colores hasta las más complicadas texturas. Una vez satisfechos, activamos la operación contraria (Pick, “recogerlo del lienzo”) y el objeto recobrará su tercera dimensión pero con el “maquillaje” ya aplicado, proyectado sobre su superficie.

La imagen siguiente ilustra el proceso: A la izquierda tenemos a un personaje (modelado en el propio ZBrush, pero la malla podría importarse desde otras plataformas). Una vez proyectado contra el lienzo se comienza a pintar la textura. Nótese, al centro, como el lienzo también recibe su brochazo, tal como sucedería si lo hiciéramos sobre un vidrio. Finalmente, “recogemos” la malla del lienzo y le devolvemos su volumen. Obsérvese (a la derecha) que la textura no solo ignoró las partes ocultas durante la proyección, sino también se deformó para seguir las sinuosidades de la superficie:

Por esa razón esta herramienta es 2D y, a la vez, 3D. O mejor, algo intermedio: 2.5D.

De haber sabido esto, Da Vinci habría logrado uno de los grandes sueños de toda su vida: pintarle un par de bigotes permanentes a la Gioconda;)

Continuar leyendo

¿Qué es estándar?

Alien [blackhat4all@gmail.com]

Nunca me he atrevido a hacerle esta pregunta a nadie, pero hoy, para escribir este artículo, pienso que debería hacérsela a ustedes.

¿Qué es un estándar?

Las opiniones que recogí fueron bastante diversas:

  • Medida igual para todos.
  • No sé.
  • Lo que está estipulado.
  • Talla que sirve a todos.
  • Mediana, ni grande ni chica.

La pregunta fue formulada a personas de la calle, y aunque uno respondió no saber qué es un estándar, la mayoría concordó en que es algo con determinadas características que lo hace socialmente aceptado como lo que es, sin tener que pensar mucho en su significado. Según el diccionario de la real academia de la lengua española, estándar es un tipo, modelo o patrón.

A dónde quiero llegar.

Resulta ser que cuando vamos a diseñar un software, web o cualquier otra cosa, definitivamente debemos guiarnos por un estándar, un patrón que nos ayude a definir nuestro trabajo como algo, pero… ¿Cuán apegados debemos estar a esos estándares?

Si no me falla la memoria, hace algún tiempo se hablaba en un programa televisivo de cuán originales se debe ser a la hora de conducir un programa o hacer pública la voz mediante un espacio radial. En cualquier caso, siempre se dijo que se debe ser lo más original y natural posible. Como es lógico esto era referente a la locución y conducción de un medio, pero no sólo se puede aplicar a la radio y televisión, sino también a la confección de un software o web.

Hay algunos aspectos que resultaría prácticamente imposibles de cambiar a la hora de enfrentarnos a la creación de algo propio, pero hay otras que sí, y mientras muchos continúan llevando al público un diseño web que en nada se diferencia de la mayoría, otros, con un poco más de trabajo, se esfuerzan por crear algo distinto, algo verdaderamente revolucionario.

Desde siempre las páginas web constaban de un archivo en el que se almacenaba todo el contenido que se mostraba, tanto diseño como contenido, ¿No fue acaso ir contra ese estándar la imposición de las hojas de estilo como una vía de facilitar el trabajo?, y hoy, ¿no es casi un estándar hacer una página utilizando los CSS?.

Desde mi punto de vista, estándar no es más que una serie de normas o reglas asumidas por la mayoría por ser precisamente la mayoría quienes la utilizan. Viéndolo así, en BlackHat se utiliza un juego de colores no estándares, o como preferiría llamarlo yo, poco común, entonces ¿deja por esto de ser una página web?.

Por lo general todos los diseños son basados en un fondo claro y color de letra oscuro pero… si desde un principio, esto hubiese sido inverso, seguramente hoy le llamarían estándar al diseño de BlackHat, y al poco tiempo, alguien se pararía en una tribuna a tratar de explicar porque hacerlo así y no de otro modo.

No he escrito esto para que desde ahora cambien la forma de ver las cosas, o se pongan a inventar tratando de hacer un sistema operativo donde el botón de inicio este en la torre y el scroll sea un botoncito pequeño incrustado en el teclado, sino para que todos los que se atrevan a crear un software del tipo que sea, sin tratar de ir contra las normas de forma drástica, hagan algo verdaderamente innovador, algo que sea lo más autentico posible y que aún así, sea aceptado como lo que es.

Continuar leyendo

Anonymous Mail

h0aX [hoax_ws@yahoo.es]

Hoy les presento un título de solo 4 letras: SMTP, o si prefieres puedes llamarlo Simple Mail Transference Protocol. SMTP no es más que uno de los tantos protocolos que integran el inmenso TCP/IP y es específicamente el que nos permite enviar correos a nuestros conocidos. Para la introducción de este modesto artículo tenía pensado poner algo de la historia del SMTP, en que año surgió etc etc, pero la verdad no tengo tiempo ahora de copiar/pegar información de Wikipedia, que además, creo que está accesible para todos los lectores de esta revista. En vez de eso pienso ofrecerles información mucho más valiosa, y si al final del artículo logro enseñarles su funcionamiento y mejor uso, entonces habré logrado mi objetivo y me daré por complacido.

Empecemos con lo básico y con lo que probablemente ya conoces. SMTP o Simple Mail Transference Protocol es el protocolo que nos permite, desde cualquier parte del mundo, conectarnos a un servidor y enviar información (un correo) a otra persona que, además, puede encontrarse en cualquier otra parte del planeta. A diario nosotros somos parte de este escenario: frecuentemente revisamos nuestro correo y respondemos a nuestros amigos. Nada más normal que sentarse al PC, conectar, abrir Outlook, leer los nuevos correos y responder.

[¿Cómo funciona?]

SMTP funciona como cualquier protocolo cliente/servidor. Un programa cliente (Outlook por ejemplo) conecta con nuestro servidor SMTP (smtp.sld.cu, por mencionar alguno) que se hará cargo de satisfacer las peticiones del cliente, siempre y cuando estas sean hechas de la manera correcta.
¿Que quiere decir hacer las peticiones de la manera correcta? Pues significa que existe un estándar, una forma definida, o sea, un protocolo a seguir en la manera en que el cliente y el servidor intercambian peticiones y respuestas. Como cualquier protocolo de comunicación, debe existir un acuerdo en la forma en que se transmite la información, de nada sirve hablar con una persona extranjera si no conoce tu idioma. Entonces queda definido, según el protocolo SMTP que la comunicación cliente/servidor se hará en forma de comandos y códigos de respuesta, de esta manera se podrá lograr la sincronización necesaria para que el cliente pueda especificar al servidor las particularidades del mensaje que desea enviar.

[La práctica]

Con tanta teoría puede que alguien se pierda o aburra; la experimentación es la madre de todo conocimiento, así que, experimentemos. Asumiendo que la mayoría de los lectores de esta revista son usuarios de Infomed decidí usar su servidor SMTP para realizar las pruebas.
Para visualizar todo lo que hasta ahora he dicho abre una consola del sistema y estando conectado a Infomed teclea en ella "telnet smtp.sld.cu 25". Como podrás imaginarte con ello estarás conectando al servidor smtp.sld.cu por su puerto 25, que además es el puerto definido por defecto para el servicio SMTP. Una vez conectado podrás leer un mensaje como el siguiente:

220 smtp.sld.cu ESMTP ready

Pues felicidades, esto quiere decir que haz logrado conectar con tu servidor SMTP y este está dispuesto a atenderte. Cualquier persona que lea este mensaje es capaz de captar esa idea, principalmente por la parte que dice "ESMTP ready", pero ¿recuerdas lo que dije antes de comandos/códigos de respuesta? pues es esta la interfaz que manejan los programas clientes y no es precisamente por la frase "ESMTP ready" por la que un programa cliente sabe que el servidor está listo para atenderlo. Si eres observador verás que los tres primeros caracteres de la cadena representan un número (220), este es el código de respuesta al que me refería y es a partir del cual el servidor le hace entender al cliente que todo está bien y está listo para recibir o que en ese momento se encuentra temporalmente indisponible.
Una vez llegados aquí tenemos a nuestra disposición una serie de comandos de bajo nivel con los cuales podremos darle ordenes al servidor respecto al mensaje que queremos enviar.
Ahora teclea en la consola

HELO prueba

con lo que recibirás la siguiente respuesta:

250 cabrera.red.sld.cu Hello prueba [201.220.205.229]

Esto ha sido un pequeño saludo entre el cliente y el servidor.
Según el RFC 821 este comando es usado para identificar el sender-SMTP del receiver-SMTP. El campo argumento contiene el hostname del sender-SMTP. Como solo estamos haciendo una prueba le pasamos cualquier cosa como argumento. Este comando y su respuesta indican que tanto el cliente como el servidor están listos para comenzar y aún no hay transacción alguna en progreso. Ya habrás notado que el código de respuesta fue 250, normalmente 250 será la respuesta que siempre queremos ver, el que indica que todo está bien hasta el momento.
El siguiente comando que teclearas será

MAIL FROM:<pepe@infomed.sld.cu>

teniendo en cuenta que mi usuario de infomed es "pepe" se entiende perfectamente que con esto estoy definiendo que "pepe@infomed.sld.cu" será el buzón desde donde se envía el mensaje. La respuesta normal deberá ser un simple

250 OK

Código 250 indica que todo marcha bien. A continuación teclea:

RCPT TO:<antonio@infomed.sld.cu>

para definir el correo a donde será enviado el mensaje y la respuesta será

250 Accepted

Hasta aquí hemos hecho un gran avance, hemos creado una conexión a nuestro servidor SMTP y a nivel de comandos hemos iniciado comunicaciones y le hemos indicado que queremos enviar un correo desde pepe@infomed.sld.cu dirigido a antonio@infomed.sld.cu. Solo nos queda definir el mensaje como tal. Volviendo a la consola nos disponemos a teclear el próximo comando que será

DATA

la respuesta del servidor esta vez será

354 Enter message, ending with "." on a line by itself

El código de respuesta ha cambiado, esta vez no hemos visto nuestro querido 250, pero que no cunda el pánico, 354 no es un código de error, este número nos indica que el servidor está listo para tomar notas del mensaje que se quiere enviar. A continuación presiona enter dos veces y escribe el texto que desees, estás escribiendo el cuerpo del mensaje. Cuando termines de escribir el mensaje, para indicarle al servidor que terminaste debes presionar enter PUNTO enter. Un punto (.) sólo en una línea indica que se ha alcanzado el final del mensaje. Una vez tecleado el punto te aparecerá una respuesta como la siguiente

250 OK id=XXXXXX-XXXXXX-XX

Listo. El mensaje ha sido enviado. Ya no tienes nada más que hacer en el servidor así que mejor te desconectas con el comando

QUIT

respuesta:

221 cabrera.red.sld.cu closing connection

Pues la tarea está terminada, hemos enviado un correo usando los comandos de bajo nivel del protocolo SMTP. En este ejemplo solo hemos visto los comandos y códigos de respuesta más elementales, a continuación muestro una lista de ambos según el RFC 821.

Si quieres saber los comandos de los que dispone tu servidor SMTP y para que sirven puedes usar el alabado HELP. A continuación una lista:

HELLO (HELO)
MAIL (MAIL)
RECIPIENT (RCPT)
DATA (DATA)
SEND (SEND)
SEND OR MAIL (SOML)
SEND AND MAIL (SAML)
RESET (RSET)
VERIFY (VRFY)
EXPAND (EXPN)
HELP (HELP)
NOOP (NOOP)
QUIT (QUIT)
TURN (TURN)

Estos son los códigos de respuesta con su significado:

500 Error de sintaxis, comando no reconocido
501 Error de sintaxis en argumentos
502 Comando no implementado
503 Secuencia de comandos errónea
504 Parámetro no implementado
211 Respuesta de ayuda
214 Mensaje de ayuda
220 <dominio> Servicio listo
221 <dominio> Servicio cerrando canal de transmisión
421 <dominio> Servicio no disponible
250 Acción completada, todo OK
251 Usuario no local
450 mailbox indisponible, no se ha podido proceder
550 mailbox indisponible, no se ha podido proceder
451 Acción abortada
551 Usuario no local
452 Memoria del sistema insuficiente
552 Exceso de memoria reservada
553 Nombre del mailbox no permitido
354 Comienza el mensaje; termina con <CRLF>.<CRLF>
554 Transacción fallida

A estas alturas del artículo se supone que eres una persona con el privilegio de conocer el funcionamiento a bajo nivel del protocolo SMTP. ¿Y en qué me beneficia dicho conocimiento? Pues para empezar ya tienes las bases para escribir tu propio cliente SMTP. Además de eso... ¿Recuerdas el comando MAIL FROM:<pepe@infomed.sld.cu>? Pues claro, es el comando que define la dirección desde dónde se envía el correo. ¿Qué crees que pasaría si en vez de MAIL FROM:<pepe@infomed.sld.cu> escribiéramos MAIL FROM:<webmaster@infomed.sld.cu>? ¡Exactamente!, el mensaje llegaría a su destino como si hubiera sido enviado desde webmaster@infomed.sld.cu.

[¿Qué tanto puedo explotar este conocimiento?]

Depende de para qué lo uses. La verdad, es muy útil para enviar correos anónimos, pero ni se te ocurra usarlo con fines ilegales porque existen formas de conocer el origen verdadero del mensaje.

[Conociendo el verdadero origen del mensaje.]

Una persona que carezca de los conocimientos aquí expuestos se conforma normalmente con leer el campo "From" de su cliente de correo para identificar el origen de lo que recibe.
Casualmente la edición 28 de este boletín cuando me llego el día 1 de octubre fue desde la dirección de correo Blackhat@x.cu (me imagino que a ustedes también) cosa totalmente nueva porque siempre me llega desde el dominio gmail.com. Sabiendo que x.cu no es un dominio real es evidente que quien envió la revista lo hizo desde un cliente que le permitía poner la dirección de origen que quisiera. Normalmente los clientes de correo nos permiten una opción para visualizar los detalles de la cabecera del mensaje. Aquí están los del mensaje en cuestión.

-----------------------------------------------------------------------------
X-Apparently-To: hoax_ws@yahoo.es via 217.146.177.241; Mon, 01 Oct 2007 00:48:39 -0700
X-Originating-IP: [200.55.156.189]
Authentication-Results: mta431.mail.mud.yahoo.com from=x.cu; domainkeys=neutral (no sig)
Received: from 200.55.156.189 (EHLO mx.rimed.cu) (200.55.156.189)
by mta431.mail.mud.yahoo.com with SMTP; Sun, 30 Sep 2007 20:16:48 -0700
Received: from server-2.ipihlg.rimed.cu (unknown [192.168.157.226])
by mx.rimed.cu (Postfix) with ESMTP id 6FA693524B0;
Sun, 30 Sep 2007 21:54:38 -0400 (CDT)
Received: from 10.0.0.4 (server-4.ipihlg.rimed.cu [10.0.0.4])
(Authenticated sender: rnapoles)
by server-2.ipihlg.rimed.cu (Postfix) with SMTP id 4E1151F11CB;
Sun, 30 Sep 2007 19:17:53 -0400 (CDT)
Received: from phpmailer ([10.0.0.3])
by 10.0.0.4 with HTTP (phpmailer);
Sun, 30 Sep 2007 23:11:58 -0500
Date: Sun, 30 Sep 2007 23:11:58 -0500
To: undisclosed-recipients:;
From: Blackhat4all@x.cu
Subject: BlackHat

Message-ID: <652edaf27edbbf25ae3173eb00c3b50a@10.0.0.4>
X-Priority: 3
X-Mailer: phpmailer [version 1.65]
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="b1_652edaf27edbbf25ae3173eb00c3b50a"
------------------------------------------------------------------------------


Sin duda alguna las líneas más informativas son las siguientes:

Received: from 10.0.0.4 (server-4.ipihlg.rimed.cu [10.0.0.4])
(Authenticated sender: rnapoles)

Según la primera línea, "server-4.ipihlg.rimed.cu" ha sido el verdadero servidor desde el cual ha sido enviado el mensaje y según la segunda línea "rnapoles" es el usuario en dicho servidor que lo envió. Con lo cuál me atrevo a afirmar, sin temor a la pena de equivocarme que mi buen amigo Reinier Napoles (también colaborador de esta revista) es el actual responsable de la ardua tarea de enviar las ediciones a la creciente lista de subscriptores, tarea ya no tan ardua considerando que parece estar usando un script PHP para automatizar el envío ("by 10.0.0.4 with HTTP(phpmailer);").

Continuar leyendo