NuGuN Posted July 30, 2006 at 02:42 PM Report #41133 Posted July 30, 2006 at 02:42 PM 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: 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 😄 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 😄 . 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 cumps
Tyagus Posted August 1, 2006 at 10:25 AM Report #41470 Posted August 1, 2006 at 10:25 AM 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 😞
M6 Posted August 1, 2006 at 11:13 AM Report #41483 Posted August 1, 2006 at 11:13 AM 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. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
NuGuN Posted August 2, 2006 at 12:00 PM Author Report #41688 Posted August 2, 2006 at 12:00 PM 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
M6 Posted August 2, 2006 at 01:52 PM Report #41711 Posted August 2, 2006 at 01:52 PM 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. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
David Pintassilgo Posted August 2, 2006 at 09:35 PM Report #41821 Posted August 2, 2006 at 09:35 PM 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) cool stuffs to check. http://blog.zxcoders.com//
NuGuN Posted August 2, 2006 at 09:49 PM Author Report #41827 Posted August 2, 2006 at 09:49 PM 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
David Pintassilgo Posted August 2, 2006 at 09:58 PM Report #41829 Posted August 2, 2006 at 09:58 PM 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! 😛 cool stuffs to check. http://blog.zxcoders.com//
NuGuN Posted August 2, 2006 at 10:06 PM Author Report #41830 Posted August 2, 2006 at 10:06 PM 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
operacoes Posted October 31, 2006 at 01:23 AM Report #61104 Posted October 31, 2006 at 01:23 AM 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.,,,
NuGuN Posted October 31, 2006 at 07:26 AM Author Report #61119 Posted October 31, 2006 at 07:26 AM 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
operacoes Posted December 1, 2007 at 04:09 AM Report #151503 Posted December 1, 2007 at 04:09 AM 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.
asworm Posted January 11, 2008 at 04:38 PM Report #159258 Posted January 11, 2008 at 04:38 PM Ta um espetaculo... precisava mesmo disto para uns programas k fix... lol... brigado mesmo por postar... abraco Got it?
programadorvb6 Posted January 13, 2008 at 09:57 AM Report #159543 Posted January 13, 2008 at 09:57 AM Este exemplo faz-me lembrar o Omicron, 4096 , Brain etc.. (Velhos tempos de Paraiso...) ______________________________________________________________________________ Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now