Las fiestas navideñas estan muy próximas, algunos ya festejan que estan de vacaciones, otros ya estan contando las posadas a las que iran…y otros (como yo) que no tienen dinero para nada, estan enfrente de su ordenador escribiendo entradas =P
La entrada de hoy no tiene nada que ver con esteganografía o seguridad informática. Simplemente es un `regalo navideño` que quiero compartir. Una de mis aplicaciones favoritas.
Los que me siguen (y aguantan) en twitter podran haber leido varios tweets donde hacia referencia a un reproductor de música muy especial.
MOC (Music On Console) o MOCP.
Ustedes se preguntaran, ¿Por qué tanto revuelo por un simple reproductor de Música?, ¿Qué tiene de especial?…Vamos a conocerlo paso a paso y ver si los logro convencer =)
Continue reading »
En este dia que fue elegido por que era el dia mas especial del año para mi, les presento en el ultimo proyecto que estuve trabajando….
Horrografia!!!
< Presentación para Usuarios >
¿Qué es Horrografia?
Horrografia es un programa que oculta un mensaje de texto plano en otro mensaje de texto plano. Ideal para las redes sociales (Sobre todo para adolescentes en Facebook)
¿Cómo funciona?
Horrografia oculta tu mensaje secreto “dentro” de otro mensaje que sera el visible. Y esto lo hace modificando el mensaje visible cambiando algunas letras a mayusculas y minusculas.
¿Que necesito para que funcione?
.-Por cada letra que quieras esconder, necesitas 5 letras en el portador.
.-No puedes esconder la Ñ (marcara error)
.-Solo puedes esconder los siguientes caracteres:
¿Por que es ideal para Redes Sociales?
.-Con la cantidad de mensajes que enviAN al dia en Facebook o la cantidad de mensajes que enviaMOS en twitter, podemos sacarle provecho para algo
.-Muchos usuarios jovenes, sobre todo en Facebook suelen escribir de esta forma:

..Y esta manera nos es ideal para ocultar algo y que pase COMPLETAMENTE desapercibido
¿Por qué la usaría?
Ultimamente se han visto casos donde el gobierno esta reprimiendo nuestra libertad de expresion, sobre todo con el caso de la “Ley Duarte” y el usuario de twitter que por publicar fue llevado como sospechoso.
Horrografia nos ofrece una manera de poder expresar nuestra opinion de una manera segura y privada.
¿Por que se llama Horrografia?
Bueno se me ocurrió llamarle así, ya que es un juego de palabras muy conocido de “Horror” + “Ortografia” y como el resultado es un texto muy mal escrito, queda perfecto ^.^
¿Funciona?
Claro que funciona he estado probando y hasta ahora nadie a descubierto o sospechado* de estos mensajes ocultos. Yo en twitter puse algunos mensajes, con esta tecnica y pasaron desapercibido hasta ahora con mis 933 seguidores.
Basta de palabrerias, vamos a la accion!!
Ejemplos:
Que se habra imaginado el “Gobernado de Veracruz Javier Duarte” al manderle este tweet (
Para el que no lo sepa Duarte encarcelo a dos personas de Veracruz por unos tweets y creo una ley en el estado que castiga a quien altere el orden por cualquier medio, incluido redes sociales)yO no se uSTedES, perO La VErdad @javier_DUarTe eS mi iDolo =P =) RT
Habra creido que realmente es mi idolo?? Dira otra cosa?? Sea como sea obviamente hubo reacciones hacia este tweet
Lo que no sabian es que decia otra cosa…Con todo respeto dedicandole el mensaje oculto señor “Gobernador”
TextoEscondido: ignorante
…..
Alguien “hackeo” mi cuenta de twitter y escribio esto por mi?
TextoEscondido: LaGuerraSeAcerca
…..
Uno de mis favoritos, esta dedicado al señor pr351d3nt3 de México, Fel1pe C4lderon. Tweet
ustedEs quE opInaN del SeñOr @felIPecaLDeRon??
Texto Escondido: ¿¿??
Otros:
koN MUxIIsHImo orGushoo DIgO keE IiO tengo la mas mEjOr “HorrografIA” De stoS laReS, a PocO no? =)
Ya que hemos visto ejemplo de como se ve la técnica veamos la herramienta para realizarlo. He desarrollado un servicio Web desde donde realizarlo o un Programa para windows para hacerlo desde la comodidad de nuestro hogar.
Horrografia-Online y Horrografia.exe
Horrografia-Online
Podemos encontrar Horrografia desde http://neobits.org/tools/horrografia.php Donde encontraremos 2 Botones. Ocultar y Recuperar
Ocultar: Simplemente poner el mensaje a Ocultar y el texto portador y nos regresara automaticamente nuestro texto portador modificado.
Recuperar: Solamente escribir el texto “horrografiado” Y nos regresara el mensaje oculto.
Horrografia.exe
Se puede descargar desde http://neobits.org/tools/horrografia.rar
Este sencillo programa de interfaz simple, es muy intuitiva y es igual a la version web. Asi que no necesita mas explicación.
< Detalles Técnicos >
La presentación de arriba esta pensada para usuarios normales que puedan llegar a este articulo, la siguiente parte esta dedicada para informáticos o personas que quieran conocer los detalles tecnicos.
¿Como funciona?
Horrografia es simplemente la IMPLEMENTACIÓN de la “Cifra de Bacon“, al igual que la cifra de Bacon hacemos uso de 5 bits y lo aplicamos a los caracteres ASCII, convirtiendolos a mayuscula o minuscula.
Debido a que se implementa en los caracteres ASCII, es que los caracteres “Ñ” acentos y demas no son soportados (UTF-8)
Horrografia esta Basado en la cifra original de Bacon, aunque la amplié un poco mas hasta ocupar completamente los 5 bits “11111”
< Sobre el algoritmo >
Como todo programa,Horrografia tiene sus pros, contras y limitaciones. Aparte de los caracteres restringidos que se pueden ocultar, algo que cabe destacar es que si el texto portador rebasa por mucho la (longitud del texto oculto) * 5 esto al recuperar, agregara basura…Ejemplo:
Texto a ocultar:
1 heckyTexto Portador:
1 Este es una prueba de un mensaje extremadamente largo. Esto al Recuperar...OBVIAMENTE causara problemas ='(Texto Horrografiado:
1 esTE Es uNa prueBa dE un MEnSAje extremadamente largo. Esto al Recuperar...OBVIAMENTE causara problemas ='(Recuperacion:
heckyaaaaria@@aaa
En el ejemplo claramente se ve el problema expuesto, esto sucede por que el mensaje a ocultar “hecky” solo necesitaba 25 caracteres ASCII Osea “Este es una prueba de un mensaj” con eso bastaba, sin embargo al escribir mas siguio decodificando y al encontrar en su mayoria minusculas agrega “a” pero las mayusculas “E” -> “Esto“, “R” -> “Recuperar” , -> “OBVIAMENTE”, hace que se convierta en “aaaaria@@aaa” al decodificar y esta basura no era parte de nuestro mensaje a ocultar.
Con un mensaje justo de los caracteres necesarios, todo funciona perfectamente.
< Sobre Horrografia.exe >
Esta aplicación esta programana en Python 2.7, para el GUI se eligio WX por su facilidad y la exportación se hizo con py2exe. Lamentablemente esto hizo que el script original y funcional de 40.2Kb se convirtiera en un ejecutable de 16M.B por todas las dependencias. Asi mismo se penso empaquetar el ejecutable con la mejor compresion de UPX pero si acaso se reducia en 1.5Mb el peso con la desventaja de que algunos AV podrian lanzar falsos positivos por usar UPX, asi que se dejo como estaba.
La aplicación GUI requiere de 2 imagenes (.png e .ico) Las cuales se forman dentro del script y se localizaran en C:\Windows\Temp y al salir con el boton “Salir” se eliminaran. Sin embargo si se mata la aplicacion de otra manera, estas permaneceran.
Nota: No se recomienda ejecutar la aplicación con permisos Administrativos ya que esto causara que las imágenes creadas en C:\Windows\Temp tengan permisos de Administrador y si despues se vuelve a ejecutar la aplicacion con permisos restringidos y no se eliminaron las imagenes, puede que la aplicacion al intentar sobreescribirlas, usarlas y/o borrarlas cause conflicto.
< Horrografia sobre entornos Linux >
El programa originalmente se hizo bajo entornos linux por lo que tengo 2 scripts completamente funcionales para linux de la aplicacion en version GUI y CLI. Personalmente la que he estado usando es la CLI.
Sin embargo hasta ahora no tengo plan alguno de liberar los scripts, y la razon es que la version CLI son 252 lineas de codigo, codigo feo y que facilmente cualquier pudo realizar en menos lineas. Asi que mi razon es verguenza de mi codigo =(
Sin embargo para usuarios Ubunteros, de Mint, y derivados Debian, pueden usar wine, ya que es 100% compatible.
Y para usuarios no derivados de Debian, recomiendo la version de Horrografia-Online.
Si llegara haber demanda sobre los scripts podria limpiarlos esteticamente un poco y liberar los scripts.
…..
….
…
..
.
buEno Sin mAS poR ahoRa, estA Es mi horrOGrafIA eSpeRO lEs guste la ideA y LeS pueda serVIR En estOS tiEmpOS EN loS Que caDa veZ Es Mas diFiCil tEneR pRivaCIDAd y lIBeRTad de exPResión.
P.D ustedEs quE opInaN del SeñOr @felIPecaLDeRon??
Ir a Horrografia-Online
Descarga Horrografia.exe
Saludos
Atte. hecky
hecky@neobits.org
Sigueme en twitter: http://twitter.com/hecky
Hola en esta entrada quiero compartir un documento que hice para un curso online que tome en UniversIT y que tuve la fortuna de que mi instructor fuera el profesional reconocido Roberto Martinez, el curso era sobre “Digital Forensics Fundamental Skills” y en una sesión sobre formatos de archivos me ofrecí a realizar un documento de como por ejemplo yo en un reto de un wargame me tuve que iniciar en el estudio de un Formato.
Así que aquí comparto dicho documento sobre el formato PNG y como aplique ese estudio a la resolución del reto. Al final se adjunta este mismo documento en PDF para quien prefiera descargarlo
Escenario:
Se nos proporciona una Imagen png corrompida, en algunos visores se puede ver parte de ella y en otros no se abre. La imagen forma parte de un reto de un wargame (El cual no mencionare para no aurrinar dicho reto)
Objetivos:
- Demostrar como iniciarse con el analisis de un formato desconocido.
- Documentarse y aprender aspectos basicos del formato PNG
- Reparar la imagen para que sea completamente visible.
Abordaje:
- Se mostrara como es posible realizarlo bajo entornos Windows y Linux (Es indistinto ya que el formato no cambia)
- Se mostraran herramientas similares en ambos entornos y diferentes maneras de realizarlo.
Imagen:
Se puede descargar de http://neobits.org/retos/analizapng/reto.png
Como se alcanza a apreciar solo se ve una parte y este visor (gwenview en linux) toma lo demas como transparencia.
En windows por ejemplo el icono “preview” de la imagen igualmente se ve esa transparencia, y el visor por defecto de windows lo muestra asi:
Pero algunos visores no lo pueden abrir ya que identifican error en el formato, Ej (eog en linux)
Por ejemplo internet explorer tampoco muestra parte de la imagen ya que lo toma como error. Google Chrome y firefox si nos muestra una parte de esa imagen.
eog nos arrojó informacion de donde esta el error. “PNG: IDAT: CRC error” esto poco a poco lo iremos entendiendo.
Pero ahora que hacer? Necesitamos documentarnos!!
El PNG es un formato bastante conocido y muy bien documentado en Internet, sin embargo para mi la mejor documentación sobre este formato que podria haber encontrado esta en:
Aqui encontraremos una INMENSA cantidad de información de como trabaja el PNG. Como esta no es una guia del formato PNG, sino una resolución al problema plateado, resumire rapidamente cuestiones básicas que necesitaremos saber,
- Todo PNG comienza con su firma (0×89 0×50 0x4E 0×47 0x0D 0x0A 0x1A 0x0A )
- Los PNG tienen la característica de poseer chunks (Fragmento de información caracteristica de formatos multimedia)
- El PNG tiene 18 diferentes tipos de chunks cada uno con su especificación
- El chunk IDAT es la que contiene la información de la imagen en si.
Parte importante es saber la estructura de los chunks y en el siguiente apartado se explica perfectamente http://www.w3.org/TR/PNG/#5Chunk-layout
Todo chunk sigue esta especificacion:
El chunk IDAT trabaja con la primera especificación. Pero ahora veamos cuantos bytes ocupa esta especificación.
- 4 bytes para el tamaño de dicho chunk. El tamaño que se especifica SOLO ES PARA LA INFORMACION DEL CHUNK (no incluye los 4 bytes del tamaño, 4 bytes del tipo de chunk y 4 bytes del CRC)
- 4 bytes para el tipo de chunk que estan en texto plano y se pueden consultar los 18 tipos aqui
- La información del chunk ocupa el numero de bytes que se indico en el LENGTH
- El CRC ocupa 4 bytes y calcula el crc32sum del CHUNK TYPE y del CHUNK DATA
Vale mucha teoria? La verdad no, se los deje de lo mejor resumido y con los ejemplos quedara
entendido perfectamente.
Veamos un ejemplo:
Esta es la forma que se ve hexadecimalmente el png. El editor hexadecimal aqui usado es Winhex bajo Windows, Winhex tiene la opcion de colorear ciertas partes para hacerlo mas identificable.
En el ejemplo vemos 4 colores que corresponden a;
- Amarillo -> Firma PNG (Solo una vez y en todo png)
- Verde -> Longitud de la información del chunk
- Rojo -> Tipo/Nombre del chunk
- Blanco -> Información del chunk
- Azul -> CRC calculado del chunk (crc32sum de Rojo+Blanco)
Calcular Longitud:
Para calcular la longitud se debe pasar de hexadecimal a decimal para saber cuantos bytes. Se puede hacer con la calculadora en linux, windows o la fisica. Simplemente elegir el modo programador y listo. Yo lo hice mas rapido con php y la funcion hexdec();
Vemos las longitudes respectivamente y asi sabemos la longitud de información que tiene cada chunk:
- IHDR 13 bytes de información
- tEXt 71 bytes de información
- sRGB 1 byte de información
- IDAT 8192 bytes de información (Primer IDAT)
Calcular CRC:
Ahora hare uso de otro excelente editor hexadecimal, ahora en linux (OKTETA) Por su facilidad de calcular el crc32sum y mostrarme numero de bytes seleccionados es mi preferido para esta tarea en especifico.
Recordemos que para realizar el calculo del CRC del chunk se debe seleccionar los bytes de informacion del chunk mas el nombre del chunk. Y al final de la información del chunk estaran los 4 bytes que son el CRC.
Veamos un ejemplo de como se calcularia ERRONEAMENTE EL CRC. En el siguiente ejemplo solo se seleccionan los 13 bytes de informacion del chunk IHDR, lo cual al calcular el CRC nos da diferente a lo que debiamos
Ahora veamos como seria lo correcto para el calculo del CRC del chunk IHDR
Ya en este caso elegimos los 13 bytes de la informacion + 4 bytes del nombre del chunk y nos da el CRC correcto =). Lo mismo lo podemos hacer para los demas.
Ahora rapidamente con winhex se selccionan los bytes tambien y nos dirigimos a “Tools>ComputeHash” (Herramientas>Calcular Hash) seleccionamos CRC32 y nos lo calculara de la misma manera.
Ya entendimos (espero) como esta conformado esto pero ahora donde buscamos el error? Bueno lo
podemos hacer de varias maneras.
1.- La teoria dice que los chunks IDAT son los que contiene la información de la imagen en si. Asi que si un pedazo no se ve, podemos decir que el problema esta en este chunk.
2.- Esta ya la hicimos de hecho. Al abrirlo con eog en linux no dio el error: “PNG: IDAT: CRC error” Lo mismo pasa con el visor Irfanview en windows.
Asi que aqui ya nos dice que el error esta en el chunk IDAT y que el crc32sum calculado para ese chunk no corresponde, osease alteraron una parte (bytes) dentro de este chunk.
3.- En windows existe un programa llamado “Tweakpng.exe” que nos ayuda a identificar errores en los PNG
Aqui Tweakpng nos identifica el mismo error que en los anteriores casos dedujimos y nos dice que CRC tiene y cual DEBERIA tener.
4.- Por ultimo tenemos ahora una utilidad para linux llamada “Pngcrush” que igualmente nos puede identificar error y corregirlo (si le es posible)
Bastara con correr el siguiente comando.
1 | $pngcrush -fix reto.png out |
Y esto repararia si es posible, en esta caso no lo fue, pero nos ayudo a identificar el problema tambien.
PreConclusión:
Hay un chunk IDAT que esta dañado y por ello no concuerda el CRC. Y ahora?
Alguien hasta ahorita que han leido este manual se preguntó ¿Cuantos chunks IDAT puede tener un PNG?
R = Puede contener muchos.
Osease que aqui nosotros estamos con el primer chunk IDAT que vemos. Pero veamos cuantos tiene nuestro archivo.
En Winhex busquemos la cadena “IDAT” con CTRL+F y activando “Count Occurrences” o en linux con el comando;
1 | $strings reto.png | grep IDAT -c |
Bueno tenemos 96 IDATS ¿Cual es?
Esta parte seria de todas la tardada. Lo que hice fue ir checando el CRC de cada IDAT.
Por ejemplo el del primer IDAT si recuendan eran (0×00 0×00 0×20 0×00) 8192 bytes de información + 4 del nombre IDAT = 8196
Asi que el CRC de ese IDAT es:
Este IDAT Esta correcto, asi que tendremos que hacer esto con todos los demas, y el que este incorrecto analizar por que esta incorrecto y corregirlo.
Afortunadamente el error (les puedo adelantar) esta dentro de los primeros 10 IDAT (no digo cual para animarlos a que lo hagan)
Veamos este IDAT
El nombre del chunk esta bien y la longitud dice que es; (0×00 0×00 0×10 0×00) == 4096
Ahora yo rapidamente analizando los IDAT vi que habia 3 valores en longitud nada mas.
0×00002000 == 8192 (94 IDAT)
0×00001000 == 4096 ( 1 IDAT)
0x000014BF == 5311 ( 1 IDAT)
Asi que analizaremos ese IDAT.
Si la longitud es de 4096 y el nombre del IDAT ocupa 4 bytes. 4096+4 = 5000. Osea despues de 5000
bytes debe comenzar el otro IDAT.
Sin embargo despues de 5000 bytes no se encuentra el IDAT. Aqui esta el error!!!
Si partimos de la premisa de que todos los IDAT deben ser del mismo tamaño entonces vemos que la longitud de este IDAT esta mal. El siguiente IDAT se encuentra 4096 bytes despues de los 4096 ( o 5000 contando el nombre del chunk) entonces 4096+4096= 8192
Y 8192 (base 10) == 0×00002000 (base 16)
Ya lo tenemos!!!
Tenemos que corregir la longitud de ese chunk. Osea nada mas cambiar el byte 0×10 por 0×20
Lo guardamos!!! Y…….
Perfecto reto pasado!! (Borro la respuesta del reto para no aurrinarlo)
Muy dificil? Yo no sabia mucho de este formato y me tuve que documentar todo lo que les explique aqui, la verdad fuera de lo facil,dificil y las 2 horas que me tomo hacer esto, fue muy INSTRUCTIVO.
Diran, TANTO PARA ESTO? Un solo numerito? Quiero terminar con un cuento clasico (mi resumen =P) en estas ocasiones:
“Un señor tiene la mejor computadora del mundo, un dia deja de funcionar, llama al técnico y le dice que la repare.
El técnico la revisa y dice…Ya se que tiene!! Va a su maletin y saca un desarmador, aprieta un tornillo que estaba flojo y la computadora funciono. Se acerca al dueño y le dice son $1000 USD?
>Mil dolares? Por apretar un tornillo, eso yo lo pude hacer. Quiero me de una factura de sus servicios.Apretar un Tornillo $1 USD
Saber que tornillo apretar $999 USD”
En este caso solo cambiamos un byte.
Pero lo que aprendimos fue que byte, de 784844 bytes que eran. Y considerando que valor deberia tener ya que un byte podia tener 256 posibles valores.
Asi que creo aprendimos bastante en esto. Pero lo mas importante; que un formato desconocido no nos va a detener y documentandonos bien podemos lograr cosas CHULAS!!!
Esto es todo, espero les agradara el manual y ya saben cualquier duda decirmelo.
Dedicado: #UniversIT Course: Digital Forensics Fundamental Skills
Documento Análisis y Reparación de una imagen PNG corrompida [PDF]
Saludos
Atte. hecky
hecky@neobits.org
Sigueme en twitter: http://twitter.com/hecky







































Sus Opiniones hacen que la Web Viva