Archive

Archive for the ‘Artículos’ Category

Snort HTTP Rules Bypass

October 6th, 2009 spark No comments

El CCat Research Labs, encontró hoy un fallo en Snort <= 2.8.5, el cuál según ellos no se parsea correctamente los datos de las consultas HTTP y el content-length.

Todo es derivado como postdata y no logra analizar de manera correcta las consultas secundarias en una consulta viva.

Download del video explicativo.

convert this post to pdf.

Scribd no entiende mucho de Internet…

September 27th, 2009 spark No comments

Hola a todos, el otro día estaba buscando unos libros en google y un resultado de mi búsqueda me llevó a Scribd.

Para los que no lo conozcan, es un sitio muy interesante para compartir libros electrónicos, donde podremos registrarnos y subir nuestro contenido también.

Podemos leer libros online también, se los recomiendo, pueden encontrar cosas muy interesantes.

En un momento digo: “bueno quiero bajar algo de lo que encontré…”

Busco en la página, y sobre el libro que estaba leyendo, encuentro un link que decía “Download”, genial! vamos a bajarlo. :)

Me aparece una pantalla donde me pide mi login, si no lo estamos podemos registrarnos ahí inmediatamente y luego introducir los datos de registro para logearnos y bajar nuestro libro.

loginscribd

Me dió tres opciones (depende del libro) deja bajarlo en PDF, DOC o TXT.

Me atrajo más el PDF obviamente, me parece más compacto y elegante que un DOC, etc…

Hasta ahí todo perfecto… sigo leyendo, busco otro libro, me interesa y digo, genial! vamos a bajar este también… no todo en la vida es color de rosa:

limiteScribd

Una vez más… otro límite a la información… ahora deberemos subir contenido para bajar nuestro SEGUNDO PDF!, y aparentemente sólo es con los PDF’s… he probado con los DOC y TXT, no hay límites… Adobe, ¿estás limitando esto? espero que no…

De igual manera, como lo dice el título de este post, Scribd no entiende mucho de internet… “probemos algo sencillo” me dije… sinceramente creyendo que no sería tan simple, había un plan B igual (proxy Web ;) )…

Simplemente eliminé las cookies, como no tenía ninguna otra sesión de otra web abierta, no me interesó borrar todas las cookies, así que así lo hice…

Volví a probar haciendo click en download, eligiendo el formato PDF, y adivinen, voilá! he aquí nuestro SEGUNDO PDF en nuestras manos. :)

Obviamente, lo podremos hacer N veces, llegaremos a la última pantalla que les mostré, borraremos las cookies, volveremos a hacer el procedimiento de download y listo, es nuestro en PDF, tal como lo queríamos… :)

Seguramente, que  también muchos dirán “ok, pero lo bajo en DOC y lo convierto a PDF…”, es una solución perfecta, pero ¿para qué hacerlo si Scribd puede hacerlo por nosotros con solo borrar las cookies?

Por lo visto, Scribd deberá buscar algunas otras técnicas si quiere evitar que esto sea tan sencillo, o simplemene, dejar que todos bajen los PDF’s que quieran, simplemente lo harán de una u otra forma.

Hay gente que no entiende que una de las características de la naturaleza de la información es que ésta debe ser libre… por algo siempre hay un punto donde siempre se fuga, ¿no es así? ;)

Un saludo!

convert this post to pdf.
Categories: Artículos Tags:

Dattatec WTF??

September 15th, 2009 spark No comments

Sinceramente no entiendo a veces que hacen algunas empresas o que intentan hacer con internet…

Se suponía que internet es un centro enorme de información para que todos podamos compartir todo, ¿no?, pero parece que seguimos “atándonos” a la triste realidad informativa que nos atormenta, mostrando algunas cosas para algunos y otras para otros…

Dattatec está ofreciendo el servicio de registrar tu sitio en un montón de buscadores de manera gratuita, es un excelente servicio!

Se me vino el mundo abajo cuando vi que desde mi país podía darlo de alta en algunos buscadores y pasando por un proxy web podía darlo de alta en el doble de buscadores más… no entiendo cuál es el motivo de restringir acceso a ciertos buscadores dependiendo del país de donde se accede…

He aquí el ejemplo:

El servicio desde la ip de mi país (Argentina).

dattatec1

El servicio desde un proxy web con ip de Estados Unidos:

dattatec2

Bueno nada, más de lo mismo, deberemos abrir los ojos para ver la intención final de algunas compañías, es una lástima, es un buen servicio… espero que recapaciten y se abran un poco más, ofreciendo a todos, todo lo que hacen, por igual.

Nos vemos en el próximo post. :)

convert this post to pdf.
Categories: Artículos Tags:

Nueva Vulnerabilidad en Joomla 1.5.xx

August 22nd, 2009 spark No comments

Hola a todos, gracias a un reverser amigo, Profesor_X, que ha descubierto este 0day, hoy estamos publicándolo, antes que nadie.

Les dejo la información, que aparentemente es muy vital para poder obtener datos relevantes de un sitio construido con Joomla.

Los dos tipos de vulnerabilidades encontradas fueron:

  • Full Path Disclosure
  • Session Malformed Poisoning

Para poder ver como funciona el bug, podemos mirar el video aquí.

Pueden ver el Poc desde aquí (renombrar a .RAR).

convert this post to pdf.

Crackeando un componente para Delphi

August 11th, 2009 spark No comments

Hola a todos, estoy nuevamente para mostrarles lo sencillo que puede ser crackear un componente para el entorno de desarrollo Delphi.

Las otras noches, nos juntamos en la casa de un amigo a comer unos canelones, después de comer, charlar y reirnos un rato, sacamos nuestras notebooks… fue ahí cuando me dije, ¿porque no crackear estas compos que hacen muy lindas interfaces a nuestras aplicaciones delphi?

No diré el nombre de estas componentes, ya que obviamente son pagas, sino no sería necesario crackearlas , no? xD

Pero sí daré una pista, empiezan con estas dos letras VGS y las que le siguen, sin espacios son 4 letras, muy conocida palabra en el “ambiente” en el que nos solemos mover. :) a alguien le gusta la demoscene? xD

Bien, no doy mas pistas, si no lo han agarrado dedíquense a otra cosa… xD

La protección es muy, pero muy sencilla, pero molesta, como todas. :)

Una pequeña NAG Screen, cuando se instala el componente en Delphi, aparecerá, si arrancamos el entorno, aparecerá, porque Delphi carga todas sus librerías al comienzo… si compilamos un proyecto de ejemplo que viene en el paquete, saldrá el NAG de nuevo, y obviamente si corremos el EXE generado aparte, también… en algún lugar más? xD

Lo que haremos serán dos parcheos simples y no aparecerán nunca más en ningún lado, solo con parchear un fichero. Hay que ir a la fuente, delphi compila y reconvierte todo a varios formatos para que todo en “su mundo” salga bien.

Podemos rompernos la cabeza parcheando 3 o 4 archivos, o 1 solo simplemente. :)

De que se trata todo esto

Bueno, como ya expliqué es un simple NAG molesto, las demás funcionalidades parecen completas, así que les mostraré el mensajito:

nagd1

Bien, como les dije, este cartelito, todas las veces que les comenté aparece, ahora vamos a sacarnóslo de encima :)

Si miramos la carpeta de los componentes estos, veremos que tenemos la carpeta packages, dentro hay archivos con estas extensiones dpk, dcu, res, bpl y dcp.

Los DPK son Delphi Package, los DCU son Delphi Compiled Unit, los BPL son Borland Package Library y los DCP son Delphi Component Package.

Cuando abrimos un DPK, compilamos e intalamos, éste contiene las DCU compiladas, y la DPK utilizada se guardara en la carpeta de proyectos de Borland.

Con esto quiero decir, que si crackeamos lo que genera un DPK que es un BPL, no lo crackearemos del todo… ;)

Miremos primero lo más facil.

Donde atacar

Si compilamos un ejemplo y lo abrimos con el IDA, buscaremos una parte del string del NAG, por ej, “trial”.

Encontraremos la parte de código como la siguiente:

CODE:004F4704                 mov     eax, offset _str_This_applicatio.Text
CODE:004F4709                 call    unknown_libname_164 ; BDS 2005-2006 and Delphi6-7 Visual Component Library
CODE:004F4704                 mov     eax, offset _str_This_applicatio.Text
CODE:004F4709                 call    unknown_libname_164 ; BDS 2005-2006 and Delphi6-7 Visual Component Library
Podemos parchear este CALL pero no es recomendable..
CODE:0050BED0                 mov     eax, offset _str_Resources.Text

CODE:0050BED5                 call    sub_4F7E78

CODE:0050BEDA                 call    nullsub_13

Ok, entonces, podemos parchear el segundo CALL. :)

Si miramos el código en hexa, será el siguiente: E8 C1 87 FE FF deberíamos NOPearlo, y listo, lo tenemos arreglado. :)

Pero!, siempre hay un pero, no nos conviene parchear cada EXE que compilamos, o si? :) sería muy tedioso, deberíamos correr el parche por cada ejemplo o aplicación que utilice estas librerías, entonces deberíamos parchear la fuente, donde se genera la cuestión, no creen?…

Buscando la fuente

Ok, busquemos lo mismo en el BPL que si lo abrimos es un PE armado por Delphi. En cambio no podremos hacerlo con un DPC.

Encontramos esto:

CODE:004560C1                 call    @Vg_scene@RegisterVGObjects$qqrx17System@AnsiStringpxpx17System@TMetaClassxi ; Vg_scene::RegisterVGObjects(System::AnsiString,System::TMetaClass **,int)

CODE:004560C6                 call    @Vg_version@ShowVersion2$qqrv ; Vg_version::ShowVersion2(void)

Con esto lograremos que Delphi 7 no sea interrumpido por la molesta NAG, pero al compilar los ejemplos, y al ejecutarlos saldrá nuestro NAG… :)

Entonces, donde está la magia de esto? nos queda una de las extensiones que expliqué antes: DCU.

Las DCU NO son PE’s así que tendremos que ver como los “atacamos”, la mejor idea creo que es con DEDE. :)

Mirando en la carpeta fuera de packages, vemos tooodos los DCU,  así que encontraremos uno de ellos que es vg_version.dcu

Podemos abrir el DEDE y hacer lo siguiente:

dede

Como vemos, abrimos DEDE, y en el menú dumpers, podemos elegir la opcion Dumpeador de DCU. Si hacemos click en esa opción se abrirá la siguiente pantalla, donde elegimos el archivo vg_version.dcu y hacemos click en procesar.

Obtendremos lo siguiente:

dcudumper

Obtendremos el código de nuestra DCU, entonces ahí veremos lo siguiente:

procedure ShowVersion2;

const

  AboutText = 

    000: ÿÿÿÿP...This app|FF FF FF FF 50 01 00 00 54 68 69 73 20 61 70 70|

    010: lication uses a |6C 69 63 61 74 69 6F 6E 20 75 73 65 73 20 61 20|

    020: trial version of|74 72 69 61 6C 20 76 65 72 73 69 6F 6E 20 6F 66|

    030:  VGScene.....Ple|20 56 47 53 63 65 6E 65 2E 0D 0A 0D 0A 50 6C 65|

    040: ase contact the |61 73 65 20 63 6F 6E 74 61 63 74 20 74 68 65 20|

    050: provider of the |70 72 6F 76 69 64 65 72 20 6F 66 20 74 68 65 20|

    060: application for |61 70 70 6C 69 63 61 74 69 6F 6E 20 66 6F 72 20|

    070: a registered ver|61 20 72 65 67 69 73 74 65 72 65 64 20 76 65 72|

    080: sion.....%s..Cop|73 69 6F 6E 2E 0D 0A 0D 0A 25 73 0D 0A 43 6F 70|

    090: yright (C) 1998-|79 72 69 67 68 74 20 28 43 29 20 31 39 39 38 2D|

    0A0: 2009 by Eugene K|32 30 30 39 20 62 79 20 45 75 67 65 6E 65 20 4B|

    0B0: ryukov....For co|72 79 75 6B 6F 76 0D 0A 0D 0A 46 6F 72 20 63 6F|

    0C0: nditions of dist|6E 64 69 74 69 6F 6E 73 20 6F 66 20 64 69 73 74|

    0D0: ribution and use|72 69 62 75 74 69 6F 6E 20 61 6E 64 20 75 73 65|

    0E0: , see LICENSE.TX|2C 20 73 65 65 20 4C 49 43 45 4E 53 45 2E 54 58|

    0F0: T.....Visit our |54 2E 0D 0A 0D 0A 56 69 73 69 74 20 6F 75 72 20|

    100: web site for the|77 65 62 20 73 69 74 65 20 66 6F 72 20 74 68 65|

    110:  latest versions|20 6C 61 74 65 73 74 20 76 65 72 73 69 6F 6E 73|

    120:  of VGScene:....|20 6F 66 20 56 47 53 63 65 6E 65 3A 0D 0A 0D 0A|

    130: http://www.ksdev|68 74 74 70 3A 2F 2F 77 77 77 2E 6B 73 64 65 76|

    140: .com/..support@k|2E 63 6F 6D 2F 0D 0A 73 75 70 70 6F 72 74 40 6B|

    150: sdev.com.       |73 64 65 76 2E 63 6F 6D 00|;

var

Aquí vemos que está el mensaje de nuestra NAG, tenemos nuestro objetivo en la mira. :)

Como veremos, tenemos 2 procedimientos ShowVersion y ShowVersion2.

Lo que haremos será sencillo, en vez de parchear DENTRO, parchearemos solamente y PUSH EBP:

begin

   00000000 : 55                            PUSH EBP

   00000001 : 8B EC                         MOV EBP,ESP

   00000003 : 83 C4 F4                      ADD ESP,-12

   00000006 : 53                            PUSH EBX

   00000007 : 56                            PUSH ESI

   00000008 : 33 C0                         XOR EAX,EAX

   0000000A : 89 45 FC                      MOV DWORD PTR [EBP-4],EAX

   0000000D : 33 C0                         XOR EAX,EAX

   0000000F : 55                            PUSH EBP

   00000010 : 68(95 00 00 00                PUSH ShowVersion2{0x26}+149

Justamente el PUSH EBP, podemos cambiarlo por un RETN, entonces no entrará directamente a nuestra función, es decir, entrará y luego se irá y no habrá pasado nada. :)

Entonces tendremos que cambiar el 55 que es el código de operación del PUSH EBP, por un RETN que es un C3.

Parcheando

La pregunta que tendremos inmediatamente, es ¿cómo podemos interceptar ese PUSH EBP, en realidad los dos por las dudas…?

Lo mejor, es buscar el patrón de bytes, así nos aseguraremos que estamos en el lugar indicado.. ;)

El patrón que utilicé yo para buscar en ShowVersion2 es: 55 8B EC 83 C4 F4, será el mismo en ShowVersion, ya que es la “cabecera” de la función, y siempre es igual, idéntica.

Así que cambiaremos el 55 por un C3, y san se acabó la maldita NAG. ;)

Conclusión

No hay mucho más que decir, son buenos componentes, si los utilizarán con fines lucrativos, cómprenlos, pero la forma en que está protegido esto, es… deplorable. :P

Luego podremos recompilar nuestro DPK y reemplazar los nuevos por los viejos, la NAG no aparecerá nunca más ni en Delphi, ni en ningún lado.

Espero que les haya gustado.

Nos vemos en la próxima.

convert this post to pdf.

De proxy en proxy y navego porque me toca

August 5th, 2009 ddiego 1 comment
Título: De proxy en proxy y navego porque me toca
Autor: DDiego (ddiegoATdisidents.org)
Temática: Redes
Plataforma: Linux/Windows
Fecha: 14/06/2009
Licencia: Este documento es propiedad de Disidents, su distribución/modificación siempre esta limitada a la autorización explicita del autor o de la organización. En general siempre que no se modifique el contenido ni se elimine esta cabecera la distribución esta autorizada, salvo que Disidents o el autor indiquen lo contrario.
Introducción.
En el siguiente documento veremos como saltarnos un proxy que habremos configurado primero, haciendo tunneling dinámico.  También veremos como intentar evitarlo desde el punto del vista del administrador.
Configurando nuestro proxy “squid”.
Voy a explicar como configurar de forma básica, este servidor proxy lo usaremos para hacer  pruebas. El sistema donde estara hospedado el proxy en este caso sera un vector linux http://vectorlinux.com/ , os podeis bajar el proxy de http://www.squid-cache.org squid, podeís seguir el documento de instalación que viene incluido en el paquete, una vez instalado pasamos directamente  a la configuración.

culto

Autor: DDiego (ddiegoATdisidents.org)

Temática: Redes

Plataforma: Linux/Windows

Fecha: 14/06/2009

Licencia: Este documento es propiedad de Disidents, su distribución/modificación siempre esta limitada a la autorización explicita del autor o de la organización. En general siempre que no se modifique el contenido ni se elimine esta cabecera la distribución esta autorizada, salvo que Disidents o el autor indiquen lo contrario.

Introducción.

En el siguiente documento veremos como saltarnos un proxy que habremos configurado primero, haciendo tunneling dinámico.  También veremos como intentar evitarlo desde el punto del vista del administrador.

Configurando nuestro proxy “squid”.

Voy a explicar como configurar de forma básica, este servidor proxy lo usaremos para hacer  pruebas. El sistema donde estara hospedado el proxy en este caso sera un vector linux http://vectorlinux.com/ , os podeis bajar el proxy de http://www.squid-cache.org squid, podeís seguir el documento de instalación que viene incluido en el paquete, una vez instalado pasamos directamente  a la configuración.

Editamos / usr / local / squid / etc / squid.conf

y modificamos o creamos las siguientes lineas

http_port 8080

cache_mem 8 MB

cache_dir ufs /var/spool/squid 100 16 256 #tamaño que deseamos uqe tenga la cache

# “ufs” is the old well-known Squid storage format that has #always been there.

# 100 megas el numero de megas reservado para la cache

# 16 es el numero de subdirectorios de primer nivel que seran #creados bajo el dentro del directorio squid, 16 por #defecto

# 256 es el numero de subdirectorios de segundo nivel que #seran creados dentro de los subdirectorios de primer #nivel

# por defecto 256

access_log /usr/local/squid/var/logs/access.log squid # Podriamos meterlos dentro de /var/log/squid # eso a gusto de cada uno

cache_log /usr/local/squid/var/logs/cache.log

cache_store_log /usr/local/squid/var/logs/store.log

#creamos acls

acl mi_lan src 192.168.16.0/24 #Permitimos solo el acceso a nuestra red:

#Si pusieramos direcciones de equipos la mascara es 32 no 24.

#restriccion de acceso a páginas y contenido

acl webprohibidas url_regex disidents google

#Insertamos nuestras reglas

http_access allow mi_lan !webprohibidas # tambien podriamos poner un http_access deny # webprohibidas

http_access allow localhost

http_access deny all

Comprueba que esten creados los directorios cache y log, con permisos para poder escribir.

# / usr / local / squid / sbin / squid -z

2009/04/27 03:12:25| Creating Swap Directories

2009/04/27 03:12:25|  / usr / local / squid / var / cache exists

2009/04/27 03:12:25|  / usr / local / squid / var / cache / 00 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 00

2009/04/27 03:12:25|  / usr / local / squid / var / cache / 01 exists

2009/04/27 03:12:25| Making directories in  / usr / local / squid / var / cache / 01

2009/04/27 03:12:25| / usr / local / squid / var / cache / 02 exists

2009/04/27 03:12:25| Making directories in  / usr / local / squid / var / cache / 02

2009/04/27 03:12:25| / usr / local / squid / var / cache / 03 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 03

2009/04/27 03:12:25| / usr / local / squid / var / cache / 04 exists

2009/04/27 03:12:2| Making directories in / usr / local / squid / var / cache / 04

2009/04/27 03:12:25| / usr / local / squid / var / cache / 05 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 05

2009/04/27 03:12:25| / usr / local / squid / var / cache / 06 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 06

2009/04/27 03:12:25| / usr / local / squid / var / cache / 07 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 07

2009/04/27 03:12:25| / usr / local / squid / var / cache / 08 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 08

2009/04/27 03:12:25| / usr / local / squid / var / cache / 09 exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 09

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0A exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0A

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0B exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0B

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0C exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0C

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0D exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0D

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0E exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0E

2009/04/27 03:12:25| / usr / local / squid / var / cache / 0F exists

2009/04/27 03:12:25| Making directories in / usr / local / squid / var / cache / 0F

Si queremos, autenticación necesitamos el modulo ncsa_auth, pero compruebo que no esta instalado, entonces vamos a las fuentes:

cd squid-3.0.STABLE14 / helpers / basic_auth / / CSA

# make

# make install

# ls

Makefile Makefile.in crypt_md5.h ncsa_auth* ncsa_auth.c

Makefile.am crypt_md5.c crypt_md5.o ncsa_auth.8 ncsa_auth.o

squidproxy: / / tmp / squid-3.0.STABLE14 / helpers / basic_auth / NCSA

LE14 / helpers / basic_auth / NCSA

# cp ncsa_auth / usr / sbin /

# ln -s / usr / local / squid / libexec / ncsa_auth / usr / sbin / ncsa_auth

