Comprueba si tu correo es propenso a clasificarse como SPAM

Hoy he estado configurando un servidor de correo electrónico para poder enviar y recibir correos desde mi propio servidor y con mi propio dominio y de esta forma saltarme a los proveedores de correo electrónico que te piden una cuota mensual para ofrecerte un correo electrónico.

Para el servidor saliente he usado Postfix y para el servidor IMAP he usado dovecot, todo esto unido a mysql para poder tener cuentas virtuales. Pero aquí no voy a hablar de la configuración del correo, que es bastante engorrosa.

Después de tener todo configurado he estado haciendo pruebas de enviar y recibir correo electrónico y todo iba bien, exceptuando que algunos correos eran clasificados como SPAM.

Y buscando por ahí he encontrado un método bastante interesante para saber la probabilidad de que un correo sea clasificado como SPAM. Solamente necesitas enviar un correo a la dirección test@allaboutspam.com y esperar un rato. Al cabo de un rato recibirás un correo como este:

This is the mail system at host (angelluis)anlu.********.es.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

<test@allaboutspam.com>: host mx.allaboutspam.com[96.126.107.60] said:
    552-Thanks for using ALLABOUTSPAM.COM Email server test. Your test results
    are 552 available at
    http://www.allaboutspam.com/email-server-test-report/?key=************************
    (in reply to end of DATA command)

Es el típico correo que nos dice que la dirección de correo no existe o que no se ha podido entregar el correo eléctronico, pero en este caso se nos facilita un enlace donde obrenemos un resumen de parametros de nuestro correo y nuestro servidor que están relacionados con la clasificación como SPAM.

spam

Si bajamos en la página que se nos facilita veremos

spam

Concretamente el correo que he enviado ha obtenido una puntuación de 5.4 y lo ideal es tener una puntuación inferior a 5, así que este correo es clasificado como SPAM. La razón básicamente es que el correo que he enviado a test@allaboutspam.com lo he enviado sin asunto y sin cuerpo de mensaje.

Tutorial 3 - Crackme en Ensamblador

Material

Bueno pues hoy vamos a estudiar un Crackme hecho en ASM, Este crackme esta hecho por Miele y tiene una protección del tipo Hardcoded, como ya anuncié en el artículo anterior este será el último de los Hardcoded fáciles, luego estudiaremos otros hardcoded que ya no comparan el serial correcto e incorrecto directamente, sino que hacen una serie de operaciones para comparar ambos serials

Nociones básicas de ASM

  • Este lenguaje es muy ordenado a la hora de depurar, pero claro, debido a su dificultad solamente se usa para pequeños programas
  • Es un lenguaje muy rápido pero es difícil programar con él

Antes de nada vamos a ver el lenguaje/compilador con el PEiD para coger costumbre:

0

 

Vemos que esta escrito en ASM y compilado con la versión 5.12 del MASM32/TASM32

Bueno, como siempre, lo primero de todo es abrir el crackme para ver como se comporta, así que lo abrimos, metemos un serial cualquiera y le damos a check y vemos:

 

1

Vaya, no hemos acertado, y nos pone “Quizás deberías intentarlo de nuevo ¡¡Es muy fácil!!”. Y ya de paso nos dan un mensaje de error para tener algo de lo que tirar hasta llegar al serial correcto.

Bueno, haremos como siempre, primero romperemos la puerta y luego haremos una copia de las llaves.

Rompiendo la Puerta

Abrimos el OLLY y cargamos este crackme (File > Open) y en donde se nos muestra el código en ASM hacemos clic con el 2º botón y vamos a Search for > all referenced text Strings (Para ver las referencias de texto) y vemos lo siguiente:

2

Yo haré doble clic sobre el mensaje de felicitación y aparezco en:

4

Vemos como aparecemos en el mensaje de felicitación, debajo esta el de error y arriba vemos una string rara que es cannabis que cuando tengamos que hallar el serial ya lo explicaré, así mismo aquí vemos 2 nuevas API’s que para romper la puerta no importan, así que lo explicare cuando intentemos copiar la llave, justo encima del mensaje de felicitación podemos ver un salto condicional muy sospechoso, nos situamos sobre ese salto para ver, en el caso de que se efectuará, donde nos lleva:

5

Nos lleva al mensaje de error, es decir, si no son iguales saltar al mensaje de error,

Vamos a recordar lo que dije en el manual (la parte de teoria)

Dije que para parchear se podrían hacer 3 cosas

  • Cambiar el JE por JNZ o viceversa
  • Cambiar el salto condicional por NOP’s
  • Cambiar el salto condicional por instrucciones que dejen el programa como estaba al principio, como por ejemplo INC y DEC

En el artículo del 1º crackme lo hice invirtiendo el salto condicional y dije que las otras 2 maneras no se podían hacer por que el mensaje de error estaba primero que el de felicitación, ¿pero que pasa ahora?, vemos claramente que ahora 1º esta el mensaje de felicitación y luego el de error, por lo que podemos usar la técnica que queramos, yo voy a elegir la del INC/DEC.

Así que manos a lo obra, me coloco sobre el salto condicional hago clic con el 2º botón y elijo Assemble, borro el texto que me sale en el cuadro de texto (que es el del salto condicional) y escribo: INC EAX doy al botón assemble y veo como desaparece el salto y aparece un INC y un NOP, esto no nos sirve, por que modificaría el programa, así que tenemos que cambiar el NOP por un DEC EAX y nos tendría quedar así:

6

Ejecutamos el programa con F9 metemos cualquier serial y…..

7

¡Y Listo!

