Esteganografía: recupere el texto secreto comparando el original y el texto que contiene la imagen

0

Tengo dos imágenes: st_original.png y st_secret_key_container.png .

La segunda imagen es la misma que la primera, pero contiene un secreto que es la suma de comprobación MD5 de alguna clave que necesitaré para descifrar una pequeña cantidad de texto (el fondo es negro en la segunda).

Sé que esto podría ser inoportuno aquí, pero es una tarea de la universidad, tengo que recuperar el MD5 de la imagen y revertirlo para poder descifrar el texto.

No te estoy pidiendo que hagas el trabajo por mí, en realidad estoy disfrutando averiguarlo, por eso no subí las fotos ni el texto cifrado. Intenté algunas cosas hasta ahora, como buscar una marca de agua en la imagen con OpenPuff y StegoMagic, pero no sirvió para nada. La mayoría de las herramientas que encontré en Google no están actualizadas o ya no se mantienen desde los años 90.

El texto está definitivamente oculto en la imagen, no se trata de "si", se indica claramente en la asignación de que es un texto oculto a través de la estenografía LSB (bit menos significativo).

He pasado un tiempo tratando de resolver esto, el problema es el formato PNG y el fondo negro. Si solo se esconde un MD5 (32 caracteres), entonces no debería cambiar mucho. El fondo negro lo hace difícil porque ha cambiado mucho.

¿Alguna idea de cómo debo abordar esto?

    
pregunta vlatkozelka 02.01.2015 - 20:28
fuente

1 respuesta

0

Resuelto ... Probé una herramienta que mejora LSB, y allí vi que los primeros píxeles eran claramente diferentes, por lo que los 32 caracteres de longitud tenían que escribirse allí. Todo lo que necesitaba eran los valores del LSB de los primeros 256 bytes, cada uno de ellos 8 hace un carácter del MD5.

Aquí está el código que escribí en Java, junto con el resultado:

BufferedImage img = ImageIO.read(new File("D:\crypto secret\2.png"));
        WritableRaster raster = img.getRaster();
        DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
        byte[] data = buffer.getData();

        int j = 0 ;
        String[] bin = new String[32];
        char[] md5 = new char[32];

        for(int i = 0 ; i <256;i++){

            System.out.print(data[i]&0xFF);
            if((j+1)%8==0){
                System.out.println();
            }
            j++;
        }


00110100
01100101
01100101
00110111
00111001
01100100
00110111
00110110
00110011
00110011
01100100
00111000
01100001
01100001
01100100
00111000
00110010
00111000
01100001
00110011
00110100
01100100
00110100
01100101
00111000
00110110
00110010
00110001
01100011
01100001
01100100
00110010

Los convertí a ASCII a través de una herramienta en línea que me dio este MD5 4ee79d7633d8aad828a34d4e8621cad2 y luego una búsqueda que me dio esta cadena antonine , que es parte del nombre de mi universidad. Luego seguí adelante y descifre el texto secreto con eso como clave, en el modo EDS ECB.

El texto oculto era:

Hello students. You solved Task 3 challenge.
    
respondido por el vlatkozelka 03.01.2015 - 21:26
fuente

Lea otras preguntas en las etiquetas