Recupera le stringhe UTF16 dallo spazio allentato

0

Utilizzando l'immagine del disco fornita dal progetto CFReDS qui , abbiamo il compito di recuperare cancellato testo, molto in russo, alcuni in inglese, in UTF16BE. Nello spazio allocato, questo è relativamente veloce usando fls e icat. Tuttavia, alcuni dati sembrano essere nello spazio non allocato (allentato). Se questo fosse ASCII, potremmo usare grep con i parametri "abi". Ma non funziona.

Questo è diverso dalla domanda qui che è più diretta e può essere risolto con grep -abi - ma, poiché questo problema richiede il recupero di UTF 16, il problema è un po 'diverso e sembra correlato più a domande come questo chiede come eseguire grep UTF16. Inoltre, la risposta fornita qui è un po 'sciatta nei dettagli. Per coloro che cercano semplicemente di recuperare il testo ASCII e i file cancellati dallo spazio allentato, la descrizione fornita da Linux LEO qui è molto più dettagliata.

Ho provato a usare XXD per scaricare l'esagono attraverso sed per rimuovere 'B9' e dall'esagono indietro, senza fortuna. Questo problema di grepping non ASCII nello spazio allentato sembra essere un problema che interessa alcune persone, (cf qui ). Ho provato a guardare liblightgrep qui , che sfortunatamente fallisce su una dipendenza di build non specificata (subito dopo libboost_options) .

Come posso recuperare il testo non ASCII che ha avuto le intestazioni di file rimosse intenzionalmente dallo spazio allentato?

    
posta Donnied 13.04.2017 - 22:00
fonte

1 risposta

2

Forse strings può essere d'aiuto? Con il parametro -eb estrarrà le stringhe UTF-16BE.

Poiché i caratteri russi non vengono trovati, non sono a conoscenza di uno strumento che li trovi direttamente. Ma, Python in soccorso:

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 = ''

Questo funziona per me su un file fasullo che ho generato incollando alcune parole della Wikipedia russa tra alcune parole inglesi e spazi vuoti:

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

Leggi altre domande sui tag