Para guardar de forma permanente los cambios hacemos clic con el 2º boton en la zona donde se nos muestra el código en ASM elegimos copy to executable > all modifications ene. Cuadro que nos sale elegimos copy all y se nos abrirá otra ventana (dentro del OLLY) en la que solo se muestra código ASM, en esa ventana hacemos clic con el 2º botón y luego save file y le ponemos otro nombre para no sobrescribir el crackme original.

Haciendo copia de las llaves

Vamos de nuevo a las String references, ahí vemos el mensaje de error que se nos ha dado y mas arriba esta el mensaje de felicitación (si os habéis dado cuenta “Maybe, you should…..” es el texto del mensaje, y arriba vemos el titulo del mensaje “Nope!” y entonces “You entered…” será el texto del mensaje de felicitación y “Correct” será el titulo del mensaje, esto es solo curiosidad), y si nos fijamos aparecen algunos textos sospechosos, sospecharemos de “cannabis” y de “static” (en un principio) por que lo demás ya hemos visto que son títulos y texto de los mensajes de error y felicitación, “Password” es una string que aparece en el programa (por lo tanto no puede ser el serial o al menos no debería), “info” es un botón del programa y lo de “coded in…” es el texto que aparece al apretar el botón “info”. Así que simplemente viendo las referencias de textos sospechamos de cannabis y static. Pero vamos a descartar static, por que static suele ser una propiedad o una palabra reservada, si queremos verlo podemos hacer doble clic sobre “static” para ver donde nos lleva:

3

Vemos como efectivamente es una propiedad de la etiqueta “Password”, así que el principal sospechoso es “cannabis”, pero que sea sospechoso no quiere decir que sea el correcto.

Bueno yo seleccionaré de nuevo el string de felicitación y apareceré aquí

4

Aquí vemos 3 API’s distintas, 2 de las cuales son nuevas para nosotros, vamos a ver:

MessageBox: Esta ya la vimos, vimos que sirve para crear un mensaje

lstrcmpA: Esta es una de las nueva y su función es comparar 2 valores

GetWindowTextA: esta es nueva, pero cumple la misma función que la API GetDlgTextItemA, es decir, se encarga de recoger un texto

Así que deduzco lo siguiente, con GetWindowTextA recogerá mi serial falso, con lstrcmpA comparará mi serial falso con el correcto y con MessageBox mostrará el mensaje de error o de felicitación,

Visto lo visto voy a poner un BreakPoint en la API GetWindowTextA, bien al inicio de la API (0040122C) o bien directamente en el CALL (00401239) (para ello nos colocamos sobre esa línea y pulsamos F2), ejecuto el programa con F9 y meto el serial cualquiera y nos saltará la ventana del OLLY, traceo un poco (con F7 o F8 para no entrar en los call) y nada mas pasar el Call de la APi de GetWindowTextA veo que en la API lstrcmpA se pone String1=RdlP

8

Vemos que los 2 valores que compara son “cannabis” y “RdlP” así que definitivamente deducimos que el serial correcto es “cannabis”, de esta manera la sospecha se convierte en realidad.

Lo probamos y vemos que funciona. Ya tenemos una copia de las llaves.

Una pequeña reforma

Vamos a cambiar el serial correcto por RdlP. Vamos a ello, cargamos de nuevo el crackme en el OLLY vamos a las referencias de texto y esta vez pinchamos sobre cannabis y aparecemos sobre String2=cannabis, con esa línea seleccionada pinchamos con el 2º botón y elegimos Folow in Dump > inmediate constant y vemos en el DUMP que nos lleva hacia:

9

 

Y veo que en la primera línea pone “cannabis”, así que la selecciono como vimos en el tutorial anterior, pinchamos con el 2º botón sobre el DUMP y vamos a Binary > Edit y nos saldrá la ventana que vimos en el tutorial anterior y como yo ya se como se escribe mi nick en hexadecimal (por que lo vimos en el tutorial anterior) pues lo escribo en dicha sección y con la casilla keep size seleccionada (teniendo en cuenta que la longitud de cannabis = 8 y la de RdlP = 4, por lo tanto habrá que poner 4 bytes de 0, lo que se traduce en 8 ceros después de que acabe el string RdlP).

10

 

Veo que al acabar mi nick que es 52646C50 me faltan bytes por modificar así que lo relleno de 0’s y hago clic en ok. Ahora el serial correcto será RdlP.

En este tutorial hemos visto como saltarnos un sistema de protección bastante sencillo, hemos vuelto a insistir en que hasta que no estemos seguro del serial que no lo probemos por si acaso los programadores han metido código malicioso, hemos visto como cambiar el serial correcto por otro y hemos utilizado otra técnica distinta para romper la puerta (una táctica distinta a invertir el salto condicional).

RdlP
19 de agosto de 2007

Game developer conference

Hace más o menos 1 mes se celebró la GDC 2017 y me parece un buen momento para hacer spam de la GDC.

La GDC es la conferencia mas importante de desarrolladores de videojuegos e incluye tanto a la parte técnica como a la parte artística. En su página web podemos ver algunas de las conferencias en formato pdf o en videos.

Por la parte técnica que es la que a mi me atañe se pueden encontrar conferencias de ingenieros de grandes empresas de los videojuegos como por ejemplo, Valve o Blizzard.

Muchas de las charlas se suelen centrar en aspectos de gráficos 3D y en simulación de físicas. Y suelen presentar conceptos novedosos.

Para implementar mi motor de físicas cogí varias ideas de charlas de la GDC.

Algunas de las charlas son accesibles desde la siguiente dirección:

http://www.gdcvault.com/free