ln: creating symbolic link ` / usr / sbin / ncsa_auth’: File exists

Creando usuarios: htpasswd viene con apache

# htpasswd -c  / usr / local / squid / etc / passwords ddiego

New password:

Re-type new password:

Adding password for user ddiego

Ahora podemos ir a squid.conf y buscar auth_param_basic o ncsa

quedaria así:

auth_param basic program / usr / local / squid / libexec / ncsa_auth  / usr / local / squid / etc / passwords

agregamos la siguiente acl:

acl mispass proxy_auth REQUIRED

y tambien debemos modificar la regla:

http_access allow mi_lan mispass !web_prohibidas

si queremos evitar bajar mp3 avi mpeg

acl nodescargas url path_regex \.mp3 \.avi \.mpeg

Restringir horarios

acl diahora time SMTWHFA 9:00-15:01

un día en concreto

acl martes time T 8:00-10:00

entonces la regla quedaria tal que asi y ademas prohibiriamos los martes:

http_access allow mi_lan mispass !web_prohibidas !martes

Podemos iniciar squid proxy:

/usr / local / squid / sbin / squid

Comprobamos que esta escuchando:

# netstat -an | grep 8080

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN

Parte cliente.

Bueno, ya tenemos configurado el proxy, ahora solo hay que configurarlo en el navegador del cliente, vemos que puede navegar sin problema pero también vemos que al intentar acceder a algunas paginas nos sale un error parecido al siguiente:

dd1

Esto se debe a la acl que hemos puesto anteriormente en el squid:

acl webprohibidas url_regex disidents google

En el access_log de squid veremos lo siguiente:

1240825278.034 1 192.168.1.51 TCP_DENIED / 403 2119 GET http: / / www.disidents.org /  ddiego NONE / – text / html

Para saltarnos esto necesitaremos un servidor sshd en algun sitio, por ejemplo en nuestra casa, luego nos bajaremos el putty http://www.putty.org/ y lo configuraremos de la siguiente manera.

En hostname ponemos la ip o nombre de nuestro equipo sshd el puerto “22 por defecto” o el que tengamos y le pondremos un nombre, aun no le deis a aceptar ya que hay que configurar más cosas:

dd2

Ahora iremos a la seccion Proxy, es donde pondremos el servidor proxy que tenemos en nuestro navegador y el puerto, en concreto pondre el que he montado en el paso anterior:

dd3

Si el proxy requiere autenticacion, introducimos los datos en Username y Password

Ahora podemos habilitar compresión, este paso es opcional

dd4

Ahora tenemos que configurar el tunnel dinamico, pondremos en Source port 8080 y en Destination Dynamic, y luego presionamos el boton Add

dd5

Quedaria tal que así:

dd6

Ahora volveriamos a Session y presionariamos Save para guardarlo para otro momento, posteriormente presionamos Open y se nos abre una consola negra pidiendo usuario y contraseña, dejaremos esa ventana negra abierta.

dd7

Ahora vamos a nuestro navegador, a configurar nuestro proxy socks, ya sabeis Herramientas > Opciones de Internet > Conexiones > Configuración LAN > y capturaza, en este caso hay que dejar todo vacio salvo Socks, poniendo nuestra dirección local y puerto 8080

dd8

Ahora si nos dejara entrar en la página que deseamos.

dd9

En el log / usr / local / squid / var / logs / access.log del servidor veremos:

1240856427.215 251184 192.168.1.51 TCP_MISS / 200 379659 CONNECT micasa.ddiego.dsd:22 – DIRECT / micasa.ddiego.dsd -


Como evitar este tipo de conexiones, pues con más acls.

micasa.ddiego.dsd

acl adiossh port 22

http_access allow mi_lan !web_prohibidas !adiossh

Y esto vemos en el servidor.

1240859444.101 3 192.168.1.51 TCP_DENIED / 403 1746 CONNECT micasa.ddiego.dsd:22 – NONE / – text / html

Eso es todo amigos!!!, saludos..

DDiego (ddiegoATdisidents.org)

convert this post to pdf.

Wow tengo un huésped en mi PC! :D

July 2nd, 2009 spark No comments

Hola a todos, hoy a la mañana, enciendo mi notebook y descubro que mi NOD32 4.0 detecta intentos de conecciones de mi PC hacia servidores, con URL’s raras… :)

Esto me dió alegría ya que me dije, “bien, algo nuevo para investigar vino a mi!!”… así que me puse manos a la obra, y mientras publicaba un artículo viejo que escribí para la revista @rroba, me dediqué a mirar este bichito…

Mirando los logs de NOD

He aquí algunas líneas del log de mi AV’s…

06/06/2009 12:02:04 a.m. HTTP filter file http://174.133.147.18/p0508/2.0/w2.bin?829467 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:01:56 a.m. HTTP filter file http://174.133.73.178/p0508/2.0/w2.bin?405861 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:01:48 a.m. HTTP filter file http://174.133.34.178/p0612/2.0/w1.bin?413869 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:01:40 a.m. HTTP filter file http://174.133.72.250/p0508/2.0/w1.bin?762274 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:01:29 a.m. HTTP filter file http://174.133.147.18/p0508/2.0/w1.bin?875733 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:01:21 a.m. HTTP filter file http://174.133.73.178/p0508/2.0/w1.bin?233033 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:01:19 a.m. Real-time file system protection file C:\WINDOWS\system32\wtukd32.exe probably a variant of Win32/Adware.Coolezweb.AI application cleaned by deleting – quarantined NT AUTHORITY\SYSTEM Event occurred on a file modified by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:01:12 a.m. HTTP filter file http://174.133.34.178/p0612/2.0/w.bin?613307 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:01:04 a.m. HTTP filter file http://174.133.72.250/p0508/2.0/w.bin?333771 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:00:56 a.m. HTTP filter file http://174.133.147.18/p0508/2.0/w.bin?280812 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

06/06/2009 12:00:48 a.m. HTTP filter file http://174.133.73.178/p0508/2.0/w.bin?170629 probably a variant of Win32/Adware.Coolezweb.AI application connection terminated – quarantined NT AUTHORITY\SYSTEM Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.

05/06/2009 10:15:47 p.m. HTTP filter file http://bddanhdnfl.net/ccsuper3.php Win32/Small.NEK trojan connection terminated – quarantined NOTEBOOK\Sparkrisp Threat was detected upon access to web by the application: C:\fuwtkxex.exe.

05/06/2009 10:15:46 p.m. Real-time file system protection file C:\clftq.exe Win32/TrojanDownloader.Bredolab.AA trojan cleaned by deleting – quarantined NOTEBOOK\Sparkrisp Event occurred on a new file created by the application: C:\fuwtkxex.exe.

05/06/2009 10:15:45 p.m. Real-time file system protection file C:\Documents and Settings\Sparkrisp\Configuración local\Archivos temporales de Internet\Content.IE5\K13ASQ4J\ccsuper2[1].htm Win32/TrojanDownloader.Bredolab.AA trojan cleaned by deleting – quarantined NOTEBOOK\Sparkrisp Event occurred on a new file created by the application: C:\fuwtkxex.exe.

05/06/2009 10:15:45 p.m. HTTP filter file http://bddanhdnfl.net/ccsuper2.php Win32/TrojanDownloader.Bredolab.AA trojan connection terminated – quarantined NOTEBOOK\Sparkrisp Threat was detected upon access to web by the application: C:\fuwtkxex.exe.

05/06/2009 10:15:42 p.m. HTTP filter file http://bddanhdnfl.net/ccsuper1.php Win32/Small.NEK trojan connection terminated – quarantined NOTEBOOK\Sparkrisp Threat was detected upon access to web by the application: C:\fuwtkxex.exe.

05/06/2009 10:15:41 p.m. HTTP filter file http://bddanhdnfl.net/ccsuper0.php a variant of Win32/Rustock.NIK trojan connection terminated – quarantined NOTEBOOK\Sparkrisp Threat was detected upon access to web by the application: C:\fuwtkxex.exe.

05/06/2009 10:15:18 p.m. HTTP filter file http://bddanhdnfl.net/progs/xadmaa/molivjw.php Win32/Small.NEK trojan connection terminated – quarantined NOTEBOOK\Sparkrisp Threat was detected upon access to web by the application: C:\Documents and Settings\Sparkrisp\Configuración local\Temp\136.exe.

05/06/2009 10:15:17 p.m. HTTP filter file http://bddanhdnfl.net/progs/xadmaa/djdjjnxlcp.php Win32/Small.NEK trojan connection terminated – quarantined NOTEBOOK\Sparkrisp Threat was detected upon access to web by the application: C:\Documents and Settings\Sparkrisp\Configuración local\Temp\136.exe.

Bien, nuestra pequeña bestia intentó muchas cosas al mismo tiempo prácticamente. :)

Aparentemente, nuestro autor, o “autor” porque no creo que lo sea de todos estos virusillos, tiene un host y seguramente hace downloaders, para los mismos, estos consultan las url’s que estamos viendo en el log, baja los troyanos, y finalmente infecta nuestra PC, para robarnos información, tomar el control, etc.

Viendo que hay detrás

Si probamos alguna de las URL’s, y la ejecutamos en un navegador (sin miedo jejeje), veremos algo por el estilo:

cap1

Exactamente, el binario de uno de los troyanos, el cual NOD lo detecta como: Win32/Small.NEK.

Con una simple mirada en el código binario, podemos ver que está hecho en VB (MSVBVM60.DLL), y otra cosa más, en que carpeta el desarrollador lo tiene al proyecto entero!

D:\Documents and Settings\Administrator\Lhb—\installscash active!!nno form wow downloader\mycc\Project1.vbp

Aparentemende NOD lo detecta como un troyano, pero es un downloader…

Luego, veremos nombres de logs, archivos de log, serán archivos generados por el downloader?

xdfbxewhrrjdzdfbcvne5gwgaabaz36.log

xdfbxewhrrjdzdfbcvne5gwgaabaz37.log

xdfbxewhrrjdzdfbcvne5gwgaabaz38.log

xdfbxewhrrjdzdfbcvne5gwgaabaz39.log

Y la lista sigue…

Así veremos también en esa misma página, la utilización de la API: urlmonURLDownloadToFile, sabemos que es utilizada para bajar archivos de una URL, muy común en los downloaders. :)

Si guardamos el fichero obtenido de esa URL (sugiero hacerlo con wget), y utilizan el WKT VB Debugger, podremos ir viendo lo que va a haciendo…

Algunas de las cosas que veremos es que tiene strings encriptadas, para evitar el desensamblado y la identificación sencilla del virus en cuestión.

Así que debuggearemos un poco para ver que hace…

M8C9S8H5zcX9C9z3Q9UaKbRbA4y0k9EbybPcR9LcUaYby23azcJdOcFaR9z1

M8C9UaH5C9X9Faz3ObUaIdP9w0C4naJaIcEaLaRcOby27bH8Q8EbRcz8NbHdI3b8KaOcFaPbKazcUaB52bJcJdIcD8zaVbLcJcM8z3jaLdz8PbLcN9E9w0H3cb2bibG3w2

He aquí algunas de las strings encriptadas… es simple pensar que utiliza XOR, para encriptarlas, ya que no se necesita mucho más para estas tareas víricas… ;)
También veremos cosas como:
AddService = zgtkg3jrsyzdb6wtgw3rh3wahhrjkae80,,My_AddService_Name
Quiere decir que este bichito debe instalar un servicio en nuestro sistema… pero que pícaro… ;)
Podemos ver el código interpretado del virus sin necesidad de correrlo en el debugger de WKT…
Para eso podemos utilizar el VB Decompiler Lite (o el Pro si lo consiguen por ahí… jeje), y obtendremos lo siguiente:
Private Sub MZ_4051D4
loc_404908: OnErrorGoto 0
loc_40490D: LitStr “M8C9S8H5zcX9C9z3Q9UaKbRbA4y0k9EbybPcR9LcUaYby23azcJdOcFaR9z1″
loc_404910: ImpAdCallI2 proc_403FBC
loc_404915: FStStr var_A0
loc_404918: LitI4 0
loc_40491D: FLdZeroAd var_A0
loc_404920: CVarStr var_94
loc_404923: ImpAdCallFPR4 Shell
loc_404928: FStFPR8 var_9C
loc_40492B: FFree1Str var_A0
loc_40492E: FFree1Var var_94 = “”
loc_404933: LitStr “Q9Fcz3ybKbLbCaIbCbB5z3y2RcObybObRdybx1R8OcAbVdOc0bA468cbib5a2abd698a”
loc_404936: ImpAdCallI2 proc_403FBC
Podemos ver los strings encriptados, y en la línea siguiente las llamadas a un proceso en la dirección 403FBC. Esta función se encarga de desencriptar los strings.
Si abrimos este programa con el debugger de WKT, veremos que la función en 403FBC hacela desencripción, y finalmente después de cada proceso de desencripción, y más adelante, la ventana de mensajes nos irá diciendo algo como esto:
FStStr -> ’sc config   wscsvc start= DISABLED’
FStStrNoPop -> ‘C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae35.log’
FStStrNoPop -> ‘C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae43.exe’
FStStrNoPop -> ‘zgtkg3jrsyzdb6wtgw3rh3wahhrjkae81.exe’
Veremos que ejecuta nada más ni nada menos que un comando de DOS, que intenta deshabilitar el servicio de firewall de Windows y Centro de Seguridad, luego grabará un archivo de log , el EXE y seguirá con otro…
CVarStr -> ‘net.exe stop “Security Center”‘
FStStr -> ’sc config   wscsvc start= DISABLED’
FStStrNoPop -> ‘C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae35.log’
FStStrNoPop -> ‘C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae43.exe’
FStStrNoPop -> ‘zgtkg3jrsyzdb6wtgw3rh3wahhrjkae81.exe’
Veremos otras strings como:
Concat->’C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp’ + ‘\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae79.inf’
FStStr -> ‘C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae79.inf’
Cuando decompilemos el programita este, veremos que la función de la dirección 4043E4 se encarga de instalar el servicio del que les hablaba antes… el servicio llevará el nombre de:  zgtkg3jrsyzdb6wtgw3rh3wahhrjkae81.
servicio2
Si ejecutan el programa, lo podrán ver en la lista de servicios, así que podrán deshabilitarlo…
Viejo Truco

Dije antes, que utiliza la famosa API para bajar un archivo de una URL en particular… hay trucos para evitar que los antivirus detecten que se está utilizando, generalmente la heurística detecta todo y está sonado.. :)
Este virus, no es la excepción, y el truco que usa, está en la función 40417C.
Concatena cada letra del nombre de las API’s que pueden llamar la atención a nuestros Antivirus (AV’s)…
loc_40401D: LitStr “U”
loc_404020: LitStr “R”
loc_404023: ConcatStr
loc_404024: FStStrNoPop var_A0
loc_404027: LitStr “L”
loc_40402A: ConcatStr
loc_40402B: FStStrNoPop var_A4
loc_40402E: LitStr “D”
loc_404031: ConcatStr
loc_404032: FStStrNoPop var_A8
loc_404035: LitStr “o”
loc_404038: ConcatStr
loc_404039: FStStrNoPop var_AC
loc_40403C: LitStr “w”
loc_40403F: ConcatStr
loc_404040: FStStrNoPop var_B0
loc_404043: LitStr “n”
loc_404046: ConcatStr
loc_404047: FStStrNoPop var_B4
Luego si miramos más el proyecto veremos que tiene una función para ejecutar las API’s de alguna manera especial.. no entraremos tanto en detalle, vamos a seguir mirando que mas nos ofrece…
Siguiendo el rastro
Si dejamos a este bichito ejecutarse un par de días, seguirá bajando copias y variantes de sí mismo. Parece que los programadores de estos downloaders, son muy activos, en dos días he bajado como 3 o 4 versiones del mismo downloader, con algunas diferencias…
inicio2
Tenemos otro que modifica el registro de windows, instalándose en el inicio, para hacer las conecciones remotas, cada vez que arranca el sistema operativo.
inicio
Por ejemplo existe otra variante, la que se instala al inicio, que no instala el servicio… ;)
En la segunda imagen de inicio, marco otros sospechosos que encontré, no sé si son de este virus o de otro que tengo xDDD, si es de otro, quizás tengamos más diversión xD…
Al ver que instala servicios, se me ocurre correr la utilidad GMER, muy utilizada. Y me avisa de una instalación de un servicio oculto…
servicio3
Podemos desinstalarlo y borrarlo con GMER, sin problemas, al próximo reinicio no estará más. Si queremos analizarlo un poco más con IDA no veremos mucho, así que o Softice o Syser Debugger, que es bastante bueno también. :)
Bien, como dije cada uno de los “hijos” tiene sus características, la idea principal calculo que será infectarnos y hacernos zombies de alguna manera, o robarnos información, a su vez con una rápida actualización de los downloaders, los cuales no fueron detectados por NOD 4.0, sino que éste detectó las conecciones hacia el host.
hijos
Los dos ficheros de inicio, que tenía yo en mi PC, aparentemente están empaquetados, veremos con una pequeña sesión de Olly que sale…en la segunda parte.. xD
Veremos varias cosas más, otros archivos ocultos especialmente en las carpetas system32 de nuestro windows…. pero eso será como dije en la próxima…
Espero que les esté gustando.
Un saludo.
convert this post to pdf.

Análisis de Bifrost v1.2 Exhaustivo Parte #1

June 19th, 2009 AbsshA 1 comment
Ya llevaba la idea desde hace tiempo y de momento sale la parte #1… el archivo adjunto contiene:

Bifrost_core.dll” -> .DLL con cabecera reparada y descomprimida (de UPX), y tabla IAT arreglada que contiene el núcleo del troyano.

PE_Header.Bifrost_core.txt” -> Copia de la Información del PE Header de la librería que se crea en memoria.

Server.exe_INFECTED” -> Servidor que se ha analizado (Infectado, aunque no conecta a ningún lado).

En ésta parte se ve solamente hasta lo que es extraer la .dll de la memoria, en la segunda parte haré el análisis Estático con IDA (que tengo casi terminado) y escribiré el funcionamiento sobre como se Instala en el SO, Protocolos de comunicación, Desinstalación y Contra-Ataques que se puedan hacer…

Si hay alguien que le interese saber como reparé la .dll una vez volcada que me escriba al privado y haré una Parte III o un Anexo.

Download:

Password: “crackslatinos”
AbsshA@disidents.com
http://abssha.blogspot.com
convert this post to pdf.

Annoyer by Spider (Old Session – 2002)

May 2nd, 2009 spark No comments

Muy bien, he encontrado por ahí un buen crackme, un poco raro, con una proteccion linda de explicar, mas adelante les explicaré algunas técnicas y trucos de cómo podemos encontrar “pistas” para poder vencer estos hermosos juguetes llamados crackmes.

Empezaremos por el principio, como siempre debemos empezar, mirando la víctima, ejecutemoslo… listo? ¿Que tenemos?, una hermosa ventanita con un menú file, con la opción exit, y otro menú help con la opción register y about.

Experimentando con la bestia

Bueno, que sucede si hacemos click en la opción register del menú help?, nos aparece una ventanita que nos dice “Kill the nagscreen”, estas ventanitas, con esos iconos característicos son generalmente llamadas con una API llamada MessageBox o MessageBoxA, dependiendo si la aplicación es de 16 o 32 bits respectivamente.

Aquí ya tenemos una pista, estas eran las “pistas” que yo les mencioné anteriormente, que sirven para guíarnos a través del código.

Otra cosa interesante, es que aparece una ventanita aleatoriamente diciendo algunas cosas sin sentido e incitándonos a crackearlo. Destruyámosla. ;)

Si hacemos click en la opción About, nos da datos sobre el autor del crackme, y demás cosas, que no tienen mucha importancia.

Reglas de juego

Ahora veamos que nos pide el autor del crackme, y seamos chicos aplicados cumpliendo con todo lo que él dice, al pie de la letra, ¿están listos? ¡¡Adelante!!

Bueno, dice que saquemos el messagebox que aparece cuando hacemos click en register, lo haremos, y luego debemos matar la ventanita chiquita que nos incita a crackearlo.

Sobre las “pistas”, API’s, y reconociendo patrones de código

Tenemos siempre, que tratar, debido al gran caos del código desensamblado de un programa, tener referencias y entender lo útil y principal, lo que verdaderamente está sucediendo en partes o en la totalidad del programa, para poder “descifrar” el funcionamiento del programa, encontrar la protección y poder anularla.

Otras veces, deberemos entender, varias cosas antes de desensamblar un programa, cuando veamos ejercicios del tipo reverseme’s, ya verán de lo que les hablo.

Las pistas que debemos encontrar, son las API’s, debemos conocer las más comunes , sus parámetros, sus valores de retorno, su función principal, aquí les detallo algunas:

MessageBox SystemTime Hmemcpy
OpenFile GetLocalTime
DialogBoxParamA createwindow
GetDlgItemText createwindowexa
WriteFile showwindow

Bueno, la mayoría de estos nombres de API’s se explican por sí solos, así que no hay que preocuparse mucho, lo que sí, les mostraré ahora algunos que he estado descubriendo, por ejemplo en este crackme, encontré uno que me sirvió y me dio la pista para poder matar la nagscreen que nos incita a crackear el crackme.

La API que me guió hasta esa ventana es, CreateThread , en breve les mostraré porqué y como razoné para deducir que esa API era la responsable.

 

Los patrones de código son reconocibles, con la práctica, el ojo humano al principio debe acostumbrarse a leer ensamblador, como dije antes, todo código sea ensamblador, c++, basic, pascal, es caótico, tiende a ser caótico.

createthread

Cuando programamos un sistema por ejemplo, un programa muy grande, debemos documentar debidamente cada función, cada proceso creado, que valores retorna, porque, y como funciona, para futuros arreglos o implementaciones, debemos organizar, e identar todas las instrucciones correctamente, sino sería ilegible, o muy difícil de entender, y aunque ustedes no lo crean, se hacen concursos de “ofuscados” son programas que hacen algo, como un cálculo o alguna cosa simple, pero que el ganador es aquel que lo hace “menos entendible”, sin querer decir que programe “suciamente”, simplemente hacerlo lo mas ilegible posible. Pero no nos meteremos en esos campos extraños de la informática.

Un programa desensamblado, es lo mas terrorífico que un programador se puede encontrar, el algo verdaderamente ilegible, si no se tiene el conocimiento real de la situación a bajo nivel, y cierta práctica como para reconocer los patrones de código de los cuales les hablo.

messageboxa

 

Cuando usamos Vc++, VB, Delphi, o algún otro RAD, el código generado por estos compiladores, se repite muchísimas veces en distintos programas programados bajo el mismo lenguaje, permitiéndonos, con la práctica ( o un buen tutorial a mano sobre el tema ) poder reconocer por ejemplo, cuando el programa chequea si las opciones de los menúes fueron clickeadas, etc.

¡¡Al Ataque!!

Muy bien, aclaradas algunas cosas antes, vayamos a nuestro pequeño ejercicio, haber si podemos calentar un poco nuestras neuronas…

Veamos de que se trata, a mí me gusta saber en que lenguaje está programada mi víctima, para saber con quien estoy “hablando”, es como una presentación…… bueno dejenme, son mañas. ;)

Corramos el programa Language 2000, arrastremos la víctima hacia language 2000, y que nos dice…. Que está programado en Visual C++, ohps! muy bien, y ¿ahora que?, bien respiremos profundamente, porque cuando los programas están programados en Vc++, en C++ o en C, significa, que su código desensamblado, será más entendible (eso no significa más fácil). ¿Por qué digo esto?, porque cuando trabajamos con programas programados en VB, por ejemplo , este lenguaje es interpretado, y necesita runtimes, utiliza funciones propias del lenguaje, las cuales debemos analizar para que sirve cada una, porque raramente llama a una API, salvo que sea una llamada directa hecha por el programador.

Programas hechos en VB o en Delphi por ejemplo, tienen patrones de código bien reconocibles, y llamadas a rutinas, que realizan el trabajo “sucio”, entonces, el código desensamblado es mayor, mucho más caótico y difícil de descifrar si no tenemos la suficiente paciencia, pero no es imposible, no se me desanimen. ;)

Ahora, tomemos un desensamblador, como por ejemplo el IDA, muy bueno a mi parecer, hace el código muy entendible, y tiene las librerías llamadas FLIRT, que si sabes en que está programada la víctima, puedes cargar una FLIRT para reconocer rutinas propias de los programas generados con X lenguaje, entonces de esa manera se entiende mucho más fácil, y puedes ir al punto directamente sin dar muchas vueltas.

1312

Bueno, empecemos por lo más sencillo, buscar strings references, esto es lo más sencillo, porque nos lleva al punto directo, de cuando el mesagebox o X componente fue creado con X texto que busquemos, que no estará muy lejos de la llamada API correspondiente, les muestro que sucede en nuestro crackme:

Buscamos el texto “Kill the nagscreen.”, y lo encontramos, ahora hagamos doble click en él y nos lleva hasta aquí :

push offset aCanTRegister ; “Can’t register”
push offset aKillTheNagscreen_ ; “Kill the nagscreen.”
call ds:MessageBoxA

por problemas de espacio he dejado las instrucciones más importantes, a continuación explico cada una:
el primer, push es un parámetro al igual que el segundo push, debemos saber por eso que parámetros necesita la API MessageBoxA, para poder saber que esos son los parámetros usados para mostrar nuestra ventanita, que debemos anular.

Miremos un poco mas arriba en esa rutina y encontramos esto:

_text:00401355 loc_0_401355: ; CODE XREF: _text:0040132D j

hagamos click en la parte resaltada con amarillo y nos llevará al lugar desde donde es llamada esta rutina para mostrar la ventanita.

Aquí nos lleva:
jz short loc_0_401355

Ok, este es el salto que produce la ventana, matémoslo bruscamente, para eso usemos la instrucción NOP (No OPeration), para anular ese salto, el código de operación de esta instrucción es 90, ¿Qué es código de operación? Simplemente, el valor que toma la instrucción cuando es compilada por la computadora, entonces para entendernos con ella crudamente, debemos hablar su mismo idioma, esto quiere decir, tomar un editor hexadecimal, como hex workshop por ejemplo e ir al offset, de esta instrucción el cual nos dice IDA debajo de todo en el cuarto campo, este es 132D.

132d

Como estos saltos ocupan dos posiciones compilados debemos poner dos NOP’s, o sea dos 90, en esa posición y en la que sigue.

Ejecutemos la víctima, hagamos click en la opcion Register…… ¡Bingo!

Ahora, vamos por la otra ventanita, esta ventana es creada debes en cuando, no tome el tiempo, pero estimo que si no es por tiempo fijo, es aleatoria, eso mucho no interesa, ya que lo que queremos es anularla, entonces, lo que me guió a mí como ya les comenté es la API CreateThread la cual sirve para crear un nuevo hilo de proceso, mientras la aplicación principal se ejecuta en otro proceso distinto, entonces, los mensajes de una ventana no traba a la otra, permitiendo el efecto “multitarea”, la teoría de programación multihilo es muy interesante pero no profundizaremos en esto más que por la definición que acabo de dar.

Busquemos el string “Kill the nagsreen.” De nuevo, miremos un poco más debajo de esa rutina y aparece nuestra querida API CreateThread, de esta manera: call ds:CreateThread

Ok, hagamos doble click la referencia de que hace al principio de la rutina, como la rutina analizada anteriormente, esto nos dice desde donde es llamada la rutina, viendo directamente el salto que debemos NOPear en nuestro caso.

Nos lleva aquí: jz short loc_0_401374

El cual debemos topear igual que el otro salto, para que ya no tenga más efecto esa rutina, y la asquerosa ventanita aleatoria no aparezca más.

Como verán, existen muchísimas formas de proteger un programa, y yo en particular pienso que deben existir cientos de otras formas, mezclas de protecciones, como por ejemplo la que acabamos de ver, en la que se implementa muy bien la API CreateThread, para crear una ventana nueva, y además una nag screen en la opción register.

Más adelante veremos, protecciones CD-Check, y quizás vayamos mas arriba aun, código automodificable, encriptación, key-files, etc.

Cada una, tiene su pro y su contra, en algún momento quizás también nos topemos, con programas que verdaderamente son DEMOS, y les falta implementar la opción “Save as…”, por ejemplo, en estos casos, usaremos las técnicas de reversing, en la que deberemos saber Win32Asm (ensamblador de 32bits para Windows), hacer injertos de código, conocer la estructura de los archivos PE, y demás cosas muy interesantes.

También, en esta carrera nos toparemos con los “loaders”, programas que parchean en memoria, y desprotegen “runtime” a los programas, veremos como funcionan, como hacer uno propio, en un lenguaje fácil (VB, Delphi), cuando y como usarlos.

Quizás lleguemos a ver mas adelante, protecciones llamadas dongles, las famosas “mochilas”, esta es una protección por hardware, que necesita de un determinado hardware conectado a uno de los puertos de la pc, para que el programa funcione.

El cracker, debe tener una mente abierta, analizar un programa protegido, es toda una aventura, es conocer, aprender, desafiarnos, y crecer, en conocimiento, y sobre todo en paciencia.

Ok, hasta aquí hemos llegado, para la próxima veremos opciones desactivadas y/o cd-checks.

¡Suerte!
¡Happy Cracking!

SparK

convert this post to pdf.

CutedEvil Crackme #1 (Old Session – 2002)

April 5th, 2009 spark No comments

 

CuTedEvil CrackMe #1

Análisis y Parcheo.

 

Buenas, a todos los lectores de @rroba, soy SparK, del team DisidentS, y les ofrezco mis nobles y humildes conocimientos en este arte de la Ingeniería Inversa.

Espero que se diviertan tanto como yo lo he hecho con este crackme, en realidad no es nada difícil, pero a veces es lindo acorralar fácilmente a una víctima o no? :)

Quizás algunos de ustedes sean avezados Reverser’s y piensen al leerme, ¿pero que es esto? ¿El abecedario una y otra vez?, quizás otros novatos newbies, o simplemente lectores interesados en este arte digan: “mmmm, interesante”, quiero que sepan todos ustedes, intentaré darles siempre pensamientos frescos e ideas nuevas, por eso es bello este arte, es muy diverso.

Pero, vamos por partes, dijo Jack el Destripador, ¿Qué es un Crackme?

Ok, para los que no lo saben, un crackme es un programita que sirve para ejecitarse en el arte de la ingeniería inversa, en pocas palabras, es un “ejercicio de aplicación”.

¿ Que lograremos crackeando un crackme?

Pues, muchísimas cosas, primero, hay crackmes con las mas diversas protecciones y ocurrencias, en síntesis sirve para poder aprender, concentrarse en ese código difícil de aprender e interpretar a simple vista llamado Ensamblador, para poder memorizar técnicas, rutinas, y luego, en otro momento cuando miremos otro código digamos, “ah!, es mas o menos parecido a…” , en fin, ejercitas, la lógica, la memoria, y a la vez si no sabes o no entiendes ni medio de lo que pasa en ese maldito crackme, aprendes, que es lo más importante que te puede suceder aquí.

Les daré mas pistas, existen muchos tipos de ejercicios de aplicación, algunos de ellos son los Reverse me’s, los Tool me’s y demás, los primeros debes conocer ensamblador a fondo, y reprogramar la aplicación, o inclusive agregar código faltante, ¿ interesante no ? , ya veremos algunos, no desesperéis…. :)

Este Crackme, lo he bajado de www.crackmes.de , y hasta hoy no tenía solución.

El crackme, tiene un aspecto como una caja de registro típica de cualquier programa, deberemos ingresar Nombre de Usuario, Serial, y luego click en Check.

Si hacemos click en Read the Rulez!, nos dirá que debemos programar un keygen, ok, ¿que es eso? Un programa que genere seriales aceptables para el crackme, ingresandole cualquier nombre de usuario, para poder hacer esto debemos conocer y entender que sucede dentro del crackme y como se calcula el serial a partir de un nombre de usuario dado.

Ok, empecemos parcheándolo, ¿porque? , pues porque no tenemos que analizar mucho para parchearlo, aunque no este permitido en las reglas del juego, lo haré para explicarles a los más novatillos como se debe hacer.

Les comento algo a todos, parchear es nocivo para la mente del cracker, se dice que es un sucio crack, aquel que pudiendo aplicar técnicas mas “finas”, parchea, ¿ porque ?, porque aquí queremos aprender, y el facilismo nos lleva a la mediocridad, entonces, si parcheamos, es fácil crackearlo, como verán solo cambiando uno o dos bytes, pero si hacemos un serial fishing, y aún muchísimo mejor , programamos una keygen, estamos demostrandonos sobre todo, que sabemos bien lo que sucede en nuestra querida pc, y que podemos entender tarde o temprano, lo que sea. Aunque si no está a nuestros alcances hacer un keygen aún, paciencia, parchear es divertido :)

Carguemos el Olly, (¿que porque olly?, porque me anda muy bien en mi win xp), y ejecutemoslo, presionando F9, ¿que sucede?, aparece nuestro programilla, ponemos un nombre de usuario, SparK, ahora un serial, 0123456, y click en Check, que sucede?……… NADA!

Ok, se dice en el Zen Cracking, que todo cracker necesita una referencia para penetrar en el código de un programa, los seres humanos, tenemos referencias, los objetos los identificamos con los sentidos, son distintos, son reconocibles, en el cracking sucede lo mismo, el cracker necesita un punto de referencia, al principio los novatos necesitan puntos de referencia mas “humanos”, pero luego, te acostumbras al lenguaje interno de las máquinas y empiezas a encontrar referencias que antes no veías, esto , se llama práctica.

Nuestro punto de referencia, aquí sería un cartel, llamado messagebox que diga “Incorrect Serial” o algo por el estilo, entonces, nosotros desensamblaríamos el programa, y buscaríamos donde se llama a ese messagebox y un poco antes encontraríamos el salto que nos lleva al cartel exitoso o al fracaso, simplemente invertirlo y PUM!, “You are registered”.

Pero no, no soñemos mas, enfrentemos la realidad, no hay messagebox, no nos dice nada, pero tampoco nos registra y eso nos pone mal, muy mal. :)

Ok, busquemos en el Olly, por alguna referencia de strings, miremos un poquito más abajo y encontramos algo como esto:

figura11

Perfecto!, algunas referencias hemos encontrado, miren esta, “Congratulations, you cracked this program :) ”, miremos mas arriba de esta referencia, y encontramos este salto:

004012E8 |. 74 0F |JE SHORT CuTedEvi.004012F9

Bien, si invertimos ese salto, tendríamos que estar registrados, probemos cambiar el 74 por un 75 (JNE), hagamos click sobre la instrucción de salto, presionemos la tecla espaciadora, y ahora, cambiemos el JE por un JNE, y listo, apretemos F9, ¿¿que pasa?? nada, sigue haciendo lo mismo, ¿pero que pasa aqui?

Seguramente existe lo que se llama, mirror check, es un chequeo primario o secundario, que se hace en otra parte del código, que seguramente chequea longitud del nombre de usuario, del serial ingresado, o algun cálculo con ellos posterior, miremos un poco más, ¿ven porque no es bueno parchear a lo bruto?, si no conoces el código y lo haces mecánicamente, puedes quedar mal parado ante una demostración ;oD

¿Pero, como encontrar el otro chequeo?, miremos, observermos, debugiemos el código, una y otra vez, pongamos breakpoints, haber, ¿ que sucede generalmente en estas rutinas a nivel interno para obtener los textos introducidos por el usuario?, una pista, referencia, aparentemente oculta, pero existe, generalmente se llama a la API GetDlgItemText, o GetDlgItemTextA, para obtener el texto, pues ¿que hace?, obtiene el texto del editbox del nombre de usuario por ejemplo, y pone en el registro EAX la longitud del texto introducido.

Busquemos la/las llamadas a esta hermosa API…..

Aquí hay algo interesante:

figura21

Ok, tenemos en 0040115B que carga el ID de uno de los editbox, seguramente el del nombre de usuario, y en

0040117E, el ID del serial, ahora 00401166 y en 00401191 es llamada la API mencionada.

Fijense algo curioso, luego de llamarlas a las APIs encontramos lo siguiente:

0040118E CMP EAX,0

00401191 JE CuTedEvi.0040132B

Recuerden que les conté en secreto que GetDlgItemTextA, devuelve en EAX la longitud del texto extraído de una editbox, entonces, aquí compara la longitud con 0 y si es 0, salta a otro lado, con lo que no iría por buen camino, ya que nosotros debemos ingresar un serial y un nombre de usuario, sino no chequeará nada y seguirá su rumbo…..

Existe otra API llamada lstrlenA, que justamente obtiene la longitud de una string. ¿ pero porque esta llamada aquí ?, si ya sabemos cuanto tiene cada string… quiere decir, que debe necesitarlo, miremos:

PUSH CuTedEvi.0040332B ; /String = “”

CALL <JMP.&KERNEL32.lstrlenA> ; \lstrlenA

CMP EAX,0

JE SHORT CuTedEvi.004012F7

De nuevo un chequeo por 0, y salta a donde el otro chequeo lo hace, 004012F7, como podemos ver, ese salto, es por donde NO debemos ir.

Bien, pensemos ahora, que sucede, ¿si no salta a 004012F7?, algo hace, algo debe hacer, y de hecho lo hace…

figura31

ROL es una instrucción de cálculo, rota los bits hacia la izquierda, hagamos de cuenta que multiplicamos por 5 (en decimal) un valor.

SUB resta 123 (en hexadecimal).

ADD suma 321 (en hexa también)

CMP compara con un valor, en este caso 2FE.

Luego si, no es EAX ese valor esperado, salta al famoso salto del fracaso. :)

Apliquemos Ingeniería Inversa:

 

el valor esperado en eax como resultado de los cálculos es 2FE (33 en decimal), en EAX, tenemos la longitud de la cadena serial luego de llamar a lstrlenA, entonces, hagamos el cálculo inverso para ver, que longitud necesitamos tener en el editbox serial.

Tomemos 2FE, restemosle 321, esto nos da un número negativo FFFFFFFFFFFFFFDD, ahora sumemos 123, y nos da 100 (siempre en hexadecimal, no se confundan), ahora ROL multiplica por 5, ahora DIVIDAMOS por 5, ¿¿ y que obtenemos ?? un lindo y hermoso 33.

Esa, esa cifra señores, es la longitud que el programa necesita que tenga el serial, para poder seguir chequeando.

Ahora , modifiquemos el valor del serial, y miremos, que pasa: 012345678901234567890123456789012 , ese serial introduje yo, 33 valores cualquiera ni más, ni menos…

Ahora miremos que estamos muy cerca de los cartelitos de antes, ¿se acuerdan?, ok, les muestro que pasa antes:

figura41

Ok, tenemos el salto que habíamos parcheado hoy, pero, con la diferencia que sabemos que pasa antes, ahora solamente lo que podemos hacer son dos cosas, o introducir un número cualquiera de 33 caracteres, y luego parchear ese salto, o sino, parchear los dos saltos:

Primero: CMP EAX,2FE

JNZ SHORT CuTedEvi.004012F7

 

Segundo: CMP BL,0

JE SHORT CuTedEvi.004012F9

y Listo!, felicidades lo has logrado. :)

convert this post to pdf.