Archive

Archive for the ‘Artículos’ Category

Control de menores, aquí si, allá no.

August 28th, 2010 noukeys No comments

Caliente video, ¿no?

Me ha llamado la atención que youtube califica este vídeo como no apto para menores y desde su página necesitas confirmar tu edad para verlo, pero, si embebemos el video en una web (por ejemplo esta) no hay ningún tipo de control.

El contenido continua alojado en youtube, ¿deberían controlar el acceso?; ¿deberíamos hacerlo nosotros?

El debate queda abierto xD

convert this post to pdf.

Suplantación de identidad en comentarios de WP

June 24th, 2010 noukeys No comments

Mirando el blog de un amigo, me ha dado por registrarme y toqueteando me he dado cuenta de una cosa muy curiosa.

1.- Creo mi perfil noukeys y, como vemos en estas imágenes y escribo un comentario.

2.- Bueno hasta hay todo normal. Pero, ¿que pasa si cambiamos ciertos campos en nuestro perfil? Vamos a ver . . .

Pues el efecto óptico es muy bonito, parece que el admin nos esta dando la bienvenida!.

¿Suplantación de identidad?

¿Debería WP limitar ciertos nombres en ciertos campos?

¿Podemos considerarlo un fallo de seguridad?

Prefiero no pronunciarme, pero el efecto es cuanto menos curioso …

Un saludo y hasta el próximo _POST

convert this post to pdf.

hacking a university web at the university

May 29th, 2010 noukeys No comments

Un chico de españa mostrando en una charla en la universidad los fallos en la web de la misma.

Audio un poco malo, sorry :(

En breve actualizare el post con los videos que se muestran en la conferencia :)

convert this post to pdf.

Tutorial Trainer para DrugLord 2.2 by Krozmic

May 2nd, 2010 krozmic No comments
Bueno… este es mi primer tute… y no se como empezar… jeje vamos por partes no?
Imagen del juego:
Este es el juego… para que vean que no es un juego de esos en 3d y que tiene todos los chiches…este es así a lo sencillo…
El juego trata de ser vendedor de drogas… Un juego al estilo Oferta – Demanda… compras droga barata y lo vendes cuando sea cara…
Bueno.. como yo siempre lo juego y mi hermano también.. sabemos bien como funciona… el juego solo tiene 55 días máximo de juego… Para los que piensen.. NO es una protección de tiempo…es 55 días juego…
Como les decía.. quisimos jugar mas días.. tener mas dinero para comprar droga… y tener mayor capacidad para almacenar dicha droga…
Me dije.. “Hummm aprendería mas sobre el reversing haciendo esto…. y AHHH también aprendí a programar… Pues bueno.. Intentemoslo…”
Y ahora lo intentaremos…

BUSCANDO DATOS IMPORTANTES…
Bueno.. ahí les señale lo que necesitamos… “Day: 2/30” , “Cash: 434” y “Your pants pocket (2/10)”
Como ven ya jugue dos dias… gaste mi dinero para comprar el “Pot” y en “Your pants…” tengo mis dos unidades, kilos, bolsas o lo que sea de Pot…
Si.. ya lo tenemos todo…

– ACLARACIONES o OBSERVACIONES…
Esto les muestro porque se como va el juego.. y para aclarar cualquier duda…
El juego tiene unos rankings… subis de ranking cuando ya tienes 1.000.000 de dolares etc etc y te da 5 dias mas de juego, te aumenta la capacidad y todo lo demas…aquí les dejo los rankings… que nos ayudaran para despues….
Ranks
You can have one of six ranks at any give time:

Wannabe
Cash Required: $0
Carrying Capacity: 10 units
Container: pants pocket

Small-time Operator
Cash Required: $5,000
Carrying Capacity: 25 units
Container: coat

Dealer
Cash Required: $40,000
Carrying Capacity: 100 units
Container: black Trans Am

Big-Time Dealer
Cash Required: $300,000
Carrying Capacity: 600 units
Container: converted milk truck

Distributer
Cash Required: $2,500,000
Carrying Capacity: 3,500 units
Container: warehouse

Drug Lord
Cash Required: $15,000,000
Carrying Capacity: 20,000 units
Container: island paradise

Ya…. Bueno ahora que viene…
Ah cierto.. debugear el juego…

EL DEBUG DEL JUEGO….
Primero primero lo escaneamos con el RDG…
Bueno dice archivo sospechoso y bla bla.. no me interesa…
Pero no hay nada de packer y todo eso…
Depuremolo de una vez…
caemos aquí…
que le hago, que le hago.. si no se entiende un huevo…
Hey cierto… ver los text string y si no hay nada las apis comunes que siempre usamos…
Text String Primero:
huuuuuuuuuuuuu… millones… seguro hay alguno que nos sirve…
y seguro que hay millones de apis…
pero se me ocurrio algo…. en dias decia… “Day:1/30”
intentemos buscando la constante 30 en el debug.. en hexa es igual a “1E”
Click derecho sobre el debug > search for > Constant..
le ponemos el 30 en decimal o el 1E en hexa… Aceptamos
y paramos en….
Y si.. no me digan nada.. ahi tenemos una api… pero llegamos de otra forma… asique
EXPERIENCIA+1
Sigamos….
Ponemos una Bp sobre PUSH 1E… damos run… paramos de vuelta…
Traceamos un poco… y llegamos 00406011 MOV DWORD PTR DS:[42AD74],1E
osea que mueve los “30” a esa pocicion de memoria…
Ven…
bueno… para probar podriamos, no se.. modificar ese byte… por otro para probar si sale mas dias….entonces…
y cambia 1E por FF… que son…255…
damos run y nos fijamos…
y si.. son 255 dias…volvemos a donde estabamos y anotamos la posición de la memoria donde esta alojado el 1E…
[0042AD74]
Bien… ya tenemos los dias…
Ahora el cash…
Bueno cuando empezamos el juego.. tenemos 1,990 dolares y una deuda de 1,150…lo de la deuda lo dejamos… total cuando tengamos 1millon de dolares ni vamos a sentir esa deuda..jiji
Ahora.. como procedemos…
Lo que podriamos hacer es… poner un Bp en SendDlgItemMessageA y buscar y buscar hasta encontrar el indicado… Asi como lo hice yo… pero ya me olvide… asique eso lo pueden hacer ustedes…
bueno… la verdad que no me acuerdo de donde estaba, como y porque…
pero encontre que el primer cash que se agrega es 2,000 dolares y no 1,990.. seguro que es por los
impuestos, gasto por el carne de vendedor de drogas.. que se yo…
lo que si que cuando vimos donde se movia los dias a la memoria… mas abajito este el del cash…
si ven.. dice… 00406044 MOV DWORD PTR DS:[42ACE0],7D0
mueve 7D0 que son los 2000$ a esa pocicion de la memoria…
probamos de vuelta…
vemos en la memoria… osea en el dump y vemos
ahi esta el 7D0 alrevez… (Odio que siempre lo ponga al revez..me marea. y peor si estoy con resaca)
bueno ya saben como modificar los bytes… agarramos los dos y ponemo fill con FF`s si salio tiene que aver FF FF
pero cuanto dinero seria esto… para saber claro si salio o no… calculadora y son… 65.535 $
damos run y miramos el cash…
y practicamente nos faltan los 10$… pero no me importa.. a mi por lo menos 10$ en el juego no me interesa… si voy a ser rico…
bueno… ya sabemos que hacer… anotar la pocicion de la memoria donde esta alojado el cash…[42ACE0]
ya tenemos el cash.. luego le agregaremos lo que queremos de dinero…
Ahora lo que mas cuesta… la capacidad…
como vieron al comienzo donde estaban los rankings… se ve que hay 6 tipos de capacidades…

Wannabe
Carrying Capacity: 10 units
Small-time Operator
Carrying Capacity: 25 units
Dealer
Carrying Capacity: 100 units
Big-Time Dealer
Carrying Capacity: 600 units
Distributer
Carrying Capacity: 3,500 units
Drug Lord
Carrying Capacity: 20,000 units

y bueno.. si le modificamos al comienzo.. una capacidad de 10unidades por una capacidad de 15000unidades cuando subamos de ranking tendremos de vuelta 25 unidades de capacidad y asi sucesivamente… osea que hay que pescarlos a todos y modificarlos…
bueno… no me van a creer pero me olvide tambien como llegue ahi… haremos algo rapidito….
si tienen el GREATISWINDOWSE… pues ejecutenlo…
ejecutemos el juego tambien…
y veamos…
Bueno si tenemos el windowse y el druglord abiertos ponemos nuestro cursor sobre el (0/10) de Your pants pocket y nos fijamos en el windowse donde dice..
Control ID 000001FB
nos acordamos del numero  ese y cerramos el windowse y el juego…abrimos de vuelta el juego con el Olly y damos click derecho> search for> constant y ponemos lo del control id que vimos recien….
y el olly nos tira aquí…
si ven … un chiqui mas arriba dice ASCII “Your %s (%d%d)”… osea que es eso.. y que estamos muy muy cerca….
que tal si le ponemos unas Bp un poco mas arriba para tracear….
lo pueden poner en 00402998 MOV EBX,EAX
dan run.. y paran y tracean…
Llegamos a 004029CA el primer Bp de la imagen de arriba…. compara EBX con una dato de que
esa direccion…
que es un 0A… osea 10decimal… que es nuestra primera capacidad.
Pero bueno traceamos un poco mas y llegamos al segundo Bp de la imagen de arriba… el 00402A0E y vemos que mueve el 0A que esta en la direccion de la memoria a EAX…
nos fijamos en el esa direccion el el dump y modificamos el 0A por FF para ver si cambia o no…
ya saben como se hace.. y no lo repetire… no pega copiar y pegar imagenes…. aparte ya lo tienen que saber a estas alturas…
bueno… ya le modificamos por los FF y damos run para mironear…
Y si.. ahi estan los 255 que era el FF que modificamos…
volvemos…. anotamos la direccion… 004230F0
como les dije.. ahora falta pescar a las otras 5 capacidades…
dejamos los Bp como estan… ahora a jugar para pescarlos…
(pero si hay que dominar el juego para subir de ranking… algo mas facil???)
bueno.. ya que anotaron donde estaba alojado el cash.. vamos a modificarlo de entrada para que los rankings pasen rapido…
reiniciamos el olly…
hacemos goto a 00406044 donde ingresaba el 2000$
y modificamos el D0 07 del dump por haber humm… para el ranking de druglord necesitamos
15.000.000 de $
asique… le agregaremos 20.000.000 de $
bueno.. 20millones en hexa es … 1312D00
y como les dije que me marea ponerlo alrevez… me programe un programita que te da la vuelta los
numeros (litle endian-big endian) para que los escribas en el dump…
Ahi lo tenemos… me automatice el problema… asique le modificamos al D0 07 por 00 2D 31 01
queda entonces asi..
y bueno Bp puestos… dinero puesto.. damos run y vemos que tenemos 19millones y pico…
ahora le damos en STAY HERE y nos para el olly…
nos fijamos que capacidad esta pasando…
volvemos a dar run… STAY HERE … para… miramos… run.. STAY HERE … para… miramos…hasta que tengamos estos valores

Carrying Capacity: 10 units este ya lo tenemos el 0A en hexa
Small-time Operator
Carrying Capacity: 25 units este es 19 en hexa
Dealer
Carrying Capacity: 100 units este es 64 en hexa
Big-Time Dealer
Carrying Capacity: 600 units este es 258 en hexa
Distributer
Carrying Capacity: 3,500 units este es DAC en hexa
Drug Lord
Carrying Capacity: 20,000 units este es 4E20 en hexa

esos valores en hex tienen que pescar… y anotar en que direccion de memoria estan…
yo les pongo aquí debajo…

el capacidad 25 esta en 423118 “19″
el capacidad 100 esta en 423140 “64″
el capacidad 600 esta en 423168 “258″
el capacidad 3500 esta en 423190 “DAC”
el capacidad 20000 esta en 4231B8 “4E20″

ya tenemos todo…

- RECOMPILACION DE NUEVOS DATOS

Dirección de donde se aloja los días [42AD74]
Dirección de donde se aloja el cash [42ACE0]
Dirección de donde se aloja la capacidad 10 decimal 0A hexa [4230F0]
Dirección de donde se aloja la capacidad 25 decimal 19 hexa [423118]
Dirección de donde se aloja la capacidad 100 decimal 64 hexa [423140]
Dirección de donde se aloja la capacidad 600 decimal 258 hexa [423168]
Dirección de donde se aloja la capacidad 3500 decimal DAC hexa [423190]
Dirección de donde se aloja la capacidad 20000 decimal 4E20 hexa [4231B8]

ya esta todo…
ahora…

- PROGRAMACION DEL TRAINER
Les dejo el código fuente en la capeta porque si les pego aquí se hará un caos.. y ustedes entenderán menos…
asique fíjense en la carpeta…
el código fuente tiene comentarios para que vean…
también les dejo en la carpeta el programita ese que da vuelta los números para ponerlo en el dump..
para los mas newies claro.. porque el resto de ustedes la dominan todo…

Con esto me voy despidiendo…

Bajar fuentes, complementos y juego:

OllydumpFORMAT druglord DrugLTrainer

convert this post to pdf.

Jugando con Samepage Merging

March 18th, 2010 spark No comments

Hola audiencia de disidents, hoy les voy a contar un poco sobre una cualidad que tienen ciertos entornos de virtualizacion, la cual podemos aprovechar para detectar los mismos.

El método que propongo esta basado en timing analysis, pero no sobre el tiempo de ejecución de determinadas instrucciones, sino que sobre los tiempos de acceso a memoria. Se han utilizado técnicas similares para detectar VMMs (incluyendo VT). Un método conocido es medir el tiempo de acceso a memoria con cache on/off, por lo general el VMM no permite desactivar el cache, entonces si ambas mediciones dan resultados similares significa que estamos dentro de un entorno virtual.

A diferencia de esa técnica, la manera que he encontrado no requiere ring0 y además es bastante sencilla. Claro que tiene ciertas limitaciones, no sirve para detectar cualquier VM, solo aquellas que implementen samepage merging (hasta ahora solo hice pruebas con KVM-KSM y VMware).

Supongo que tendré que explicar un poco en que consiste esto del samepage merging (desde ahora SM porque soy vago). El SM esta muy relacionado con el CoW (Copy on Write). Básicamente se trata de un thread que periódicamente recorre la memoria y une todas las páginas cuyo contenido es exactamente el mismo. Una vez unidas las páginas, el resto del proceso es exactamente un CoW, se comparte la misma page frame y se marca la página como read-only, cuando se intenta realizar una escritura, el manejador de excepciones se encarga de asignar una nueva página.

Este tipo de estrategia es bastante costosa por lo que no se suele utilizar sobre toda la memoria del sistema operativo. Sin embargo es muy tentador utilizarla en entornos virtualizados ya que se ahorran cantidades considerables de ram, el beneficio es máximo cuando se corren varios guests simultanea-mente.

En linux disponemos de KSM (Kernel Samepage Merging), este se puede activar y desactivar en el vuelo. Cualquier versión reciente de KVM saca provecho de KSM si se encuentra activado. La idea original sobre este tipo de tecnologías parece pertenecer a VMware y al parecer hubo ciertos problemas de patentes con KSM, lo importante a destacar es que si podemos aprovecharnos de KSM seguramente también podemos hacerlo de VMware.

Ya con todo esto un poco explicado, algunos deben estarse preguntando que pasaría si medimos los tiempos de acceso a memoria antes y después de que el KSM (o VMware) actue sobre la memoria del guest. Es justamente lo que vamos a averiguar ;)

Ver código fuente smdetect.cpp

Ahora se compila con: g++ -O3 smdetect.cpp -o smdetect
Funciona tanto en linux como en windows (mingw).

Ahora unas gráficas con los resultados en distintos entornos:

Las gráficas corresponden a 10 ejecuciones de smdetect por cada entorno. Si todo fuera perfecto deberían ser lineas horizontales, pero factores externos como la carga del sistema hacen variar bastante los resultados.

Se puede apreciar una diferencia notable entre los casos donde no hay VMM y en los que la hay. Un caso curioso se da con OSX, donde la diferencia es apenas un 100% estando más cerca de los resultados donde no hay VMM. Incluso en una prueba llego a dar ~30% lo cual lo hace un target muy dificil de detectar.

Mirando las gráficas y sin considerar OSX, podriamos establecer un umbral de 150% para la detección. Incluyendo los datos de OSX he decidido utilizar un 98%, aún asi pueden darse falsos negativos en OSX y un umbral tan bajo podría llegar a dar falsos positivos si se dan ciertas condiciones.

Conclushion!

Tenemos un nuevo método, que si bien no es 100% confiable, puede ser utilizado de forma práctica y es posible refinarlo mucho más. Una posibilidad es la utilización de heurísticas para ajustar el umbral en función a información sobre la carga del sistema. Otro tema pendiente es la enorme espera que hay que realizar entre mediciones, pero esto no creo que sea un impedimento para muchos autores de malware…

Aquí se acaba :)

erg0t

http://www.48bits.com/

convert this post to pdf.

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.