• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NuGuN

[VB6] Ocultar Ficheiros Dentro de Outros Ficheiros - How To

14 mensagens neste tópico

O que vou esplicar neste tut é uma forma muito simples e incompleta de como se pode ocultar ficheiros dentro de outros ficheiros. Digo incompleta porque o ficheiro a ocultar poderia ser encriptado etc... mas como o que pretendo não é aprofundar este assunto, mas sim, dar a conhecer um metodo simples e basico de como se pode fazer istu....

Para que serve?? Imaginem que tem um ficheiro confidencial que naõ querem que ninguem veja.. podem utilizar este metodo para o esconder e assim vão diminuir bastante as probabilidades de alguem o encontrar

Este metodo baseia-se numa ideia muito simples e basica que é a seguinte:

Temos um Ficheiro Base(File1) que é o ficheiro onde iremos ocultar o Ficheiro a ocultar(File2).

Depois carrega-se os dois ficheiros para duas variaveis e depois junta-se a informação das duas variaveis numa só e guarda-se um novo ficheiro(File3) contendo os 2 ficheiros(File1 e File2) e no seu final guardamos a extensão do File2 e o seu tamanho(esplico o porque mais a frente)

Ficará uma estrotura deste tipo:

Estrotura.JPG

Assim ficamos com o ficheiro oculto e ao abrirmos o ficheiro sera aberto o Ficheiro Base e não o Ficheiro Oculto. Este metodo não funciona com ficheiros *.txt como Ficheiro Base, ao juntar um ficheiro qualquer a um ficheiro *.txt quando for aberto esse ficheiro vai ficar a mostra o outro ficheiro(façam a experiencia)

Passemos ao código. Deixo em anexo o programa que fiz, para analizarem, e vou esplicar apenas as funções que ocultão e "desocultão" os ficheiros.

Função para Ocultar

Private Sub OcultaFicheiros()
On Error GoTo Erro
Dim FicheiroBase As String
Dim FicheiroOcultar As String
Dim FicheiroFinal As String
Dim LFicheiroOcultar As Long
Dim iFreefile As Long

iFreefile = FreeFile

