Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
dove la textbox1 racchiude la directory dell' immagine, la textbox2 quella del file (od archivio) e la textbox4 racchiude la directory del file di output, poi c'è una textbox3 con la password (ma tralasciamola).
Spero di essere stato chiaro così come spero che possiate aiutarmi a risolvere questo brutto problema.
Di solito i file immagine hanno un codice che indica la fine del file. Ad esempio, i JPEG hanno la sequenza di byte FF FB (ossia 255 251): durante la lettura, se incontri questi byte, significa che l'immagine è finita e inizia il testo steganografato. Per ulteriori informazioni, guarda la mia guida al capitolo B8.
Di solito i file immagine hanno un codice che indica la fine del file. Ad esempio, i JPEG hanno la sequenza di byte FF FB (ossia 255 251): durante la lettura, se incontri questi byte, significa che l'immagine è finita e inizia il testo steganografato. Per ulteriori informazioni, guarda la mia guida al capitolo B8.
Ciao totem, ti ringrazio per l' interessamento, però forse non mi hai capito:
i file in questione non sono file testuali, tantomeno si tratta di testo digitato.
I file a cui mi riferisco sono file .exe o .zip o anche .txt, insomma ogni sorta di file.
Con il codice che ho scritto sopra sono riuscito a fare tutto ciò, il problema è che non riesco poi a "riestrarlo", ovvero a dividere nuovamente l' immagine ed il file, riportando tutto allo stato iniziale.
Come hai detto tu, bisogna utilizzare la sequenza finale del file immagine, ma il problema è che non so come procedere nè da dove iniziare.
Per quanto riguarda la steganografia, quello è un discorso a parte, in quanto lo sto usando per nascondere la password e so benissimo come procedere e cosa fare.
L' unico problema (non certo piccolo!) e quello che vi (ti) ho descritto sopra.
Il testo è dato comunque de una sequenza di bytes, quindi dire testo o dire zip è la stessa cosa. Inoltre questo è uno dei modi di fare steganografia, quindi il termine non è improprio.
Io proporrei di aggirare il problema, nel vero senso della parola. Anziché iniziare dall'inizio, inizi a leggere dalla fine del file. Qui, nei DATI nascosti poni un header proprietario, in cui i primi bytes servano da riconoscimento e quelli successivi indichino la dimensione dei dati da leggere.
Quindi un file potrebbe terminare con questi bytes, ad esempio:
Codice sorgente - presumibilmente Plain Text
10 00 00 00 FC FD FE FF
che, letti al contrario, diventano:
Codice sorgente - presumibilmente Plain Text
FF FE FD FC 00 00 00 10
Consideriamo i primi quattro bytes come header dei dati nascosti, poiché è molto improbabile che un file qualsiasi termini con quattro byte in successione. Dopo questo, vengono quattro bytes che codificano un Integer (intero a 4 bytes), il cui valore è 16. Questo significa che il programma deve leggere 16 bytes da quel punto retrocedendo nello stream. Ignenioso, vero?
Allora ti dico come (prima che mi consigliassi quest' altra procedura) avevo fatto. Questo perchè mi hai dato tu lo spunto quando hai usato la parola "steganografia", poi mi hai detto di considerare un qualsiasi file come testo, così ho pensato di "leggere", subito dopo aver trovato le sequenze FF D9 (ovviamente sto considerando una immagine .jpg con un file nascosto al suo interno) che codifica la fine del file, i bytes nascosti e di aggiungerli in un array.
Poi ho pensato che attraverso la funzione write avrai potuto scrivere in un nuovo file l' array di bytes nascosti nel file .jpg.
Questo è il codice:
Codice sorgente - presumibilmente VB.NET
Try
Dim Buffer()AsByte= IO.File.ReadAllBytes(TextBox1.Text)
DimEOFAsBoolean=False
Dim Bytesnascosti AsNew List(Of Byte)
For I As Int64 = 0 To Buffer.Length- 1
IfEOFThen
Bytesnascosti.Add(Buffer(I))
Continue For
EndIf
If I = Buffer.Length- 1 Then
ExitSub
EndIf
If Buffer(I)= 255 And Buffer(I + 1)= 217 Then
EOF=True
I += 1
EndIf
Next
Dim Bytes(Bytesnascosti.Count- 1)AsByte
Bytesnascosti.CopyTo(Bytes)
Dim filenascosto AsNew FileStream(TextBox2.Text, FileMode.CreateNew)
Il risultato di output?
Mi ritrovo un file identico a quello nascosto (con la stessa icona, la stessa dimensione, etc...)
ma corrotto, in quanto nel momento in cui lo voglio eseguire mi dà un errore dicendomi che non si tratta di una applicazione win32 valida.
Probabilmente ci sarà un errore stupido, ma purtroppo queste sono le mie conoscenze e\o le mie esperienze, per cui proprio non riesco a capacitarmi.....
Inoltre se pur abbia perfettamente capito quanto tu mi hai consigliato nel thread precedente, non so come metterlo in pratica, quindi ti sarei molto grato se mi aiutassi
Ultima modifica effettuata da Pinnolo il 08/09/2008 alle 22:22
Il codice di lettura sembra giusto, è quello del capitolo sull'input/output di file binari. Forse bisognerebbe controllare il codici che scrive i dati e, soprattutto, controllare i dati scritti con un hex editor, almeno all'inizio e alla fine.
Poi, se hai capito quello che ti ho suggerito, converrai che è inutile farlo se usi solo file jpeg, di cui conosci perfettamente la fine.
Tuttavia, se vuoi implementarlo, questo codice ti potrebbe essere utile: