Archive

Author Archive

El Engaño de Google

January 25th, 2010 spark No comments

Hola a todos, estamos un poco de vacaciones, pero bueno dentro de las vacaciones leemos también… así que les voy a mostrar un libro bastante interesante, siempre hay que leer sobre “la otra cara de la moneda” para no quedarse con una sola visión de las cosas.

Una visión que poco se ve (que raro no? ;) ) es la de anti-google… bien, eso quiero difundir hoy acá con este post.

Ofrecerles  este libro más que interesante del escritor Gerald Reischl.

He aquí una reseña de su introducción:

“El objetivo de El engaño Google es otro: contribuir a la concienciación y poner en evidencia el dilema en el que viven los usuarios de Internet, las negligencias en las que ha incurrido Europa y dónde debemos fijarnos si queremos sacar provecho de Internet. Partiendo de hechos concretos se demuestra que Google es, desde hace años, el más eficiente registrador de datos del mundo; que existe un gran número de patentes y métodos que permiten rastrear, analizar y clasificar a los inter nautas; que las promesas de no utilizar los datos y borrarlos pasados 18 meses se han quedado en meras palabras y que la clave del éxito está en la información de los usuarios. En este libro también se habla de los planes de Google para el futuro: por qué quiere dar el salto al negocio de los móviles y las telecomunicaciones y por qué quiere dominar el mercado de la publicidad, tanto en Internet como en prensa y televisión. Por otro lado, los proyectos relacionados con la medicina, la genética y el análisis del ADN en los que Google está inmersa también deberían levantar nuestras suspicacias. Hace tiempo que Google ha dejado de ser solamente un buscador y se ha convertido en una de las empresas más ricas del planeta. Sus propietarios poseen una de las mayores fortunas del mundo gracias a un ingenioso diseño de comunicación y a la enorme masa de entusiastas que utilizan Internet. Y en detrimento de la privacidad.”

Que lo disfruten tanto como yo. :)

Saludos!

convert this post to pdf.

Feliz Navidad para todos! :)

December 24th, 2009 spark 2 comments

Buenas a todos, solo eso, una muy feliz noche buena y navidad para todos.

Papá Noel siempre deja algunos regalos, nuevos viejos, igual todos son lindos, me dejó una nota que decia: “Postealo también en el blog de DisidentS eh!” así que estoy cumpliendo con el. :)

He aquí el regalo, se presumía que andaba una versión funcional, con hex-rays, aquí está:

IDA 5.5 con HexRays Full

Un saludo para todos, y hasta el próximo post.

convert this post to pdf.
Categories: Uncategorized Tags:

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.

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.

Lockless X-Lock Crackme #1 – (Old Session 2002)

June 14th, 2009 spark No comments

En la lección de este mes, les traigo un amigable crackme, que según el autor (  y con razón) es un tutorial, si lo desensamblamos, así que les pegaré el código y eso es todo… jeje , era broma, lo iremos descubriendo de a poco, y aprenderemos juntos. ;)

Nos encontramos con una protección que no habíamos analizado aun, esta proteccion, es parecida a las utilizadas en los keymes, donde necesitamos un fichero clave para que el programa este registrado, este fichero clave contiene ciertas caracteristicas muy importantes que hacen, que se este registrado o no.

Bueno, este crackme no es un keyme, pero al principio actua como un keyme, nada mas que chequea un par de cosillas distintas, que ya veremos.

Reglas de Juego

Cuando ejecutamos el Crackme , tenemos en la pantalla principal de este, dos botones, y a la izquierda de estos, dos labels, que dicen Shareware y Unregistered.

Miremos en el boton About/Rules, donde nos dice, que hay tres caminos para crackear el crackme, y luego como les comente al principio del articulo, si lo desensamblamos, este crackme, es un tutorial por si mismo, tenemos permitido usar desensamblador y parchear; y por ultimo dice que si somos mejores con SoftIce, lo hagamos con SoftIce, pero nosotros no usaremos SoftIce, usaremos Olly Debugger, asi que no lo desensamblaremos, ni lo parchearemos fisicamente, solo en memoria.

Un poco de teoría

Desensamblemos el crackme, y veremos la pantalla principal de debugger, con el codigo ensamblador mostrandonos como es nuestra victima, debo decirles, que es un poco enradada, pero no nos asusteis, esta todo controlado…

Comenzamos en la dirección 401000, con un recibimiento poco comun en los crackmes (lo he  visto en algunos programas y juegos comerciales, y bastantes nuevos), nada mas ni nada menos que un “Hi Reverser”,

¿ pero quien es el reverser aquí ?, SI! Nosotros, o eso creo….

Luego otro PUSH ( que lo que hace es cargar con una direccion de memoria la cual apuna al string, el string propiamente dicho) que nos dice “Here Starts the test for the Versión” (Aquí empieza el chequeo por la versión).

Nueve instrucciones mas abajo encontramos otro texto que es PUSHeado a la memoria diciendo: “Here end the test for the Versión” (Aquí termina el chequeo por la verision).

Con razon el creador dijo que esto era un tutorial, miren, si nos marca el sector donde hace el chequeo para decirnos si esta registrado o no el programa, nosotros debemos conseguir que en esos dos labels que hay al ejecutarlo en la pantalla principal diga que esta registrado.

Bien, veamos que podemos hacer aquí tenemos lo siguiente:

principalcrackme

En la direccion 0040100B  , la instrucción MOV [DWORD DS:40300C],1 y en la direccion 00401015 , la instrucción MOV [DWORD DS:403008],1 ;  analicemos para que sirven y porque las nombro de entre todas las demas, ¿ ustedes piensan que tienen coronita ? pues no, no la tienen, o de algun modo si… :)

Los dos MOV’s mueven un 1 en decimal, a dos direcciones de memoria diferentes…. Anotemos la direccion 403008.

Más abajo en la dirección 00401021 , tenemos la instruccion  LEA EAX,[DWORD DS:403010], que carga el valor que esta en la zona de memoria 403010 a  EAX, y luego la instrucción de la direccion 00401029 que nos dice:

captura1reg1deverdad

CMP EAX,X-LOCK~1.00403012

captura1reg2deverdad

Luego viene nuestro push querido indicandonos el fin del programa, un pop eax, y un salto JE, que nos lleva  a la direccion 401040….

Algo muy notorio

Muy bien, ¿que es lo notorio?, ese salto a 401040 nos lleva a continuar el flujo del programa normalmente, ¿pero que sucede si este salto no se realiza?, veamos:

00401036   MOV [DWORD DS:403008],0

¿Pero que sucede aquí?, en 403008, la que yo les dije que recordaran , pone un 0!!!, ¿porque? Sigamos mirando y deduzcamos si ese 0 es necesario para estar registrados o no…

chequeaeaxpor1

Mas adelante en el programa , carga la ventana principal, en la direccion 401077 chequea , por si se ha clickeado un boton, y si es asi, pregunta cual de ellos, etc, etc. Esta rutina es comun en todos los programas, ya que es la rutina principal que chequea por cada opcion, o boton , si fue presionado o no, y en caso afirmativo se deriva el flujo del programa a la direccion correspondiente a la accion solicitada por el usuario.

Lo bueno comienza en la direccion 0040109D, donde nos encontramos el push identico, al primero que vimos en la apertura del programa desensamblado, y unas lineas de codigo mas abajo el otro push que nos indica que finaliza la seccion de registro, tal cual en el principio.

¿ Se acuerdan de los mirror checks que yo les habia explicado en articulos anteriores ?, bien, aquí lo tienen, la proteccion se repite en dos zonas de memoria distintas, o sea, que si nosotros parcheamos solamente la primera, o encontramos la segunda y parcheamos solamente esta, la otra seguira actuando normalmente y no nos dejara el programa registrado, por supuesto todo esto depende de cómo el programa este implementado, porque en nuestro caso, con modificar el segundo chequeo , nuestro crackme ya esta completamente funcional.

Fijense que en la direccion 0040109D vuelve a hacer lo mismo que antes.

Carga en EAX, lo que contiene la direccion 403010 y lo compara con lo que hay en la direccion 403012, si no llegan a ser iguales en la direccion 004010AD salta a la direccion 004010B9, pero la instrucción MOV [DWORD DS:40300C],0 de la linea anterior no es ejecutada, si se produce el salto, pero miren atentamente moveria un 0 decimal a la direccion 40300C, es otra zona!, es un doble chequeo, pero chequea dos zonas distintas de memoria, miremos mas,

miremos mas….. :)

redireccion

En la direccion 004010A2  tenemos un  LEA EAX,[DWORD DS:403010], 403010 tiene un 31 en hexa (1 en decimal), lo que al compararlo en 4010A8 con el valor de 00403012 que contiene un 30 en decimal (0 en decimal), hara que no salte y entonces el mov de la direccion 004010AF pondra a 40300C en  0 y no estaremos registrados.

A partir de la direccion de memoria 4010E6 hasta 4010EE tenemos lo siguiente:

MOV EAX,[DWORD DS:403008]   ;  mueve lo que contiene 403008 a EAX

CMP EAX,1 ; lo compara con 1

JNZ SHORT X-LOCK~1.00401105 ; y luego si no es igual salta a 401105

Mas abajo miremos, las strings cargadas…

004010F6  |. 50             PUSH EAX                                 ; /Text => “Fullversion”

00401115  |. 50             PUSH EAX                                 ; /Text => “Registered”

Necesitamos que estas strings se carguen, para que nuestro crackme funcione correctamente!!!, pero como podemos hacerlo??? Bien, el salto de la direccion 4010EE no nos lleva a poder ejecutar esas strings, por lo menos la de Fullversion no, pero sin embargo salta a una direccion anterior a la de la string “Registered”, salta a 401105, y “Registered”, esta en 401115, o sea que algo debe haber en el medio..  >: \

Perfecto, en la dirección 401105 tenemos lo mismo que en la direccion 4010E6 nada mas que el MOV EAX,[DWORD DS:403008]  , cambia por MOV EAX,[DWORD DS:40300C]  , aquí sucede lo mismo que antes, si no se cumple la misma condicion, o sea en la direccion 40300C no esta el valor 1 decimal, tampoco carga la string “Registered”, y nuestro programa no estaria ni completo (Fullversion) ni registrado (Registered).

poneeditsregistrado

Alternativas de Cracking:

Hay muchas alternativas, para hacer que nuestro pequeño funcione, podemos modificar los saltos de las direcciones 401034 y 4010EE, entonces como los valores de las direccion 403008 y 40300C seran 0 saltara, y nos hara registrar, simplemente cambiar los JNZ por JZ y listo, o sino por JMP y estos se transformaran en saltos INcondicionales, o sea, no importa si son iguales o no los valores, el salto se realiza igual.

Otra alternativa mas “elite”, y menos sucia que cambiar saltos y forzar el flujo del programa, es modificar la instrucción LEA de la direccion 00401021  , donde mueve lo que contiene 403010 a EAX, como lo que contiene 403010 es un 1 en decimal, siempre no saltara y nos pondra en 403008 el valor 0 con lo que no estaremos registrados nunca, entonces ¿por cual valor podemos moficar el operando de la instrucción LEA? Por una direccion de memoria como por ejemplo 403012, que contiene 0, entonces cuando llegue al CMP EAX, 403012, simplemente comparara el valor que contiene 403012 con el que contiene 403012, ¿resultado?, se produce el salto, y asi nuestro soldadito atrapado en  403008 (el 1), seguira vivo y no sera machacado….

Otra alternativa seria cambiar el CMP EAX,403012 por 403010, ya que, sera lo mismo, nada mas que en 403010 hay un 1 y no un 0 decimal como en 403012.

Luego en 004010A2 podemos modificar la instrucción LEA , por 403012, o inclusive podemos hacer un MOV EAX,0  y seria suficiente porque 403012 contiene un 0 decimal, y debemos hacer que el salto se produzca, y como el salto se produce cuando son iguales, pues ya lo tenemos ;)

Tambien podemos modificar el CMP, como en la zona de chequeo anterior o el salto JNZ.

Triunfadores:

Hemos  triunfado de nuevo, como podemos ver, nos aparece una ventanita, diciendonos, que hemos craqueado exitosamente el crakme, y que esperemos el segundo que sera mas difícil de crackear, ¿lo sera? Quizas si…. Quizas no….

¡Hasta la próxima!

convert this post to pdf.

ParaBytes Reverseme #4 – (Old Session 2002)

June 7th, 2009 spark No comments

Hemos llegado a una parte muy interesante de este curso, bienvenidos nuevamente a otro fascinante episodio de esta sección.

Espero que les guste y que les sea de agrado leerla, he elegido un elaborado Reverseme de ParaBytes aún sin solución, nosotros no implementaremos la solución completa, pero pasen y vean, vean que bestia he atrapado. :)

Bien, había comentado anteriormente que es un Reverseme, pero para todos aquellos que no lo sepan, o aún no lo entiendan, un Reverseme es justamente un programa el cual hay que agregarle, activarle, reprogramarle alguna función.

Estas funciones son dadas por el programador, como reglas del juego, como veremos mas adelante, tenemos reglas para jugar con nuestro Reverseme elegido, muy entretenidas, cubriremos la mayor parte de estas reglas, que son muy sencillas, y les ayudará muchísimo a la hora de entender alguna víctima de este tipo, o quizás nuevas, porque todo este conocimiento es reciclable.

Reglas de Juego

Bueno, el Reverseme nos dice, que tenemos un solo botón, llamado Exit, que justamente lo que hace es salir del programa; pero también hay un misterioso lugar arriba que nada esta ocupándolo, veremos porqué.

Esto es así porque, justamente lo que debemos hacer es crear un botón nuevo, en ese espacio, y luego programarlo para que muestre un número aleatorio en un messagebox, parece sencillo no?, veamos que sucede más adelante.
captura1

Un poco de teoría

Veamos algunas definiciones nuevas para los iniciados, y renovemos a los ya iniciados con un poco de teoría que no viene nada mal.

Un archivo PE,NE,MZ, ELF, COM, o cualquier formato que tengamos que analizar o modificar, debemos estudiar en primera instancia su estructura. Un fichero PE (los mas comunes de win32) está dividido en secciones, PE significa Portable Executable, y algunos nombres comunes de secciones que se suelen encontrar en un PE normal son: .code, .data, .rsrc, .udata, .text, .edata, y algunos más que posiblemente ahora no recuerde bien, pero para que más, esos son los más importantes.

Por supuesto que la cosa cambia cuando el EXE esta empaquetado, las secciones suelen cambiar sus características , incluyendo su nombre y demás atributos.

Cada sección, posee atributos, como el de ejecutable, o el de lectura, compartido, etc. Con un editor de  archivos PE pueden verse las secciones fácilmente, un programa para ello es PE-Editor, muy útil en estos casos, permite volcar secciones, editarlas, analizarlas, etc.

Cuando un programa es ejecutado, este es volcado en gran parte en memoria, o al menos el código que será ejecutado dentro de poco tiempo en memoria, esto hace que la mayoría de los recursos del archivo EXE se vuelquen también en memoria, y tengamos casi todo ahí para servirnos de ese manjar.

Cuando tenemos un Reverseme de este estilo que debemos AGREGAR un botón, justamente, debemos agregar código, y eso requiere cambios en el flujo del programa, cambios lógicos, o sea que no hagan que el programa se corrompa ni produzca errores, debemos controlarlo, para poder hacer lo que queramos hacer con él, ésta manera, es la mejor manera de entender el ensamblador  y que sucede dentro de la PC en Windows por ahora.

Desviación del Flujo de Programa

Debemos graficar esta situación, esta modificación es en primera instancia en memoria, luego podemos transladarla al archivo físicamente parcheándolo y dejándole agregada la función para siempre, pero antes para hacer todo esto debemos graficarnos como modificar el flujo de un programa.

Los virus hacen algo parecido al infectar EXE’s, justamente cambian el flujo de su víctima, para que el virus se ejecute primero y luego, infecta, o hace sus cosas malas, y luego le da el lugar a la víctima a que se ejecute normalmente; antes en DOS, se calculaba la cabecera del EXE, y luego se le agregaba el código de operación de un salto incondicional con la dirección en la que empezaba el virus, de esta manera, el programa lo primero que hacía era, ir al virus a través de ese salto y luego volver.

Algo parecido haremos aquí, primero dejaremos que muchas cosas propias del programa se ejecuten, porque no lo infectaremos, simplemente le agregaremos algunas cosas, así que debemos observar la víctima mirarla bien donde hay que agregar, como funciona y demás para luego decidir donde agregar y porque.

En programación en Win32Asm, tenemos que cualquier programa  que programemos en este lenguaje, tiene un bucle, este se denomina bucle de mensajes, y es ejecutado por cada programa siempre, para saber si algún mensaje fue enviado a ese programa, como por ejemplo el clickeo en un botón, la minimización del programa y muchísimas cosas más.

Generalmente las API’s ejecutadas son GetMessage, TranslateMessage y DispatchMessage, son utilizadas para este fin, de esta forma, ubicar este bucle se nos hace muy fácil simplemente buscando estas API’s.

Generalmente cuando el programa se está cargando antes que nada, genera los recursos, o sea, la ventana, los botones, y todos los componentes que necesita para funcionar, estos son generados de diversas maneras, dependiendo el lenguaje en el que fué programado.

Por ejemplo en algunos programas hechos en Delphi , se utiliza el API LoadResource, mientras que en Win32Asm, se suele hacer de distintas maneras, generalmente se hace de la manera más tradicional, llamando a CreateWindowExa, para crear botones, ventanas , y demás componentes.

Pero esta API lleva parámetros que deben ser introducidos y respetados para que todo funcione como queremos.

Si ubicamos la rutina que crea un botón, ya podemos modificarla un poco y agregarla en algún lugar libre para redireccionar el programa hacia ese lugar en el momento que se comienzan a cargar los recursos para también cargar el nuestro que agregaremos, y luego devolverle el control para que el programa siga su rumbo normal sin ningún tropiezo.

Bien, grafiquemos esto:

Inicio del Programa —> Carga de Recursos – PARCHEO – —> desvío hacia nuevo código —> retorno al código original

Sabiendo que debemos hacer, analicemos nuestro amiguito, con Language vemos en que lenguaje está programado, cuando vemos que nada nos pone, es que está hecho en el lenguaje más puro Win32Asm, si señor, miremoslo, porque todo está entregado, no hay runtimes, ni llamadas a DLL’s sin sentido , ni cosas raras, es ASM, puro y simple.

Si lo desensamblamos, y miramos con W32Dasm, vamos a la ventana de String References y vemos una palabra BUTTON, bueno ahí tienes hijo, el botón declaradísimo, más claro imposible. :)

Hagamos doble click en la palabra, y nos lleva a la dirección donde parece que se declara el tipo de botón, nombre de este, y muchas cosas mas, luego si miramos mas abajo podemos observar que se llama a CreateWindowExa, exacto, con eso se crea el botón.

Ahora, una idea brillante se me ha ocurrido (milagro), podemos reutilizar este código ya compilado para usarlo para nuestros propósitos que en este caso es agregarle un botón más, por ahora, solamente haremos eso.

Bien, el código para la declaración del botón empieza con PUSH en la dirección 4011CB, si miramos más abajo podemos observar que en la dirección 4011E8 se encuentra el título del único botón que hay en el programa (hasta ahora), “Exit”, y una línea más abajo está el texto “BUTTON”,  estamos por buen camino. :)

captura2

Luego podemos ver que ingresa muchos parámetros más y luego ejecuta la API CreateFontA, que lo que hace justamente es darle un tipo de letra al botón, nosotros haremos exactamente lo mismo con el nuestro, luego ejecuta la API SendMessage simplemente para poner la letra al botón.

Nosotros copiaremos enteramente desde 4011CB a 40123D, y modificaremos, algunas cosas, si miramos el PUSH que pushea el texto “Exit”, este nos dice una dirección, que es 40303C, nosotros modificaremos ese PUSH poniendo un PUSH pero a una dirección lejana que sabemos que no será utilizada por nadie como por ejemplo 403FF8, ahí pondremos cualquier texto, con el Olly, simplemente apretamos control+G en la ventana de datos y ponemos esa dirección, luego seleccionamos 8 bytes y hacemos click en el botón derecho, haciendo click en la opción para modificar los datos, introducimos el texto que queramos, y listo.

captura3

Ahora, debemos cambiar el ID del botón, el del Exit es 7A69, el cual modificaremos y le pondremos uno más 7A6A por ejemplo. Nuestro botón debe tener distinto ID para poder poder existir y sobrevivir, sino haría conflictos con el existente.

captura3

Ahora si miramos un poco más arriba vemos que en 4011C5 y más arriba también está el bucle de mensajes del programa, el cual nos centraremos en 4011AC, que es donde pregunta por el ID del botón Exit, deberá hacer lo mismo para nuestro botón, asi que debemos parchear esa parte también de esta manera:

claramente se observa que exit sale del programa, o sea la API que hay mas abajo PostQuitMessage es ejecutada, quiere decir que cundo hacemos click en ese botón el salto JNZ que hay antes no se ejecuta, este se ejecuta cuando NO es clickeado el botón, o sea que si es presionado el nuestro, ahí podemos redireccionar con una dirección distinta hacia nuestro código, para que haga un CMP con nuestro ID tal cual como lo hizo con exit y luego un nuevo JNZ, y ahí si éste será idéntico al que modificaremos ahora, ¿porque? Pues porque este JNZ nos lleva a otra parte del bucle principal del programa que se encarga de los mensajes también, si no lo hacemos nuestro programa puede romperse y salir de repente o inclusive trabar a nuestro querido Windows.

captura4

Bien, he dado las pautas para poder modificarlo, ahora debemos situar el código de creación del botón en algún lado, para eso, usaremos un programa hecho por WKT (saludos esn-min) llamado Topo, este programa analizará nuestro EXE en busca de espacio libre para alojar injertos, y luego lo dejará fertilizado para nuestros propósitos.

Al ejecutarlo y analizar el fichero nos dice que hay 420 bytes disponibles, le decimos que lo agregue en la misma sección (o sea .code), y luego, operamos con el Olly de nuevo.
captura5

En 40225C en el offset A5C, a partir de ahí  estará seguro nuestro injerto, así que los saltos antes mencionados deben redireccionarse a éste código, el salto que debe ir hacia este código es un JMP a esta dirección, lo pondremos sobre el push 0 de la dirección 4011CB, y luego, de ir hacia nuestro código, antes de regresar pondremos un push 0 (que fue el que sobreescribimos) y luego un jump al segundo push, o sea a la dirección 4011CD,  de esta manera el programa no se dará cuenta de lo que está sucediendo en su interior. :)

Así nuestra víctima generará un botón que ni siquiera estaba previsto crear con algunos simples cambios.

Conclusión

Muy  bien, hemos hecho un injerto de código!, ahora con esto debemos profundizar y utilizarlo en más reversemes, crackmes, toolmes, y demás bestias que andan sueltas por la Red.

Espero que les sea de utilidad, y vean que hay cosas que no son tan difíciles como las plantean, o como se plantean en muchos sitios “elite”.-

convert this post to pdf.