Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 12-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 25
seoane Va por buen camino
Yo continuo, al final este hilo esta siendo un monologo

Bueno, imaginaros esta situación, estas en un ordenador que no es el tuyo y quieres ocultar un archivo a la vista de los curiosos, una foto comprometida, un documento confidencial, etc. Como no es tu ordenador, no te vas a poner a instalar nada, ni andar ejecutando ningún programa extraño, pero lo que si podemos hacer es abrir la consola de comandos y teclear esto:
Código:
copy /b foto.jpg+secreto.doc oculto.jpg
Donde "foto.jpg" es una foto jpg cualquiera, que tenga una apariencia lo mas inocente posible, "secreto.doc" es el archivo a ocultar (puede ser cualquier tipo de archivo) y "oculto.jpg" es el nombre del archivo ya empaquetado.

Te preguntaras que hacemos con esto, pues básicamente "ponerle un sombrero" a nuestro archivo. A todos los efectos el archivo resultante parecerá una foto, y tanto la vista previa de windows, como la mayoría de los programas lo abrirán como si de una foto se tratara.

Ahora el problema es "quitarle el sombreo" a nuestro archivo. Para esto no queda mas remedio que usar un programa (al menos no se de ningún comando que realice esta labor). Y aquí es donde, por fin , entra en acción el siguiente código:

Es una aplicación de consola
Código Delphi [-]
program unpack;

{$APPTYPE CONSOLE}

uses 
  SysUtils, Classes;

// Esta funcion posiciona el puntero al principio del archivo oculto
procedure QuitarSombrero(Stream: TStream);
var
  Buffer: array[0..3] of Byte;
  Size: Integer;
begin
  while TRUE do
  begin
    FillChar(Buffer,Sizeof(Buffer),#0);
    Stream.Read(Buffer,4);
    Size:= ((Buffer[2] shl 8) + Buffer[3]) - 2;
    case Buffer[1] of
      $01,$D0..$D8: Stream.Seek(-2,soFromCurrent);
      $D9: begin
             Stream.Seek(-2,soFromCurrent);
             Exit;
           end;
      $DA: begin
             Stream.Seek(-2,soFromCurrent);
             while TRUE do
             begin
               Stream.ReadBuffer(Buffer,1);
               if Buffer[0] = $FF then
               begin
                 Stream.ReadBuffer(Buffer,1);
                 if (Buffer[0] <> 0) and not (Buffer[0] in [$D0..$D7]) then
                 begin
                   Stream.Seek(-2,soFromCurrent);
                   break;
                 end;
               end;
             end;
           end;
      else
        Stream.Seek(Size,soFromCurrent);
    end;
  end;
end;

var
  Entrada, Salida: TFileStream;
begin
  try
    Entrada:= TFileStream.Create(ParamStr(1),fmOpenRead or fmShareDenyWrite);
    try
      Salida:= TFileStream.Create(ParamStr(2),fmCreate);
      try
        QuitarSombrero(Entrada);
        Salida.CopyFrom(Entrada,Entrada.Size - Entrada.Position);
      finally
        Salida.Free;
      end;
    finally
      Entrada.Free;
    end;
  except
    On E: Exception do
      Writeln('Error: ' + E.Message);
  end;
end.

Por ejemplo, para extraer "secreto.doc" de "oculto.jpg":
Código:
unpack oculto.jpg secreto.doc
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Utilidad para comparar dos bases de datos. avmm2004 Varios 1 16-11-2006 20:47:22
Utilidad para contar lineas de código Alexander Varios 10 18-10-2006 00:14:55
Utilidad para manejo de lista TODO ANG4L Varios 3 02-08-2006 09:36:39
Cual es la utilidad de la paleta Server Gelmin Servers 1 05-03-2004 22:20:36
utilidad del application.tag Giniromero OOP 8 17-10-2003 12:21:53


La franja horaria es GMT +2. Ahora son las 19:15:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi