Recuperar cadenas UTF16 desde Slack Space

0

Usando la imagen de disco proporcionada por el proyecto CFReDS aquí , tenemos la tarea de recuperar lo eliminado Texto, mucho en ruso, algo en inglés, en UTF16BE. En el espacio asignado, esto va relativamente rápido usando fls y icat. Sin embargo, algunos datos parecen estar en el espacio no asignado (holgura). Si esto fuera ASCII, podríamos usar grep con los parámetros "abi". Pero eso no está funcionando.

Esto es diferente a la pregunta aquí que es más sencillo y se puede resolver con grep -abi , pero como este problema requiere la recuperación de UTF 16, el problema es un poco diferente y parece estar más relacionado con preguntas como this preguntando cómo grep UTF16. Además, la respuesta proporcionada aquí es un poco escasa en detalles. Para aquellos que buscan simplemente recuperar el texto ASCII y los archivos eliminados del espacio vacío, el recorrido proporcionado por Linux LEO aquí es mucho más detallado.

He intentado usar XXD para descargar el hex a través de sed para eliminar 'B9' y desde el hex hacia atrás, sin suerte. Este problema de grepping no ASCII en el espacio de holgura parece ser un problema que interesa a algunas personas, (consulte aquí ). Intenté ver liblightgrep aquí , que desafortunadamente falla en una dependencia de compilación no especificada (justo después de libboost_options) .

¿Cómo puedo recuperar el texto no ASCII que ha tenido los encabezados de archivo eliminados a propósito del espacio vacío?

    
pregunta Donnied 13.04.2017 - 22:00
fuente

1 respuesta

2

¿Tal vez strings pueda ser de ayuda? Con el parámetro -eb extraerá cadenas UTF-16BE.

En cuanto a los caracteres rusos que no se encuentran, no conozco una herramienta que los encuentre directamente. Pero, Python al rescate:

russian_str = u''
f = open('fakeslack', 'rb')

while True:
    c = f.read(2)
    if c == '':
        break
    if c[0] == '\x04':  # russian chars start with 04
        russian_str += (c[1] + c[0]).decode('utf16')  # big endian
    else:
        if russian_str != '':
            print(russian_str)
            russian_str = ''

Esto me funciona en un archivo falso falso que generé al pegar algunas palabras de la Wikipedia rusa entre algunas palabras en inglés y espacios en blanco:

$ cat fakeslack 
foobar
fewufew
fweu
ncd
Википедию кораблях  fweufweАйоваnwefwe
$ recode utf8..utf16be fakeslack 
python ru_strings.py
Википедию
кораблях
Айова
    
respondido por el alech 13.04.2017 - 22:12
fuente

Lea otras preguntas en las etiquetas