Open DirFile1 For Binary Access Read As #iFreefile
    FicheiroBase = Space(iFreefile)
    FicheiroBase = Input(LOF(1), #iFreefile)
Close #iFreefile
DoEvents

Open DirFile2 For Binary Access Read As #iFreefile
    FicheiroOcultar = Space(iFreefile)
    FicheiroOcultar = Input(LOF(1), #iFreefile)
Close #iFreefile
DoEvents

LFicheiroOcultar = Len(FicheiroOcultar)




MsgBox "Ficheiro Final Gerado", vbInformation, "Info"


With cdFicheiros
    .FileName = ""
    .DefaultExt = Extencao(DirFile1)
    .Filter = "*" & Extencao(DirFile1) & "|" & "*" & Extencao(DirFile1)
End With

cdFicheiros.ShowSave

iFreefile = vbNull

If cdFicheiros.FileName <> "" Then

    Open cdFicheiros.FileName For Binary Access Write As #iFreefile
        Put #iFreefile, , FicheiroBase & vbTab
        Put #iFreefile, , FicheiroOcultar
        Put #iFreefile, , vbTab & Extencao(DirFile2) & vbTab & Val(LFicheiroOcultar)
    Close #iFreefile
    
    cdFicheiros.FileName = ""
End If

Exit Sub

Erro:
MsgBox "Occoreu um erro durante a criação do Ficheiro final.", vbCritical, "Erro"
DirFile1 = ""
DirFile2 = ""
txtFile1.Text = ""
txtFile2.Text = ""
End Sub

iFreefile = FreeFile 'Reservamos espaço na memória para carregar os ficheiros

Open DirFile1 For Binary Access Read As #iFreefile  'Abrimos o Ficheiro Base em modo binario apenas para leitura
   FicheiroBase = Space(iFreefile)                  'redimensionamos a variavel FicheiroBase com o tamanho do Ficheiro Base
   FicheiroBase = Input(LOF(1), #iFreefile)        'carregamos o Ficheiro Base para dentro da variavel Ficheiro Base
Close #iFreefile 'Fechamos o Ficheiro Base

Seguimos os mesmos passos acima explicados mas agora para o Ficheiro a Ocultar

Open DirFile2 For Binary Access Read As #iFreefile
    FicheiroOcultar = Space(iFreefile)
    FicheiroOcultar = Input(LOF(1), #iFreefile)
Close #iFreefile

LFicheiroOcultar = Len(FicheiroOcultar) + Len(Extencao(DirFile2)) + 3 'Guardamos o tamanho do Ficheiro a Ocultar e adicionamoslhe mais o espaço que a informação do tamanho, extensão do Ficheiro Oculto e os Tab's que vão separar esses valores 

If cdFicheiros.FileName <> "" Then

    Open cdFicheiros.FileName For Binary Access Write As #iFreefile                  'é criado o Ficheiro Final(File3)
        Put #iFreefile, , FicheiroBase & vbTab                                       'Metemos o Ficheiro Base dentro do Ficheiro Final
        Put #iFreefile, , FicheiroOcultar                                            'Metemos o Ficheiro a Ocultar dentro do Ficheiro Final
        Put #iFreefile, , vbTab & Extencao(DirFile2) & vbTab & Val(LFicheiroOcultar) 'Colocamos no final do Ficheiro Final a extensão e tamanho do Ficheiro a Ocultar
    Close #iFreefile                                                                 'Fechamos o Ficheir Final
    
    cdFicheiros.FileName = ""
End If

Put #iFreefile, , vbTab & Extencao(DirFile2) & vbTab & Val(LFicheiroOcultar) -> Nesta linha é chama uma função que recebe o directorio do  Ficheiro a Ocultar no formato "c:\directorio\ficheiro.*" e retira a extensão do Ficheiro a Ocultar (Extencao(DirFile2))

Private Function Extencao(str As String) As String
Dim EXT As String
Dim temp As String
Dim temp2 As Single

temp = StrReverse(str)   'Viramos a string de "pernas para o ar". Se o seu valor fosse "abcd" antes desta linha, ficaria "dcba"
                         'depois dela
temp2 = InStr(temp, ".") 'Guarda na variavel temp2 o numero de caracteres que existem desde o inicio da string ate ao primeiro
'                        'ponto final, que supostamente indica o inicio da extensão do ficheiro
temp = StrReverse(temp)  'Como na primeira linha revertemos a ordem da string, nesta linha voltamos a colocala na sua ordem normal
EXT = Right(temp, temp2) 'Guardamos a extensão para  variavel EXT. Se a string recebida fosse p exemplo "C:\directorio\ficheiro.ext"
                         'o que aconteceria nesta linha era o seguinte:
                         'como a Função Right comessamos a analizar a variavel temp da direita para a esquerda ou seja,
                         'do fim para o inicio
                         'em seguida é apenas recolhido o numero de caracteres que foram contados na linha anterior.

Extencao = EXT           'É retornada a extensão do Ficheiro a Ocultar
End Function

E está o ficheiro oculto  :)

Agora vamos a função para recuperar o Ficheiro Oculto

Função para recuperar o Ficheiro Oculto

Private Sub RecoperaFicheiro()
On Error GoTo Erro
Dim FicheiroCompleto As String
Dim FicheiroRecuperado As String
Dim iFreefile As Long
Dim LFile As String
Dim temp As Single
Dim temp2 As String
Dim EXT As String

iFreefile = FreeFile 'Reservamos espaço na memória para carregar os ficheiros

Open DirFile For Binary Access Read As #iFreefile 'abrimos o Ficheiro Final que contem o ficheiro oculto, em modo binario apenas para leitura
    FicheiroCompleto = Space(iFreefile)           'redimensionamos a variavel FicheiroCompleto com o tamanho do Ficheiro Final
    FicheiroCompleto = Input(LOF(1), #iFreefile)  'carregamos o Ficheiro Final para dentro da variavel FicheiroCompleto
Close #iFreefile                                  'Fechamos o Ficheiro Final

temp2 = Right(FicheiroCompleto, 20) 'Na variavel temp2 guardamos os ultimos 20 caracteres da variavel FicheiroCompleto para
                                    'retirarmos a extensão e o tamanho do Ficheiro Oculto, que se encontra no final do Ficheiro Final

temp2 = StrReverse(temp2)           'Invertemos o sentido da string - antes "abc" - depois "cba"

temp = InStr(temp2, vbTab)          'Ao guardarmos a extensãoe o tamanho do Ficheiro Oculto separamos esses valores por um Tab.
                                    'O que esta linha faz é retornar o numero de caracteres que se encontram antes do tamanho do ficheiro ou seja
                                    'depois de invertermos a string ficamos com algo deste tipo ->
                                    '"tamanho do ficheiro(2000)     extensão do ficheiro(.jpg)      FileData"...
                                    'Então neste caso p valor da variavel temp seria 5, uma vez que o tamanho do Ficheiro Oculto
                                    'é 2000 e o primeiro Tab encontra-se na quita posisão

If temp <> 0 Then                    'Se for encontrado o tamanho do Ficheiro Oculto Então...
    
    temp2 = StrReverse(temp2)        'Voltamos a inverter o valor da variavel temp2 para que volte ao normal
    
    LFile = Right(temp2, (temp - 1)) 'Agora dos 15 caracteres que a variavel temp2 tem, retiramos uma quantidade de caracteres
                                     'determinado pela variavel temp, do fim da variave temp2
    Else
        MsgBox "O ficheiro selecionado não contem nenhum ficheiro oculto", vbExclamation, "Inválido"
        Exit Sub
End If

'################ Retira a extensão do Ficheiro Oculto ##################

'Estas linhas tem um funcionamento identico que as acima esplicadas. Envez de
'procurar o primeiro TAB apartir do fim da string, procura um ponto final(".")
'e isola a extensão do Ficheiro Oculto

temp2 = Right(FicheiroCompleto, 20)
temp2 = StrReverse(temp2)
temp = InStr(temp2, ".")

temp2 = StrReverse(temp2)
EXT = Right(temp2, temp)
EXT = Left(EXT, Len(EXT) - (Len(LFile) + 1))
'#########################################################################

temp = Len(LFile) + Len(EXT) + 2 ' Guarda-se o espaço que a extensão, tamanho
                                 'e os TAB's que separam esta informação ocupão

FicheiroRecuperado = Right(FicheiroCompleto, LFile + Len(EXT) + 1) 'Retira-se o ficheiro oculto de dentro do Ficheiro Final
                                                                   'para a variavel FicheiroRecuperado juntamente com a
                                                                   'extensão e o seu tamanho no fim.

FicheiroRecuperado = Left(FicheiroRecuperado, Len(FicheiroRecuperado) - temp) 'Retira-se a extensão e o tamanho do final do
                                                                               'Ficheiro Oculto uma vez que ja não faz falta.

With cdProcura
    .FileName = ""
    .DefaultExt = EXT
    .Filter = "*" & EXT & "|" & "*" & EXT
End With

cdProcura.ShowSave



'E por fim guarda-se o Ficheiro Oculto já recoperado 
Open cdProcura.FileName For Binary Access Write As #iFreefile
    Put #iFreefile, , FicheiroRecuperado
Close #iFreefile
txtDir.Text = ""
Exit Sub

Erro:
MsgBox "Ocorreu um erro durante a recuperação do ficheiro", vbCritical, "Erro"
txtDir.Text = ""
End Sub

Dou por terminado o tut  :D Alguma duvida que tenham é só perguntarem  :)

Pessoal se alguem tiver algum código fonte de um programa baseado na Esteganografia agradecia que o posta-se aqui  :D. Ou se sabem como se faz istu da Esteganografia agradecia que explicassem porque não sou capas de fazer um programa com a informação que encontro na net soubre este assunto  :wallbash:

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, aqui vai, espero que ajude:

Português - http://pt.wikipedia.org/wiki/Esteganografia

Inglês - http://en.wikipedia.org/wiki/Steganography (Vê com atenção, tem muita info, principalmente nos links)

          - http://en.wikipedia.org/wiki/Category:Steganography

          - http://en.wikipedia.org/wiki/Category:Cryptography

E já agora um prog que pode dar jeito:

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=66151&lngWId=1

Um abraço e bom trabalho  :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se querem saber mais sobre este tipo de tema, procurem umaa técnica denominada "file system in a file".

Isto que consiste em ter um file system inteiro dentro de um ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tyagus eu ja tinha lido issu tudo  :(  de qualquer maneira Obrigado (O programa esta interessante)

Já encontrei mais coisas interessantes mas o que eu queria inad não(saber como se encontra o bit menos significativo dentro dos ficheiros)  :bored:

Um

Dois

Três

M6 o que encontrei que me pareceu que tivesse alguma coisa a ver com o assunto foi intu

Será que tem alguma coisa a ver?

Eu não tenho bem a certeza se esse assunto de "file system in a file" é bem o que estou a pensar.. por exemplo, com issu conssigo fazer:

  • Tenho 2 ficheiros juntod num só
  • E ao executar esse ficheiro acontece o seguinte
  • Há um "salto" para o inicio do segundo ficheiro
  • Executa-o
  • Dá outro "salto" para o primeiro ficheiro
  • Executa-o
  • E termina a tarefa..

Istu de "file system in a file" tem alguma coisa a ver com istu?? Eu á algum tempo vi uma coisa parecida mas metia Assembley e não era nada simples  :bored:

EDIT

Axu que ja econteri o qque precisava na Esteganografia  :)  B)

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim tem. O que se faz é a implementação de um sistema de ficheiros dentro de um único ficheiro.

Da mesma forma que tens ficheiros no teu disco rígido, tens um ficheiro com ficheiros lá dentro, exactamente como se fosse um disco rígido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu só li a thread na diagonal para já,... mas diz uma coisa,... isso faz tipo o que o programa camouflage faz? (camouflar um file usando uma imagem, ficando uma imagem "normal" mas com BUEDA megas)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu só li a thread na diagonal para já,... mas diz uma coisa,... isso faz tipo o que o programa camouflage faz? (camouflar um file usando uma imagem, ficando uma imagem "normal" mas com BUEDA megas)

Nunca utilizei esse programa(camouflage) mas o programa que eu fiz para o tut só aumenta o tamanho consuante o tamanho dos ficheiros.... Imagina que ten uma imagem de 100Kb e queres esconder "dentro" dessa imagem outro ficheiro qualquer que tambem tem 100Kb... logo o ficheiro resultante terá cerca de 200Kb

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
só aumenta o tamanho consuante o tamanho dos ficheiros.... Imagina que ten uma imagem de 100Kb e queres esconder "dentro" dessa imagem outro ficheiro qualquer que tambem tem 100Kb... logo o ficheiro resultante terá cerca de 200Kb

Sim,.. exactamente,.. eu digo que ficava mesmo MUITO GRANDE porque normalmente eram rar's de 10Megas que a malta mandava para o host do sapo com piratarias e porcarias assim.

Mas é isso, mais ou menos. Bom tutu! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com a Esteganografia o tamanho já não se altera, o problema (penso eu que seja assim, pois tem alguma lógica) é que deves ficar limitado ao tamanho do "ficheiro base" dai ser utilizada mais para esconder frases e coisas pequenas...

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso é mt verdade para ficheiros de texto/dados em imagens BMP

estás sempre mt limitado, pois se a imagem bmp(pixel a pixel) for pequena so podes esconder um bite em cada pixel.

se tiveres uma imagem do tamanho dum poster, ai podes esconder mt mais coisas.....

mas estas sempre limitado.,,,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E tu sabes fazer isso? É que eu não consigo encontrar nada de exemplos de como se faz :s nem consigo encontrar explicações de como se "encontra" o byte menos significativo!

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu vi umas coisas muito interessantes nisso no planet-source-code há uns tempos.

tenta pesquisar lá sobre isso. tens imensas coisas.

Alguma delas pode interessar-te.

Até lá tens aplicações que te mostram e esteganografam imagens e ficheiros.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ta um espetaculo...

precisava mesmo disto para uns programas k fix... lol...

brigado mesmo por postar...

abraco

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este exemplo faz-me lembrar o Omicron, 4096 , Brain etc.. (Velhos tempos de Paraiso...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora